paper:CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows
code:https://github.com/microsoft/CSWin-Transformer
摘要:
Transformer设计中一个具有挑战性的问题是,全局自注意力的计算成本非常高,而局部自注意力通常会限制每个token的交互域。为了解决这个问题,作者提出了Cross-Shaped Window的自注意机制,可以并行计算十字形窗口的竖直与水平中的自注意力,其中通过将输入特征分割成等宽的条带来得到每个条带。
其中条带的宽度必然会对视野产生影响,为此作者对条带宽度的影响进行了详细的数学分析,并根据Transformer网络的不同层改变条带宽度,从而在限制计算成本的同时实现了较强的建模能力。
此外,作者还引入了局部增强位置编码(local -enhanced Positional Encoding, LePE),它比现有的编码方案能更好地处理局部位置信息,而且其能适应不同大小输入特征,支持任意输入解决方案,因此对下游任务特别有效和友好。
结合这些设计(Cross-Shaped Window 和 LePE)和层次结构,CSWin Transformer在常见视觉任务上展示了具有竞争力的性能。实现的效果:
85.4%Top-1 accuracy on ImageNet-1K without extra data
53.9box AP and 46.4 mask AP on the COCO detection task
51.7mIOU on the ADE20K semantic segmentation task
87.5%Top1 accuracy on ImageNet-1K with pretraining on ImageNet-21K
segmentation performance on ADE20K with 55.7mIoU with pretrain(SOTA)
1. Introduction
尽管Transformer-based的架构在各方面取得了成功,但是全局注意力机制的Transformer体系结构在计算效率方面是低效的。为了提高效率,一种典型的方法是将每个token的注意区域从全局注意限制为局部/窗口(local/windowed)注意。而为了让不同的窗口进行联系,研究人员进一步提出了halo和shift操作,通过附近的窗口交换信息。但是,这样的交互信息使得感受野的扩大比较缓慢,需要堆叠大量的块来实现全局的自注意力,而足够多的全局信息对性能是比较重要的。因此,在保持较低的计算成本的同时,有效地实现大接收域是非常重要的。
为此,作者提出了Cross-Shaped Window(CSWin)自注意力,其结构如下所示,并与现有的自注意机制进行了比较:
利用CSWin自注意力机制,实现并行地在水平和垂直条带中进行自注意力计算,每个条带都是通过将输入特征分割成等宽的条带得到的。条带宽度是十字形窗口的一个重要参数,它可以在限制计算成本的同时实现较强的建模能力。具体上,作者根据网络的深度调整条带宽度:浅层的宽度较小,深层的宽度较大。较大的条带宽度可以增强长程元素之间的连接,以较小的计算成本增加获得更好的网络容量。
值得注意的是,采用CSWin self-attention机制,水平条宽和垂直条宽的自注意是并行计算的。作者将多个头部分成平行的组,并对不同组进行不同的自注意操作(水平与竖直)。这种并行策略没有引入额外的计算成本,同时扩大了每个Transformer block内计算自注意的区域。
在CSWin self-attention的基础上,采用分层设计的方法,提出了一种新的通用视觉任务的Vit架构,称为:CSWin Transformer。为了进一步增强性能,作者还引入了一种有效的位置编码,局部增强位置编码(Locally-enhanced Positional Encoding,LePE),其直接对注意力结果进行操作,而不是对注意力计算。LePE使CSWin Transformer对下游任务更加有效和友好。
2. Related Work
2.1 Efficient Self-attentions
如图1所示,现有的窗口交互的方法有shifted/haloed version(图c),添加了跨不同局部窗口的交互。还有Axial Self-Attention(图e),它将局部窗口沿水平轴或垂直轴依次应用,以实现全局关注。但是,它的顺序机制和有限的窗口大小限制了它的表示学习性能。
ps:Axial Self-Attention与Cross-Shaped Window比较相像的,但不同的是本文用了一半的head捕获横向注意力,另一半的head捕获纵向注意力,但是Axial Self-Attention的结构是先捕获横向注意力、再捕获纵向注意力,后面的操作是基于前面的操作,所以不能够并行计算,这就导致模型的计算时间会变长。
2.2 Positional Encoding
由于self-attention是置换不变的,并且忽略了token位置信息,因此位置编码在transformer中被广泛使用,以将这些位置信息添加回来。典型的位置编码机制包括绝对位置编码(APE)、相对位置编码(RPE)和条件位置编码(CPE)。
APE和RPE通常被定义为一系列频率或可学习参数的正弦函数,它们是为特定的输入尺寸而设计的,对变化的输入分辨率不友好。
CPE以该特征作为输入,可以生成任意输入分辨率的位置编码。然后将生成的位置编码添加到输入特征上(也就是与输入特征进行一个简单的相加操作),然后将其输入到self-attention block中。
LePE与CPE类似,但建议将位置编码作为一个并行模块添加到自注意操作中,并对每个Transformer block中的投影值进行操作。该设计将位置编码与自注意计算解耦,可以增强局部归纳偏差(local inductive bias)。
3. Method
3.1 Overall Architecture
CSWin Transformer的总体架构如图2所示:
CSWin Transformer Block总体上与multi-head self-attention Transformer block 具有相似的拓扑结构,但有两个区别:
1)Cross-Shaped Window取代了自注意机制
2)为了引入局部感应偏置,将LePE作为一个并联模块加入到自注意分支中
3.2 Cross-Shaped Window Self-Attention
根据MSA机制,输入特征的每个token会产生K个head,然后每个head在水平或垂直条带内进行局部自注意。
对于竖直条带自注意力进行类似的操作。
假设自然图像没有方向偏差,作者将k个head平均分成两个平行组,第一组的head表现出横条带的自注意力,第二组的head表现出竖条带的自注意力。最后,这两个并行组的输出将被连接在一起(也就是concat操作)。
通过多头分组,一个Transformer块中每个token的注意区域被扩大。
其中, CSWin self-attention的计算复杂度为:
3.3 Locally-Enhanced Positional Encoding
SA具有排列不变性(不同排列的输出结果是一样的),为了弥补SA的这个缺陷,通常会在Transformer上加入位置编码。如图3中展示了一些典型的位置编码机制:
APE/CPE(上图左)是在进行SA之前就加入了位置信息,RPE(上图中)是在计算权重矩阵的过程中加入相对位置信息。作者采用了一种更加直接的方式进行了位置信息编码:直接将位置信息加入到Value中,然后将结果加到SA的结果中。
作者为了减少计算量,只捕获了局部的注意力,所以用了一个Depth-wise Conv对value进行卷积,然后将结果加入到了SA的结果中。
由公式:
改变为:
3.4 CSWin Transformer Block
采用上诉的Cross-Shaped Window自注意力与Locally-Enhanced位置编码方式,CSWin Transformer block可以定义为:
参数设置如下:
4. Result
- 消融实验:
证实了横竖并行自注意操作与深层结构的效果
- LePE与CSWin的效果:
- ImageNet-1K分类中不同模型的比较:
- ImageNet-1K通过对ImageNet-21K数据集进行预训练得到微调结果:
可以看见,在相同参数量下,CSWin Transformer的效果要比Vit与Swin Transformer的效果要好
- 基于Mask R-CNN框架的COCO val2017目标检测和实例分割性能:
- 语义分割性能测试:
总结:
作者提出了一种新的Vision Transformer架构CSWin Transformer,其核心是CSWin Self-Attention,它通过将多个head分成两个横竖两方向上的并行组,在水平和垂直条带上实现自注意。这样的设计可以有效地扩大一个Transformer block内每个token的关注范围。此外,还引入了LePE模块,直接将位置信息加入到Value中。
ps:本质上作者在进行下采样和局部增强的位置编码时,都用的是卷积。
此外,极市平台提出了一个想法,这里将head分为了两组,那分为更多组,每个组还是关注不同的区域,那样感受野就会更大,对模型的性能是否还会有进一步的提升呢?