【深度学习】语义分割-论文阅读:( CVPR 2021)SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspe
这里写目录标题
-
0.详情
-
1. 摘要
-
2. 引言
-
- 2.1 原来的模型:FCN
- 2.2 使用transformers
- 2.3 主要贡献
-
相关工作-语义分割模型的发展历程
-
- 研究起源于早期对FCN架构的优化探索阶段
- 近年来研究者逐渐转向利用Transformer架构进行模型改进
-
4. 方法
-
- 4.1 基于FCN的语义分割
- 4.2 SETR
- 4.3 解码器设计
-
5 总结
-
6.实验-复现
-
0.详情
该论文提出了一种基于ViT的新架构,并从序列到序列的角度重新审视了传统语义分割方法。该研究工作发表于2021年3月,并由复旦大学与腾讯优图联合提出
FCN编码器通过CNN技术提取特征,在具体实现中是以提升特征图深度的同时伴随一定分辨率下降的方式来完成这一过程。而SETR则采用transformer架构,在模型设计上实现了在不提升也不降低整体视觉感受能力的前提下完成信息捕捉。
本文阐述了基于Vision Transformer(ViT)实现首个具有重要地位的语义分割模型——Segmentation Transformer (SETR)。该研究通过创新性地采用纯Transformer架构构建编码器替代传统的CNN编码器,并在此基础上革新现有语义分割框架
1. 摘要
语义分割以往做法:采用带有Encoder-Decoder结构构建FCN模型的方式进行设计。Encoder逐步降低了图像的空间分辨率,并通过不断扩大的感受野来逐步学习出更加抽象的语义特征
近期做法:
鉴于上下文建模技术在语义分割任务中扮演着至关重要的角色,
近年来的研究主要致力于通过引入空洞卷积层或注意力机制来拓展模型的感受野范围。
然而,在现有研究中,
这些方法仍主要受限于以Encoder-Decoder架构为基础的全卷积网络(FCNs)框架
本文旨在通过将语义分割建模为sequence-to-sequence预测任务来提供一种替代方案。具体而言,我们采用了纯粹的transformer架构(无需卷积或下采样)来对图像进行分块编码。基于transformer中各层捕捉的全局上下文信息,在此架构下,编码器与解码器得以有效结合。
2. 引言
2.1 原来的模型:FCN
基于Encoder-Decoder架构设计的标准FCN语义分割模型具有显著特征。其中,在编码器部分通过多层卷积操作构建,并其主要功能是提取图像中的高级抽象特征。值得注意的是,在编码器的设计中,通常会通过逐步降低输出特征图的空间分辨率(大小)来扩展感受野范围。解码器的作用则是将编码器捕获到的高级抽象特征重新采样至与原始输入图像具有相同的空间分辨率,并在此基础上完成像素级别的分类任务。
感受野的大小决定了特征是否能足够捕获更大范围的周边信息甚至是全局信息,但对于语义分割,损失分辨率意味着空间损失大,分割效果可能会变差
2.上下文(context)信息是提升语义分割性能最关键的因素,而感受野(respect-field)则大致决定了网络能够利用到多少的信息。
由于网络中的有效感受野是有限的,这将会严重制约模型的表示能力。
优点:
通过平移等价性调整网络结构以提升其泛化能力;然而,在减少计算复杂度的同时也能保持较好的性能。
缺点:
尽管卷积神经网络在捕捉局部特征方面表现出色;但它们难以学习跨越较远距离的依赖关系
解决:
- 通过调整卷积操作实现:大型卷积核、空隙卷积以及图像或特征金字塔等技术;
- 引入注意力机制来建模feature map中的每个像素的全局上下文关系。
以上两种方法仍遵循Encoder-Decoder框架下的FCN架构。
- 引入注意力机制来建模feature map中的每个像素的全局上下文关系。
其一个显著特点是不仅能够维持输入与输出的空间分辨率一致的同时还能够有效地捕捉到全局上下文信息。因此,在这一过程作者采用了类似于ViT架构的结构来进行特征提取并通过解码器模块来恢复空间分辨率
2.2 使用transformers
采用基于transformers架构的编码器模块(Encoder)来实现特征提取功能
2.3 主要贡献
(1)对语义分割任务进行了重新定义,并将其视为一种序列到序列的问题;值得注意的是,在FCN模型的基础上以外部架构提供了解决方案之外,还提供了另一种方案;
(2)完全依赖于纯transformers架构来进行图像序列特征提取;
(3)开发了三类解码器以系统性的方式探讨自注意力机制;
3. 相关工作-语义分割模型发展
3.1 以前基于FCN的改进
FCN删除了分类模型的全连接层,并增加了decoder ,从而开启了深度学习的语义分割时代。
而FCN由于其预测精度较低,在此基础上开发出基于CRF/MRF的后续优化手段以进一步提升结果的质量。
为了解决语义与空间之间的内在矛盾,在Encoder和Decoder中的深层与浅层被整合地融合,并由此衍生出了多种不同的融合模式。
近期研究:都集中在解决有限感受野和上下文信息建模 的问题上。
通过扩大感受野范围: DeepLab与Dilation均采用了空洞卷积技术;而PSPNet与DeepLabv2则专注于提升图像理解能力。其中,PSPNet通过PPM模块实现了多尺度特征提取,而DeepLabv2则采用了具有多级膨胀率设计的独特结构——ASPP。
此外,在GCN中将大尺寸卷积核分解为多个较小的卷积核以扩大感受野;PSANet通过设计逐像素的空间注意力模块实现了对长距离上下文的实时捕捉;DANet特别关注空间与通道注意力的融合;CCNet则特别关注全局注意力与计算负担之间的平衡;DGMN在场景建模中构建了一个高效的动力学图消息传递网络。
需要注意的是
需要注意的是
本文所提出的SETR只这些方法则完全不同,给出了一种新的解决思路。
3.2 基于transformer的改进
transformer和自注意模型已经彻底改变了机器翻译和自然语言处理。近年来,对transformer结构在图像识别中的应用也进行了一些探索。
Non-local network将transformer的attention附加到卷积主干上。
AANet混合了卷积和self-ateention用于主干的训练。
LRNet和stand- alone networks探索局部自注意,以避免全局自注意带来的繁重计算。
SAN探索了两种self-attention模块。Axial-Attention 将全局空间注意分解为两个单独的axial attentions ,从而大大减少了计算量。
cnn -transformer混合模型。
DETR和以下变形版本利用transformer进行目标检测,transformer被附加在检测头内。
STTR和LSTR分别采用transformer进行视差估计和车道形状预测。
ViT是第一个证明纯transformer图像分类 模型可以达到最先进水平的工作。它为在语义分割模型中开发基于纯transformer的编码器设计提供了直接的启发。
Axial-Attention采用了注意力机制进行图像分割。然而他们的模型沿用经典的FCN架构即基于特征图的空间分辨率逐步减少的编码方案而SETR则持续维持一致的空间分辨率。
4. 方法
4.1 基于FCN的语义分割
该编码器主要由多个卷积层依次堆叠构成,在模型训练初期阶段仅需一层编码器即可实现对图像信息的有效提取;随后各编码器层次均采用h×w×d的空间维度作为输入特征图,在逐步加深网络深度的同时也能够有效提升特征表达能力
在深层中每个张量的位置是由前面各层逐步推导而来也即感受野。
近期研究中的一些SOTA(State-of-the-Art)方法也证实了将FCNs与注意力机制相结合是一种更为有效的策略
4.2 SETR
整个的SETR结构:输入→转换→输出

