SegFormer网络结构的学习和重构

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 

### SegFormer 网络架构详解 #### 1. 概述 SegFormer 是一种轻量化设计的语义分割模型,其核心在于 **Hierarchical Transformer Encoder** **All-MLP Decoder** 的组合[^2]。相比于传统的 CNN 或其他基于 Transformer 的方法,SegFormer 更加高效,在减少计算复杂度的同时保持了较高的性能。 --- #### 2. 整体结构 SegFormer 的整体结构由两部分组成: - **Encoder**: 使用 Hierarchical Transformer 来提取多尺度特征。 - **Decoder**: 轻量化的全 MLP 解码器用于融合不同层次的特征并生成最终的分割预测。 这种设计使得 SegFormer 不仅能够捕捉全局上下文信息,还能有效处理局部细节。 --- #### 3. Hierarchical Transformer Encoder SegFormer 的编码器是一个分层的 Transformer 结构,主要特点如下: ##### (1) Overlapped Patch Merging 为了获取多层次的特征表示,SegFormer 提出了 **Overlapped Patch Merging 技术**。该技术通过滑动窗口的方式将输入图像划分为重叠的小块,并将其映射到低分辨率的空间中[^4]。这种方式不仅减少了计算开销,还保留了更多的局部纹理信息。 ##### (2) Efficient Self-Attention Mechanism SegFormer 中使用的自注意力机制经过优化,避免了传统 Transformer 在高分辨率输入下的高昂计算成本。具体来说,它通过对每层的不同 patch size 进行调整,从而降低内存占用运行时间。 以下是 MiT-B0 架构的一个简单实现示例[^3]: ```python import torch.nn as nn class MixFeedForward(nn.Module): def __init__(self, dim, hidden_dim, dropout=0.): super().__init__() self.net = nn.Sequential( nn.Conv2d(dim, hidden_dim, kernel_size=1), nn.GELU(), nn.Dropout(dropout), nn.Conv2d(hidden_dim, dim, kernel_size=1), nn.Dropout(dropout) ) def forward(self, x): return self.net(x) class SegFormerBlock(nn.Module): def __init__(self, dim, depth, reduction_ratio, mlp_hidden_dim, drop_rate=0.): super().__init__() layers = [] for _ in range(depth): layers.append(MixFeedForward(dim, mlp_hidden_dim)) self.layers = nn.Sequential(*layers) def forward(self, x): return self.layers(x) ``` --- #### 4. Lightweight All-MLP Decoder 解码器的设计非常简洁,完全依赖于多层感知机(MLP)。它的作用是对来自编码器的不同尺度特征进行线性变换上采样操作,最后输出像素级的类别预测。 由于不需要复杂的卷积或反卷积操作,这一模块显著降低了整个网络的参数数量推理延迟。 --- #### 5. 性能优势 相较于 SETR 等早期的 Transformer 基础分割模型,SegFormer 展现了以下几个方面的改进: - 参数效率更高; - 推理速度更快; - 对硬件资源的需求更低; 这些特性使其非常适合部署在边缘设备或其他资源受限环境中。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值