《SegFormer:Simple and Efficient Design for Semantic Segmentation with Transformers》论文笔记

SegFormer是基于Transformer的语义分割模型,它改进了Transformer块,无需位置编码,适用于不同尺寸的输入图像。模型结构包括新设计的MiT-Bx系列编码器和简单的全连接解码器,实现高效轻量化。实验表明,SegFormer在分割性能和参数量上优于其他方法。
摘要由CSDN通过智能技术生成

参考代码:SegFormer

1.概述

介绍:这篇文章提出的分割方法是基于transformer结构构建的,不过这里使用到的transformer是针对分割任务在patch merge、self-attention和FFN进行了改进,使其更加适合分割任务(无需position-encoding,测试图片的尺寸带来的影响更小)对上下文语义信息和局部细节信息的需求并且更加整体模型轻量化,同时得益于transformer强大的上下文感知能力使得对于解码器只使用简单的几层全连接便可达到更好的分割性能。通观全文最大的亮点在分割网络编码器的设计上,若是将对应的解码器再进行进一步调试分割的效果将更好,不过使用如ASPP这样的感受野增强模块效果就不是那么大了。

将文章的方法于其它的一些分割方法进行比较,如下图。文章方法的分割性能更好且参数量更少。
在这里插入图片描述

2. 方法设计

2.1 pipeline

文章方法整体上还是一个编解码网络结构,使用新设计的编码器MiT-Bx系列和多层全连接组成,其结构见下图所示:
在这里插入图片描述
在上图中最重要的部分便是其中的transformer编码器了,不过这里针对分割任务设定了如下要求:

  • 1)能输出多尺度的编码器特征,使得分割网络可以有效使用上下文语义信息和物体细节信息。对应在Swin Transformer中是通过类似于pixle-shuffle反向操作的形式实现多尺度输出的(可以参考这篇文章的解读:图解Swin Transformer);
  • 2)网络设计需要轻量化,本身分割任务就是一种稠密预测任务,轻量化是在实际部署过程中无法回避的问题;
  • 3)原本的ViT中存在position-encoding这个在固定输入尺寸的情况下问题不大,但是对于分割这种对于分辨率影响比较大的任务,训练size和infer size不一样会导致position encoding存在问题,因而需要对position-encoding这块进行改进;

2.2 Transformer Block

该模块是文章编码器的基础组成模块,其中包含了:高效self-attention、Mix-FFN和Patch Merge模块,其结构见下图所示:
在这里插入图片描述
PS: 这里结构的顺序和文章代码中提供的顺序不太一致,代码中是patch merge在最前面。

patch merge:
在原本的ViT中是单独对每个patch独立进行处理,但是对于分割这类任务来说每个patch单独进行处理且之间无关联是不符合实际情况的,因而需要建立起不同patch之间的联系。在Swin Transformer中是通过Shifted Window Attention来实现不同window上信息的交互的,而在这篇文章中是通过卷积的形式,也就是将每个patch看作是一个卷积窗口,并以这个窗口在输入数据上进行滑动。同时还通过控制其中的stride参数控制输出特征图的大小,从而实现多尺度特征图的输出(卷积带padding)

class OverlapPatchEmbed(nn.Module):
    """ Image to Patch Embedding
    """
    def __init__(self, img_size=224, patch_size&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值