【深度学习】论文阅读:(ICCV-2021))Segmenter:Transformer for Semantic Segmentation

【深度学习】论文阅读:(ICCV-2021))Segmenter:Transformer for Semantic Segmentation,第1张

这里写目录标题
  • 0.详情
  • 1.创新点
  • 2.Abstract
  • 3.Mothod
    • 3.1 Encoder
    • 3.2 Decoder
  • 4.Conclusion

0.详情

名称:Segmenter:Transformer for Semantic Segmentation
时间:[Submitted on 12 May 2021 (v1), last revised 2 Sep 2021 (this version, v3)]
单位:Robin A. M. Strudel
论文:论文
代码:paperwithcode的代码
笔记参考:

  1. 详细版
  2. 简洁版
1.创新点

1)提出了一种基于 Vision Transformer 的语义分割的新颖方法,该方法不使用卷积,通过设计捕获上下文信息并优于基于 FCN 的方法;

2)提出了一系列具有不同分辨率级别的模型,允许在精度和运行时间之间进行权衡,从最先进的性能到模型具有快速推理和良好性能的模型;

3)提出了一种基于 Transformer 的解码器生成类掩码,其性能优于我们的线性结构,并且可以扩展以执行更一般的图像分割任务;

4)证明了此方法在 ADE20K 和 Pascal Context 数据集上产生了最先进的结果,并且在Cityscapes 上具有竞争力。

2.Abstract

在进行图像语义分割时,图像被编码成一系列补丁后往往很模糊,需要借助上下文信息才能被正确分割。
因此上下文建模对图像语义分割的性能至关重要!
本文提出了一种只使用Transformer的语义分割方法,可以很好地捕捉图像全局上下文信息!
与基于卷积的方法相比,我们的方法允许在第一层和整个网络中对全局上下文进行建模。我们以最近的视觉转换器(ViT)为基础,将其扩展到语义分割。为此,我们依赖于与图像块对应的输出嵌入,并使用逐点线性解码器或掩码 Transformer 解码器从这些嵌入中获取类标签。

我们利用预先训练的图像分类模型,并表明我们可以在中等大小的数据集上对其进行微调,以进行语义分割。线性解码器已经可以获得很好的结果,但是通过生成类掩码的掩码转换器可以进一步提高性能。我们进行了广泛的消融研究,以显示不同参数的影响,尤其是对于大型模型和小面积贴片,性能更好。Segmenter在语义分割方面取得了很好的效果。它在 Ade20K 和 Pascal 上下文数据集上都优于最先进的技术,在城市景观数据集上具有竞争力。

3.Mothod

Segmenter完全基于transformer的编解码器体系结构,利用了模型每一层的全局图像上下文。

  1. 基于ViT,将图像分割成块(patches),并将它们映射为一个线性嵌入序列;
  2. 用编码器进行编码;
  3. 再由Mask Transformer将编码器和类嵌入的输出进行解码,上采样后应用Argmax给每个像素一一分好类,输出最终的像素分割图。


使用纯transformer体系结构并利用patch级别的embedding,提出了一种在decoder阶段联合处理patch和class embedding的简单方法。

指先添加patch embedding 跑一次transformer,再添加class embedding 跑一次transformer;
从后面的实验中看到,作者还实验了ViT或DeiT作为backbone时的性能表现,发现 class embedding的方式是有增益的。

3.1 Encoder

一幅图像 x ∈ R(H×W×C)被分割成一系列补丁 x = [x1, …, xN] ∈ R(N×P2×C),其中 (P, P) 是补丁大小,N 是补丁的数量,C 是通道的数量

每一块补丁扁平化成一维向量,然后线性投影到补丁嵌入以产生补丁嵌入序列 x0 = [Ex1, …, ExN] ∈ R(N×D),
为了捕获位置信息,将可学习的位置嵌入 pos = [pos1, …, posN] ∈ R(N×D)添加到补丁序列中,以获得令牌的结果输入序列 z0 = x0 + pos

由 L 层组成的 Transformer 编码器将具有位置编码的嵌入式补丁的输入序列 z0 = [z0,1, …, z0,N] 映射到 zL = [zL,1, …, zL,N],这是一个上下文化编码序列,包含解码器使用的丰富语义信息

3.2 Decoder

将补丁编码序列 zL 解码为分割图 s ∈ R(h × w × k),其中 k 是类的数量。
解码器学习将来自编码器的补丁级编码映射到补丁级类分数,然后通过双线性插值将这些patch级的类分数上采样到像素级的分数。
我们在下面描述一个线性解码器,它作为一个基线,我们的方法,一个掩码转换器,

Linear
将逐点线性层应用于补丁编码 zL,以产生补丁级类标记 Z-lin ∈ R(n × k)。然后将序列重塑为 2D 特征图 S-lin ∈ R(H/p × w/p × k),并对其进行双上采样,以达到原始图像大小 s。然后在维度上应用 softmax 以获得最终的分割图

Mask Transformer
对于基于 Transformer 的解码器,我们引入了一组 K 个可学习的类嵌入cls = [cls1,…,clsK] ∈ R(k × d),其中 K 是类的数量。每个类嵌入都是随机初始化的,并分配给单个语义类。它将用于生成类掩码。类嵌入 cls 由解码器与补丁编码 zL 联合处理。
解码器是由M层组成的变压器编码器。mask transformer 通过计算解码器输出的l2归一化的patch embedding z0M∈RN×D和class embedding c∈RK×D的标量积来生成K个掩码。

然后将每个掩码序列重构为2D掩码,形成smask∈RH/P ×W/P ×K,并对其进行双线性上采样到原始图像大小,得到特征图s∈RH×W ×K。然后将softmax应用于类维,然后是层范数,以获得像素级类分数,形成最终的分割图。

4.Conclusion

本文介绍了一种纯transformer的语义分割方法。
编码部分基于Vision Transformer(ViT)建立,但是不同之处在于我们是依赖于所有图像块的编码。
观察到transformer很好地捕捉到了全局上下文。将一种简单的逐点线性decoder应用于patch embedding,已经取得了很好的效果。
使用mask transformer进行解码则更进一步提高了性能。端到端编解码器是迈向统一的语义分割、实例分割和全景分割的第一步。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存