当前位置: 首页 > article >正文

SegFormer网络结构的学习和重构

因为太多的博客并没有深入理解,本文是自己学习后加入自己深入理解的总结记录,方便自己以后查看。

segformer中encoder、decoder的详解。


学习前言

一起来学习Segformer的原理,如果有用的话,请记得点赞+关注哦。


一、Segformer的网络结构图

网络结构:主要由Transformer的编码器和轻量级的多层感知机(MLP)的解码器组成

网络特点:
1、结合了Transformers与轻量级的多层感知机(MLP)解码器。
2、包含一个新颖的分层结构的Transformer编码器,该编码器输出多尺度特征。它不需要位置编码, 因此避免了位置编码的插值,这在测试分辨率与训练时不同的情况下可能会导致性能下降。
3、避免使用复杂的解码器。提议的MLP解码器从不同的层中聚合信息,从而同时结合了局部注意力和全局注意力来呈现强大的表示。
4、设计非常简单和轻量级,这是在Transformers上实现高效分割的关键。
5、SegFormer系列模型从SegFormer-B0到SegFormer-B5有多个版本,与之前的模型相比,它们的性能和效率都有显著的提高。

二、理解各模块的网络结果

encoder:作者设计了一系列的 Mix Transformer encoders (MiT),MiT-B0 到 MiT-B5,结构相同,大小不同,MiT-B0 是最轻量级的,可以用来快速推理,MiT-B5 是最重量级的,可以取得最好的效果。

encoder——OverlapPatchEmbed:通过2D卷积操作将图像分块(4分块)并将其嵌入到指定的维度的模块,通过Hierarchical Feature Representation这种方式,编码器可以同时提供高分辨率的粗糙特征和低分辨率的精细特征,从而更好地捕捉不同尺度的上下文信息。

#block1 对输入图像进行分区,并下采样512, 512, 3 => 128, 128, 32 => 16384, 32
        self.patch_embed1 = OverlapPatchEmbed(patch_size=7, stride=4, in_chans=in_chans, embed_dim=embed_dims[0])
       
#block2对输入图像进行分区,并下采样,128, 128, 32 => 64, 64, 64 => 4096, 64
        self.patch_embed2 = OverlapPatchEmbed(patch_size=3, stride=2, in_chans=embed_dims[0], embed_dim=embed_dims[1])

#block3对输入图像进行分区,并下采样  64, 64, 64 => 32, 32, 160 => 1024, 160
        self.patch_embed3 = OverlapPatchEmbed(patch_size=3, stride=2, in_chans=embed_dims[1], embed_dim=embed_dims[2])

#block4对输入图像进行分区,并下采样32, 32, 160 => 16, 16, 256 => 256, 256
        self.patch_embed4 = OverlapPatchEmbed(patch_size=3, stride=2, in_chans=embed_dims[2], embed_dim=embed_dims[3])

encoder——Efficient self-attention:Attention机制(注意力机制),encoder 中计算量最大的就是 self-attention 层模块进行特征特区

        self.attn = Attention(
            dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale,
            attn_drop=attn_drop, proj_drop=drop, sr_ratio=sr_ratio
        )

encoder——Mix FNN:在 FNN (前馈神经网络)中使用了 3x3 的卷积和 MLP,作者认为 position encoding(PE) 来引入局部位置信息在语义分割中是不需要的,所以引入了一个 Mix-FFN,考虑了零填充对位置泄露的影响,直接在 FFN 中使用 3x3 的卷积

    self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio), act_layer=act_layer, drop=drop)

encoder——Overlapped Patch Merging:为了在保持局部连续性的同时获得分层特征图,SegFormer采用了重叠patch merging技术。这种方法通过重叠的patch来合并特征,与不重叠的patch merging相比,可以生成相同大小的特征图,同时更好地保留局部信息。

decoder:本文提出了一个轻量化的全由MLP组成的解码器,之所以可以使用如此简单轻量的decoder是因为本文的分层Transformer编码器比传统的卷积编码器具有更大的有效感受野。

Decoder 的过程:

step 1:将多层级特征输入 MLP 层,来规范通道维度
step 2:将特征图上采样为原图大小的 1/4 大小,concat 起来
step 3:使用一层 MLP 对特征通道聚合
step 4:输出预测 segmentation mask H 4 × W 4 × N 


http://www.kler.cn/a/318645.html

相关文章:

  • 【大数据学习 | flume】flume的概述与组件的介绍
  • sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?
  • 【设计模式】行为型模式(二):策略模式、命令模式
  • jmeter常用配置元件介绍总结之后置处理器
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • Chrome使用IE内核
  • CSP-S 2024 提高级 第一轮(初赛) 阅读程序(2)
  • 【OSS安全最佳实践】降低因操作失误等原因导致数据丢失的风险
  • 【C++笔试强训】如何成为算法糕手Day2
  • 【c++】知识点
  • 分布式光伏监控系统 在鄂尔多斯市鄂托克旗某煤矿项目中的应用
  • GPU高性能编程CUDA入门
  • 拦截器filter
  • 【ShuQiHere】 探索自然语言处理的世界:从基础到应用
  • flutter中常见的跨组件通讯方式
  • Redis 分布式缓存服务(集群)
  • str函数的模拟(包括strn函数的模拟)
  • 江科大51单片机
  • 2024年前端框架选择指南:React、Vue、Angular与新兴框架对比
  • 详解机器学习经典模型(原理及应用)——支持向量机
  • 每天一个数据分析题(四百七十二)- 业务角度
  • 使用nc命令检测UDP端口
  • Android13中Android.mk和Android.bp预编译多种架构文件
  • spark初步探索
  • LD3320语音识别模块的简单应用
  • 从 HDFS 迁移到 MinIO 企业对象存储