Image to sequence 图像序列化方法
首先,在处理原始输入图像之前需要将其转换为Transformer模型能够支持的形式。作者借鉴了ViT方法论中的做法,在具体实现中将输入图像按照16×16像素的切片分割成多个二维图像块(patch),每个切片被视为一个一维序列输入到网络中。通常情况下,Transformer模型接收的输入是一个一维特征嵌入序列Z∈R{L×C}(即长度L与通道数C组成的矩阵),其中L代表序列长度而C代表隐藏层通道数量。因此,在图像序列场景下也需要将输入x∈R{H×W×3}转换为相应的特征嵌入序列Z。
文章采用基于16×16像素切片的方法,在256×256像素大小的图像中可分割出256个块状区域。为了对每个切片的空间位置信息进行编码,在每个局部位置处学习一个特定的空间位置嵌入,并将其通过线性投影函数映射到最终的一维特征嵌入序列中。尽管Transformer模型本身是无序的结构特性之一仍然无法避免地丢失了一定的空间位置信息但在这种设计下仍然能够保留相对应的位置关系因为对原始的位置信息进行了有效的关联处理
2 Transformer 将序列输入至Transformer架构能够提取特征 其主要组成部分包括 Multi-head Self-Attention (MSA) 和 Multilayer Perceptron (MLP) 块
文章探讨了三种解码器结构设计。在经由TensorFlow提取后的特征中,其输入与输出的空间维度保持一致。为了实现最终的像素级分割目标,则需将这些特征调整为与原始图像分辨率一致的形状。
将Transformer输出的特征降维至分类类别数量后通过双线性插样恢复到原始分辨率, 即由两层: 1×1 conv + sync batch norm (w/ ReLU) + 1×1 conv
Progressive upsampling (PUP) 是一种有效的图像重建方法。为了将输入特征图从 H/16×W/16×1024 上采样至 H×W×19(其中 19 是 Cityscapes 的类别数量)需要执行四次操作。通过交替应用卷积层与双倍上采样模块逐步恢复至原始分辨率。
Multi-Level feature Aggregation (MLA)


