SETR 论文笔记

Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

SETR

论文链接: https://arxiv.org/abs/2012.15840

一、 Problem Statement

传统的CNN网络在语义分割方面通常是encoder-decoder结构,通过encoder逐渐降低分辨率的大小,增大感知域来获取特征信息。而decoder用于对encoder生成的特征表示进行像素级分类。 这样的设计存在两个好处就是translation equivariance 和 locality。前者能够加强模型的泛化能力,而后者控制了模型的复杂度。但是存在一个局限性就是: 学习对无约束场景图像中的语义分割至关重要的long-range dependency信息,由于仍然有限的感受野而变得具有挑战性。

二、 Direction

提出SEgmentation TRansformer(SETR),即使用纯粹的transformer来替由代堆叠卷积层组成的encoder。 也就是encoder-decoder变成了sequence-to-sequence。

三、 Method

先来看一下整体的网络结构:

可以看出来,网络结构整体分为三个部分: Image to sequence,encoder(transformer backbone) 和 decoder。Decoder作者提供了三种选择,分别是Naive upsampling, Progressive UPsampling和Multi-Level feature Aggregation(MLA)。

提供了两种模型,区别在于transformer layers的层数,hidden layer size 和 attention head数量。

1. Image to sequence

既然需要输入到transformer,需要把输入图像 x ∈ R H × W × 3 x \in \R^{H \times W \times 3} xRH×W×3 转换到 feature embeddings Z ∈ R L × C Z \in \R^{L \times C} ZRL×C。其中 L L L是序列的长度, C C C是 hidden channel size。 通常,CNN会降采样输入图像16倍,作者遵循这个原则,设计了序列长度为 L = H 16 × W 16 = H W 256 L = \frac{H}{16} \times \frac{W}{16} = \frac{HW}{256} L=16H×16W=256HW。所以输入图像,会被平均分割成 H 16 × W 16 \frac{H}{16} \times \frac{W}{16} 16H×16W个patches。然后使用linear projection將维度变为 C C C。同时,添加一个position embeddings,最后形成了以下输入:

E = { e 1 + p 1 , e 2 + p 2 , . . . , e L + p L } E = \{e_1 + p_1, e_2+p_2,...,e_L+p_L\} E={e1+p1,e2+p2,...,eL+pL}

2. Transformer Backbone

Transformer encoder由 L e L_e Le个transformer层组成,每个都是由multi-head self-attention(MSA)和Multilayer Perceptron(MLP) blocks组成。对于第 l l l层的输入的(query, key, value),都是来自于 Z l − 1 ∈ R L × C Z^{l-1} \in \R^{L \times C} Zl1RL×C层。
query = Z l − 1 W Q , key = Z l − 1 W K , value = Z l − 1 W V \text{query} = Z^{l-1} W_Q, \quad \text{key} = Z^{l-1}W_K, \quad \text{value} = Z^{l-1}W_V query=Zl1WQ,key=Zl1WK,value=Zl1WV

其中 W Q , W K , W V ∈ R C × d W_Q, W_K, W_V \in \R^{C \times d} WQ,WK,WVRC×d都是需要学习的参数。 d d d是的(query, key, value)的维度。

self-attention计算为:
SA ( Z l − 1 ) = Z l − 1 + softmax ( Z l − 1 W Q ( Z W K ) T d ) ( Z l − 1 W V ) \text{SA}(Z^{l-1}) = Z^{l-1} + \text{softmax}(\frac{Z^{l-1}W_Q(ZW_K)^T}{\sqrt{d}})(Z^{l-1}W_V) SA(Zl1)=Zl1+softmax(d Zl1WQ(ZWK)T)(Zl1WV)

Multi-head self attention为:
MSA ( Z l − 1 ) = [ S A 1 ( Z l − 1 ) ; S A 2 ( Z l − 1 ) ; . . . ; S A m ( Z l − 1 ) ] W O \text{MSA}(Z^{l-1})=[SA_1(Z^{l-1}); SA_2(Z^{l-1});...;SA_m(Z^{l-1})]W_O MSA(Zl1)=[SA1(Zl1);SA2(Zl1);...;SAm(Zl1)]WO
其中 W O ∈ R m d × C W_O \in \R^{md \times C} WORmd×C d d d通常设置为 C / m C/m C/m

MSA的输出会传入到MLP中,

Z l = MSA ( Z l − 1 ) + MLP ( MSA ( Z l − 1 ) ) ∈ R L × C Z^{l} = \text{MSA}(Z^{l-1}) + \text{MLP}(\text{MSA}(Z^{l-1})) \in \R^{L \times C} Zl=MSA(Zl1)+MLP(MSA(Zl1))RL×C

最后,每一个transformer layers的输出特征表示如下:
{ Z 1 , Z 2 , . . . , Z L e } \{Z^1, Z^2, ... , Z^{L_e}\} {Z1,Z2,...,ZLe}

3. Decoder

对于transformer的输出特征 Z Z Z,作者使用了三种不同的decoder进行pixel-level的分割。对于一张2D图像的输入 ( H × W ) (H \times W) (H×W),我们需要reshape 特征 Z ∈ R H W 256 × C Z \in \R^{\frac{HW}{256} \times C} ZR256HW×C H 16 × W 16 × C \frac{H}{16} \times \frac{W}{16} \times C 16H×16W×C

1. Naive upsampling

最简单的decoder就是使用一个简单的网络:1x1 conv + sync batch norm(w/ ReLU) + 1x1 conv,把transformer feature Z L e Z^{L_e} ZLe 映射到为目标类别数量的维度,比如说Cityscapes的是19。 之后,简单的做bilinearly upsample到full image resolution。然后使用pixel-wise cross-entropy loss进行分类。

2. Progressive UPsampling

第一种会引入noisy prediction。那第二种decoder就是逐步的进行上采样。这里面首先会把transformer feature Z L e Z^{L_e} ZLe进行reshape,然后通过四个卷积层,最后得到维度为 H × W × 19 H \times W \times 19 H×W×19的输出。

3. Multi-Level feature Aggregation

第三种类似于FPN的结构。由于所有的feature representations Z l Z^l Zl输出的维度都一样,无法像金字塔似的形状。因此,作者取相隔 L e M \frac{L_e}{M} MLe层的输入进行融合,如上图所示。
{ Z m } ( m ∈ { L e M , 2 L e M , . . . , M L e M } ) \{Z^m\}(m \in \{\frac{L_e}{M}, 2\frac{L_e}{M},...,M\frac{L_e}{M}\}) {Zm}(m{MLe,2MLe,...,MMLe})
提出之后,把维度为 H W 256 × C \frac{HW}{256}\times C 256HW×C reshape成维度为 H 16 × W 16 × C \frac{H}{16} \times \frac{W}{16} \times C 16H×16W×C。然后分别通过1x1, 3x3, 3x3的卷积层后,进行4X 的bilinear 操作得到feature maps。为了增强信息的流通,引入了top-down aggregation。每一个element-wise addition之后,都有一个3x3的卷积。最后每一层再进行一次4X的插值,得到full image resolution后进行concatenation。

四、 Conclusion

把encoder变成了transformer backbone, 表现SOTA。但是参数量增加挺多的,表现和DeepLab-v3(ResNet-101)差不多。

Reference

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值