Day 12: Twin Transformer by 美团

这是美团和澳大利亚阿德莱德大学联合发表的新文章,也是和 Transformer 相关的,以下是一些要点。

  • Swin Transformer 的 Shifted Windows 虽然有效,但是由于尺寸不同,因此在用现有的深度学习模型来实现的时候会有一定的困难,因为大部分框架都希望输入的尺寸是相同的。
  • 另一种方案是 PVT 中提出来的。在普通的自注意力模块中,每个 query 都需要和所有的输入 token 计算注意力,但 PVT 中,每个 query 只需要和一些取样出来的输入 token 计算注意力。虽然理论上它的计算复杂度仍然是二次方的,但已经是在实际中可以接受的了。
  • 上面提到的视觉 Transformer 的核心是如何设计空间注意力(spatial attention),作者发现在 PVT 中提出的全局采样注意力(global sub-sampled attention)非常有效,而且当与位置编码一起使用的时候,它的效果可以与SOTA的视觉 Transformer 的表现持平,甚至更高。
  • 根据这些,作者提出了第一个模型架构:Twin-PCPVT。他们提出了一个仔细设计且简单有效的空间注意力机制,用来替换 PVT 中低效的全局采样注意力。这种注意力机制的灵感来源于可分离深度卷积(separable depthwise convolutions),因此作者将它命名为:空间可分离自注意力(spatially separable self-attention SSSA)
  • SSSA 由两种注意力操作组成,一种是局部分组自注意力(locally-grouped self-attention LSA),另一种是全局下采样注意力(global sub-sampled attention GSA)。其中 LSA 捕捉比较精细的短距离的信息,而 GSA 捕捉长距离和全局的信息。
  • 两种注意力操作都有效且实现起来很简单,这又带来了第二种结构:Twin-SVT

Related Work

这一章节的前两部分没有太多可讲,因为灵感主要是来源于后面两个部分,分组卷积和可分离卷积,以及位置编码。

分组卷积及可分离卷积

分组卷积最早在 AlexNet 中提出,二者在加速网络训练上都非常有效。深度卷积(depthwise convolution)则是分组卷积的一个极端例子,也即所分的组数与通道数相等,再后接一个通道卷积(point-wise convolution),将不同通道之间的信息聚合起来。

位置编码

本文用的位置编码是 PVT 中提出的条件位置编码(conditional positional emcodings),是根据输入进行动态调整的一种编码,它的表现要比绝对位置编码和相对位置编码好。

方法细节

作者提出两种简单且强大的视觉 Transformer 上的空间设计。第一种是基于 PVT 和 CPVT 的,只使用了全局注意力,因此称之为 Twins-PCPVT。第二种是基于上面提出的 SSSA ,交替使用局部注意力和全局注意力,称之为 Twin-SVT。

Twins-PCPVT

在这里插入图片描述

PVT 引入了金字塔型多层级设计,来更好地处理密集预测任务,比如目标检测和语义分割。它采用了 ViT 和 DeiT 里的绝对位置编码,而且所有层都使用了全局注意力机制,并依靠空间上的压缩来减少处理整个序列时的计算量。对于 Swin Transformer 的表现强于 PVT,作者是很惊讶的。

后来作者发现,PVT 的表现不佳仅仅是因为绝对位置编码的问题,因为它会使模型在处理不同尺寸的输入时遇到些麻烦。同时,这种编码方式也打破了平移不变性。然而 Swin 使用的是相对位置编码,因此规避了这个问题。

我们用在 CPVT 中提出的条件位置编码来替换掉原始的绝对位置编码。条件位置编码(CPE)是基于输入的,能天然地规避掉绝对位置编码遇到的问题。用来产生条件位置编码的位置编码生成器(position encoding generator),接在每个 stage 的第一个编码模块后面。作者使用最简单的位置编码生成器(比如没有 batch norm 的二维通道卷积)。对于图片分类任务,在 CPVT 后,全都移除了类 token,并在 stage 的最后使用全局池化。

作者也尝试过在 Swin 中使用条件位置编码来取代相对位置编码,但实验结果并不理想。

在这里插入图片描述

Twins-SVT

视觉 Transformer 在密集预测任务中,一直受到计算量太大这个问题的严重影响,当输入为 H × W H \times W H×W时,维度为 d d d的自注意力的计算复杂度为 O ^ ( H 2 W 2 d ) \hat{\mathcal{O}}\left(H^{2} W^{2} d\right) O^(H2W2d)。在此,我们提出一个空间可分离的自注意力,来减轻这个问题。SSSA 是由局部分组自注意力(LSA)和全局下采样注意力(GSA)组成。

局部分组自注意力(LSA)