4.3 解码器设计

5 总结
总体而言,SETR的几个重要贡献如下:
主要以将分割任务视为一种序列到序列的预测问题为基础,在提出一种新的语义分割模型设计方法上与现有基于FCN的方法形成对比
基于所设计的三种不同复杂度级别的解码器构建了一个强大的分割模型,并无需借鉴当前一些模型中那些复杂的操作
通过一系列的实验进一步证实了该模型在多个数据集上的卓越表现。具体而言,在ADE20K数据集上实现了比现有记录更高的性能(ADE20K (50.28% mIoU)),并在Pascal Context数据集上同样表现出色(55.83% mIoU)。此外,在Cityscapes数据集上展现出了很强的竞争力,并最终在该排行榜中位居榜首(ADE20K测试服务器排行榜)。
尽管SETR存在明显缺陷,在某些应用中表现尚可。与ViT类似,在获得较好的效果时,SETR在预训练阶段以及数据集规模上都面临着较大的挑战
6.实验-复现
该段文字描述了Segmentation Transformer源码的相关信息,并指出其基于MMSegmentation框架的特点及不足之处。具体来说:
官方发布的Segmentation Transformer(SETR)采用Pytorch版本,并用于训练CityScapes数据集。
由于该源码难以直接阅读与学习,
建议打算使用官方版本的朋友无需参考此博客。
2.简洁-大佬复现-非mm
笔记:
大佬复现的原始笔记
对边缘检测任务进行了深度研究与实践。
给定的代码能够有效地实现输入与输出图像尺寸的一致性特征。**这相当于SETR架构中的完整块代码已预先配置完毕,请根据需求进行适当的参数配置即可直接运行使用。**建议将Dense Extreme Inception网络中的模型模块全部替换成上述SETR架构模型,并保持其余组件不变的状态进行训练设置。
from SETR.transformer_seg import SETRModel
import torch
if __name__ == "__main__":
net = SETRModel(patch_size=(32, 32),
in_channels=3,
out_channels=1,
hidden_size=1024,
num_hidden_layers=8,
num_attention_heads=16,
decode_features=[512, 256, 128, 64])
t1 = torch.rand(1, 3, 256, 256)
print("input: " + str(t1.shape))
# print(net)
print("output: " + str(net(t1).shape))
接下来是对模型部分的说明:仅需将原有模型替换为SETR架构即可。无需对其他部分进行调整。因本系统未配置任何预训练参数,因此无需导入额外参数,从零开始进行模型训练即可完成任务流程。
原始的代码
# Instantiate model and move it to the computing device
model = DexiNedVit().to(device)
修改之后的
model = SETRModel(patch_size=(32, 32),
in_channels=3,
out_channels=1,
hidden_size=1024,
sample_rate=5,
num_hidden_layers=1,
num_attention_heads=16,
decode_features=[512, 256, 128, 64, 32]).to(device)
