SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers

目录

摘要

Abstract

SegFormer

EnCoder

Decoder

实验

总结


摘要

SegFormer是一种基于Vision Transformer演变而来的语义分割模型,通过引入分层Transformer编码器、重叠Patch Merging操作和轻量级全MLP解码器,解决了ViT在语义分割任务中计算复杂度高、内存消耗大以及细节信息丢失的问题。该模型在ADE20K、Cityscapes和COCO-Stuff等多个数据集上取得了领先的性能,同时具有结构简单、计算高效和泛化能力强的优势,为基于Transformer的密集预测任务提供了新的解决方案。

Abstract

SegFormer is a semantic segmentation model evolved from the Vision Transformer (ViT). By introducing a hierarchical Transformer encoder, overlapping Patch Merging, and a lightweight all-MLP decoder, it addresses issues such as high computational complexity, significant memory consumption, and loss of detailed information in ViT for semantic segmentation tasks. The model has achieved leading performance on multiple datasets, including ADE20K, Cityscapes, and COCO-Stuff, while offering advantages such as a simple structure, computational efficiency, and strong generalization capabilities. It provides a new solution for Transformer-based dense prediction tasks.

SegFormer

论文链接:[2105.15203] SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers

代码:GitHub - NVlabs/SegFormer: Official PyTorch implementation of SegFormer 

SegFormer网络结构图如下所示:

SegFormer主要由Transformer的编码器和轻量级的MLP的解码器组成。

网络特点:

1、结合了Transformers与轻量级的MLP解码器;

2、包含一个新颖的分层结构的Transformer编码器,该编码器输出多尺度特征。它不需要位置编码, 因此避免了位置编码的插值,但在测试分辨率与训练时不同的情况下可能会导致性能下降;

3、避免使用复杂的解码器。提议的MLP解码器从不同的层中聚合信息,从而同时结合了局部注意力和全局注意力来呈现强大的表示;

4、设计非常简单和轻量级,这是在Transformers上实现高效分割的关键;

5、SegFormer系列模型从SegFormer-B0到SegFormer-B5有多个版本,与之前的模型相比,它们的性能和效率都有显著的提高。  

EnCoder

Overlap Patch Embeddings:通过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])

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
        )

Mix FNN:在 FNN 中使用了 3 x 3 的卷积和 MLP ,作者认为 position encoding 来引入局部位置信息在语义分割中是不需要的,所以引入了一个 Mix-FFN,

SegFormer是一种简单高效的语义分割模型,它使用了Transformer架构。该模型在语义分割任务中取得了很好的性能。 SegFormer的设计思路是将Transformer应用于语义分割任务,以取代传统的卷积神经网络。相比于传统的卷积神经网络,Transformer具有更强的建模能力和更好的上下文理解能力。 SegFormer的主要特点和设计思路如下: 1. 基于Transformer的编码器:SegFormer使用了Transformer作为编码器,用于提取图像特征。Transformer的自注意力机制可以捕捉全局上下文信息,有助于提高语义分割的准确性。 2. 基于深度可分离卷积的解码器:SegFormer使用了深度可分离卷积作为解码器,用于将编码器提取的特征映射恢复到原始图像尺寸。深度可分离卷积具有较少的参数量和计算量,可以提高模型的效率。 3. 多尺度特征融合:SegFormer通过多尺度特征融合来提高语义分割的性能。它使用了不同大小的感受野来捕捉不同尺度的信息,并将它们融合到最终的预测中。 4. 通道注意力机制:SegFormer引入了通道注意力机制,用于自适应地调整不同通道的重要性。这有助于提高模型对不同类别的区分能力。 SegFormer的代码实现可以在CSDN开发的"C知道"平台上找到。你可以在该平台上搜索"SegFormer Simple and Efficient Design for Semantic Segmentation with Transformers"来获取相关代码和实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值