受到可分离卷积的启发,我们首先将二维的特征图平均地分成几个窗口,让自注意力只发生在每个窗口内。具体点说,一个特征图被分成了 m × n m \times n m×n 个窗口。为了更好地范化,我们假设 H % m = 0  and  W % n = 0 H \% m=0 \text { and } W \% n=0 H%m=0 and W%n=0,每个组有 H W m n \frac{H W}{m n} mnHW 个元素,计算量为 O ( H 2 W 2 m 2 n 2 d ) \mathcal{O}\left(\frac{H^{2} W^{2}}{m^{2} n^{2}} d\right) O(m2n2H2W2d) ,总计算量则为: O ( H 2 W 2 m n d ) \mathcal{O}\left(\frac{H^{2} W^{2}}{m n} d\right) O(mnH2W2d) 。若设 k 1 , k 2 k_1, k_2 k1,k2分别为 k 1 = H m , k 2 = W n k_{1}=\frac{H}{m}, k_{2}=\frac{W}{n} k1=mH,k2=nW,则计算量可以表示为 O ( k 1 k 2 H W d ) \mathcal{O}\left(k_{1} k_{2} H W d\right) O(k1k2HWd),可以看出当 k 1 ≪ H  and  k 2 ≪ W k_{1} \ll H \text { and } k_{2} \ll W k1H and k2W 时,模型会更有效率,且当 k 1 和 k 2 k_1 和k_2 k1k2 为固定值时,与 H W HW HW呈线性增长。
在这里插入图片描述
尽管上面的设计在计算时比较友好,但可以发现不同的 window 之间缺乏信息交流。在 Swin 中是提出了一个滑动窗口的设计,作者则提出下面 GSA 的设计。

局部下采样注意力(GSA)

作者没有采用简单粗暴地加上全局注意力层的方式,因为会带来计算量上的问题。

作者用一个代表值来总结每个 window 中的重要信息,并用这个代表值来与其它 window 进行信息交流(作用就像自注意力中的 key),将计算量极大地减少为 O ( m n H W d ) = O ( H 2 W 2 d k 1 k 2 ) \mathcal{O}(m n H W d)=\mathcal{O}\left(\frac{H^{2} W^{2} d}{k_{1} k_{2}}\right) O(mnHWd)=O(k1k2H2W2d)。这其实等价于在注意力操作中,将下采样得到的特征图当作 key。

对于下采样过程,我们尝试了很多种方法,最后的实验发现还是普通的步幅卷积效果最好。因此,这个可分享的 Transformer 模块可以写成如下形式:

z ^ i j l =  LSA  (  LayerNorm  ( z i j l − 1 ) ) + z i j l − 1 z i j l =  FFN  (  LayerNorm  ( z ^ i j l ) ) + z ^ i j l z ^ l + 1 =  GSA  (  LayerNorm  ( z l ) ) + z l z l + 1 =  FFN  (  LayerNorm  ( z ^ l + 1 ) ) + z ^ l + 1 , i ∈ { 1 , 2 , … . , m } , j ∈ { 1 , 2 , … , n } \begin{array}{l}\hat{\mathbf{z}}_{i j}^{l}=\text { LSA }\left(\text { LayerNorm }\left(\mathbf{z}_{i j}^{l-1}\right)\right)+\mathbf{z}_{i j}^{l-1} \\\mathbf{z}_{i j}^{l}=\text { FFN }\left(\text { LayerNorm }\left(\hat{\mathbf{z}}_{i j}^{l}\right)\right)+\hat{\mathbf{z}}_{i j}^{l} \\\hat{\mathbf{z}}^{l+1}=\text { GSA }\left(\text { LayerNorm }\left(\mathbf{z}^{l}\right)\right)+\mathbf{z}^{l} \\\mathbf{z}^{l+1}=\text { FFN }\left(\text { LayerNorm }\left(\hat{\mathbf{z}}^{l+1}\right)\right)+\hat{\mathbf{z}}^{l+1}, \\i \in\{1,2, \ldots ., m\}, j \in\{1,2, \ldots, n\}\end{array} z^ijl= LSA ( LayerNorm (zijl1))+zijl1zijl= FFN ( LayerNorm (z^ijl))+z^ijlz^l+1= GSA ( LayerNorm (zl))+zlzl+1= FFN ( LayerNorm (z^l+1))+z^l+1,i{1,2,.,m},j{1,2,,n}

此外,我们用 CPVT 中提出的位置编码生成器来编码位置信息,且在程序进行中处理输入不同长度的输入(而不是提前处理好)。这个结构被插在每个 stage 的第一个模块后面。

在这里插入图片描述

在这里插入图片描述

与 Swin 的比较

Swin 使用了滑动窗口来让不同的窗口之间进行信息交流,但是这种方法比较复杂,而且没有办法根据不同的设备来进行优化。我们的方法更简单而且更友好,因为它是建立在目前常用的操作上的。此外,我们的局部-全局设计能够更好的利用全局的信息,这也是在视觉任务中非常重要的。

最后可能有人注意到,我们的两个网络结构有着细微的区别,比如深度隐藏层维度、头的个数、扩张系数等等。这是因为我们希望与那两个目前比较有名的模型之间,有一个公平的比较。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值