Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers:使用 Transformer 从序列到序列的角度重新思考语义分割-CVPR2021
1.概述
标准FCN具有编码器-解码器体系结构:编码器用于特征表示学习,而解码器用于编码器生成的特征表示的像素级分类。其中,特征表示学习(即编码器)可以说是最重要的模型组件。编码器由堆叠的卷积层组成。由于对计算成本的关注,特征映射的分辨率逐渐降低,因此编码器能够通过逐渐增加的感受野学习更多抽象/语义视觉概念。这种设计之所以流行,是因为它有两个优点,即翻译的等效性和局部性。前者很好地尊重了成像过程的本质,它支持了模型对不可见图像数据的泛化能力。而后者通过跨空间共享参数来控制模型的复杂性。然而,它也提出了一个基本的限制,即学习远程依赖信息(对于无约束场景图像中的语义分割至关重要),由于仍然有限的感受野而变得具有挑战性。 扩大感受野:
- 直接操作卷积运算。 这包括较大的内核大小、空洞卷积和图像/特征金字塔。
- 将注意力模块集成到FCN体系结构中。这样一个模块旨在对特征图中所有像素的全局交互进行建模。语义分割中,一种常见的设计是将注意力模块与FCN架构相结合,注意力层位于顶部。无论采用哪种方法,标准编码器FCN模型架构都保持不变。
- 有人试图完全摆脱卷积,转而部署注意力单独模型。然而,即使没有卷积,它们也不会改变FCN模型结构的性质:编码器降低输入的空间分辨率,开发有助于区分语义类的低分辨率特征映射,解码器将特征表示增加采样为全分辨率分段映射。
我们的目的是重新思考语义分割模型的设计,并提供一个替代方案。特别是,我们建议使用纯Transformers取代基于堆叠卷积层的编码器,逐渐降低空间分辨率,从而产生一种新的分段模型,称为分段Transformers(SETR)。 此Transformers编码器将输入图像视为图像patch序列,该序列是通过学习到的嵌入patch表示的,并使用全局自注意建模对序列进行变换,以进行区分性特征表示学习。具体地说:
- 首先将图像分解为一个由固定大小的patch组成的网格,形成一系列patches。
- 将线性嵌入层应用于每个patch的平坦像素向量,然后获得一系列特征嵌入向量作为Transformers的输入。
- 给定从编码器Transformers学习的特征,然后使用解码器恢复原始图像分辨率。
关键的是,在空间分辨率上没有向下采样,但在编码器转换器的每一层都有全局上下文建模,从而为语义分割问题提供了一个全新的视角。最近,纯视觉Transformers或ViT(Vision Transformers)已证明对图像分类任务有效。它提供了直接证据,表明传统的叠层卷积层(即CNN)设计可能受到挑战,图像特征不一定需要通过降低空间分辨率从局部到全局逐步学习。然而,将纯粹的Transformers从图像分类扩展到空间位置敏感的语义分割任务并非易事。我们的经验表明,SETR不仅为模型设计提供了一个新的视角,而且在许多基准上达到了新的水平。 本文的贡献如下 - 我们从序列到序列学习的角度重新制定了图像语义分割问题,提供了一种替代主要的编码器-解码器FCN模型设计。
- 作为实例,我们利用transformer框架通过对图像进行序列化来实现我们完全关注的特征表示编码器。
- 为了广泛地检查自我注意的特性介绍,我们进一步介绍了三种不同的复杂程度的解码器设计。大量实验表明,与不同的fcnn相比,我们的SETR模型可以学习到更优越的特征表示,在ADE20K(50.28%)和Pascal Context(55.83%)上取得了新进展,并在城市景观上取得了有竞争力的结果。尤其值得一提的是,我们的参赛作品在竞争激烈的ADE20K测试服务器排行榜上排名第一。
2.方法
2.1.基于FCN的语义分割
为上下文建模提供有限的接收字段是普通FCN架构的内在限制。最近,一些先进的方法表明,将FCN与注意机制相结合是学习远程上下文信息的更有效的策略。这些方法由于其特征张量的像素数的二次复杂度,将注意力学习限制在具有较小输入尺寸的较高层次上。这意味着缺乏对低层次特征张量的依赖学习,导致次优表示学习。为了克服这个限制,我们提出了一个纯粹的基于自我注意的编码器,命名为分割transformer(SETR)。
2.2. Segmentation transformers (SETR)
2.2.1.图像到序列
图1(a) 首先将图像分割成固定大小的面片,线性嵌入每个面片,添加位置嵌入,并将生成的矢量序列提供给标准的Transformer编码器。为了执行逐像素分割,我们引入了不同的解码器设计
Transformer接受1D特征嵌入序列Z∈RL×C作为输入,L为序列长度,C为隐藏通道大小。因此,图像序列化需要将输入影像x∈RH×W×3来为输入Z。 图像序列化的一种简单方法是将图像像素值展平为1D向量,大小为3HW***。对于尺寸为480(H)×480(W)×3的典型图像,结果向量的长度为691200。鉴于Transformer的二次模型复杂性*,这种高维向量不可能在空间和时间上同时处理。因此,将每个像素标记为Transformer的输入是不可能的。 鉴于设计用于语义分割的典型编码器会对2D图像(x∈RH×W×3)进行下采样至原分辨率的1/16(xf ∈RH/16×W/16×c),因此我们设定序列长度为H/16×W/16,transformer的输出序列很容易重塑为目标特征图xf 为了获取HW/256的输入序列,我们将x∈RH×W×3 分割为大小为H/16×W/16的网格,然后将该网格展平成一个序列。通过线性映射函数f:p->e∈RC将每个矢量化的patch ***p*转换为最新的C维嵌入空间,通过这样我们得到了图像x的patch embeddings。为了编码patch的空间信息,,我们对每一个位置i学习了一个特殊的embedding pi ,这个pi 将会和ei一起构成最终的输入序列E={p1 +e1,p2 +e2,……,pL +eL}。这样,即使Transformer的自注意力机制具有无序性,空间信息仍得以保留。
2.2.2.Transformers
对于给定的1D输入embedding序列E,使用纯Transformer编码器学习特征表示。这意味着每个Transformer层都有一个全局接收场,一次性解决了现有FCN编码器接收场有限的问题。Transformer编码器由多头自我注意(MSA)和多层感知器(MLP)块组成。对于每一层l。自注意力机制的输入是(query,key,value),通过输入Zl-1 ∈RL×C: query=Zl-1 wQ, key=Zl-1 wK , value=Zl-1 wV wQ wK wV ∈RC×d 示三个线性投影层的可学习参数,d表示(query,key,value)的维数。自我注意(SA)的形式如下: MSA是拥有m个独立SA操作并将所有SA的输出Concatenate得到最终输出: MSA(Zl-1)=[SA1(Zl-1),SA2(Zl-1)……SAm(Zl-1)]WO **Mo**∈Rmd×C ,d通常设置为C/m,MSA的输出随后由MLP块(结合残差跳跃连接)进行转换,作为层输出,如下所示: Zl=MSA(Zl?1)+MLP(MSA(Zl?1))∈RL×C 在MSA和MLP块之前应用BatchNorm,我们将{Z1,Z2,···,ZLe}表示为Transformer层的特征。
2.3.解码器设置
为了评估SETR编码器特征表示的有效性,我们介绍了三种不同的解码器设计来执行像素级分割。由于解码器的目标是在原始2D图像空间(H×W)中生成分割结果,因此我们需要将编码器的特征(用于解码器中)Z从2D形状(HW/256×C)重塑为标准3D特征映射(H/16×W/16×C)。三种解码器结构如下:
2.3.1. Naive upsampling (Naive):简单上采样
这个朴素的解码器首先将Transformer特征Zl投射到类别编号的维度上(例如,19用于城市景观实验)。为此,我们采用了一个简单的2层网络结构:1×1conv sync batch norm(w/ReLU)1×1 conv。然后,我们简单地将输出双线性上采样到全图像分辨率,然后是一个具有像素交叉熵损失的分类层。使用此解码器时,我们将模型表示为SETR Na?ve。
2.3.2.Progressive UPsampling (PUP):渐进式上采样
一步放大可能引入嘈杂的预测,我们使用一个渐进的上采样策略,交替CONV层和上采样操作。为了最大限度地减轻对抗效应,我们将上采样限制为2×。因此,从Zle(H/16×W/16)达到完全分辨率总共需要4次运算。图1(b)给出了该过程的更多细节。使用此解码器时,我们将模型表示为SETR-PUP
图1(b) progressive upsampling (resulting in a variant called SETRPUP) 渐进式上采样(产生一个称为SETRPUP的变量)
2.3.3.Multi-Level feature Aggregation (MLA):多级特征聚合
图1(c) multi-level feature aggregation (a variant called SETR-MLA). 多级功能聚合(一种称为SETR-MLA的变体)。
第三种设计的特点是多层次特征聚合(图1(c)),类似于特征金字塔网络。然而,我们的解码器是根本不同的,因为每个SETR层的特征表示Zl共享相同的分辨率,没有金字塔形状。具体来说,我们将特征表示{Zm}(m∈ {Le/M,2Le/M,····,MLe/M})从多层(M层)均匀分布到解码器。然后部署M个Stream,每个Stream关注特定的层,。每个Stream,我们先将编码器特征Zl 从2D形状HW/256×C重塑为3D的H/16×W/16×C。然后i使用一个3层的网络(卷积核大小为1,3,3)处理特征图,第1层和第3层的特征通道分别减半,第3层之后通过双线性运算将空间分辨率提升4倍。为了增强不同流之间的交互,我们在第一层之后通过逐元素相加(element-wise addition)引入了自上而下的聚合设计。在逐元素相加(element-wise addition)得到的特征之后应用额外的3×3conv。在第三层之后,我们通过通道连接从所有流中获得融合特征,然后双线性上采样4×到全分辨率。使用此解码器时,我们将模型表示为SETR-MLA。
|