1简介
受Transformer在自然语言处理(NLP)的广泛任务上取得成功的启发,Vision Transformer(ViT)首次采用纯Transformer架构进行图像分类,这显示了Transformer架构在视觉任务方面的良好性能。
图1(a)
然而,全局自注意力的二次复杂度导致了昂贵的计算成本和内存占用,特别是在高分辨率场景下,使其无法用于下游各种视觉任务。
一种典型的提高效率的方法是用局部自注意力取代全局自注意力。如何增强局部环境下的建模能力是一个关键而又具有挑战性的问题。
图1(b)
例如,Swin Transformer和Shuffle Transformer分别提出了Shift Window和Shuffle Window(图1(b)),并交替使用两种不同的Window分区(即Regular Window和Proposed Window)在连续块中构建Cross Window连接。
图1(c)
MSG Transformer操纵Messenger Token以实现Cross Window交换信息。Axial Self-Attention将局部注意力区域视为特征图的单行或单列(图1(c))。
图1(d)
CSWin提出了Cross-Shaped Window Attention(图1(d)),可以看作是Axial Self-Attention的多行、多列展开。虽然这些方法的性能很好,甚至优于CNN的同类方法,但每个自注意力层的依赖关系不够丰富,不足以捕捉足够的上下文信息。
图1(e)
在这项工作中提出了一种Pale-Shaped self-Attention(PS-Attention)来有效地捕获更丰富的上下文依赖。具体来说:
- 首先将输入特征图在空间上分割成多个Pale-Shaped的区域。每个Pale-Shaped区域(缩写为Pale)由特征图中相同数量的交错行和列组成。相邻行或列之间的间隔对于所有的Pale是相等的。例如,图1(e)中的粉色阴影表示其中一种淡色。
- 然后,在每个Pale区域内进行Self-Attention计算。对于任何Token,它都可以直接与同一Pale中的其他Token交互,这使得本文的方法能够在单个PS-Attention层中捕获更丰富的上下文信息。
为了进一步提高效率,作者开发了一个更高效的PS-Attention并行实现。得益于更大的感受野和更强的上下文建模能力,PS-Attention显示出了图1中所示的现有局部自注意力机制的优越性。
本文基于提出的PS-Attention设计了一个具有层次结构的通用Vision T燃烧former Backbone,命名为Pale Transformer。作者将本文的方法扩展到一系列模型,包括Pale-T(22M)、Pale-S(48M)和Pale-B(85M),达到了比以前方法更好的性能。
Pale-T在ImageNet-1k上的Top-1分类准确率为83.4%,在ADE20K上的单尺度mIoU(语义分割)准确率为50.4%,在COCO上的box mAP(目标检测)准确率为47.4,mask mAP(实例分割)准确率为42.7,分别比目前最先进的Backbone算法提高了+0.7%、+1.1%、+0.7和+0.5。
此外,最大的版本Pale-B在ImageNet-1K上的Top-1准确率为84.9%,在ADE20K上的单尺度mIoU准确率为52.2%,在COCO上的box mAP为49.3,mask mAP为44.2。
2相关工作
ViT将输入图像作为一系列的Patches,为多年来由CNN主导的视觉任务开辟了一条新的道路,并显示出了良好的性能。为了更好地适应视觉任务,之前的Vision Transformer Backbone工作主要集中在以下两个方面:
- 增强Vision Transformer的局部性;
- 在性能和效率之间寻求更好的平衡。
2.1 局部增强ViTs
与CNN不同的是,原始Transformer没有涉及到局部连接的感应偏置,这可能会导致对线、边缘、颜色结合点等局部结构的提取不足。
许多工作致力于增强ViT的局部特征提取。最早的方法是用分层结构取代单一尺度结构,以获得多尺度特征。这样的设计在以后的作品中也有很多。
另一种方法是把CNN和Transformer结合起来。Mobile-Former、Conformer和DSNet通过精心设计的双分支结构集成了CNN和Transformer功能。而Local ViT、CvT和Shuffle Transformer只在Transformer的某些组件中插入了几个卷积。此外,一些作品通过融合不同尺度的多分支或配合局部自注意力以获得更丰富的特征。
2.2 高效ViTs
目前主流的研究方向为提高效率Vision Transformer的主干有两层:
- 通过剪枝策略减少冗余计算
- 设计更高效的自注意力机制
1、ViT的剪枝
对于剪枝,现有的方法可以分为三类:
- Token剪枝:DVT提出了一种级联Transformer结构,可以根据输入图像自适应调整Token数量。考虑到Token含有不相关甚至混淆的信息可能不利于图像分类,一些研究提出了通过可学习采样和强化学习策略来定位有区别的区域,逐步减少信息Token的丢弃。然而,这种非结构化的稀疏性导致了与密集预测任务的不兼容性。通过Token Pooling和Slow-Fast更新实现了一些结构保持的Token选择策略。
- Channel剪枝:VTP为去除Reductant Channel提供了一个简单而有效的框架。
- Attention Sharing:基于连续块间注意力映射高度相关的观测结果,提出了PSViT算法来重用相邻层间的注意力计算过程。
2、高效Self-Attention机制
考虑到二次计算的复杂度是由Self-Attention引起的,许多方法致力于在避免性能衰减的同时提高二次计算的效率。
一种方法是减少key和value的序列长度:
- PVT提出了一种Spatial Reduction Attention,在计算注意力之前对key和value的尺度进行下样。
- Deformable Attention使用一个线性层从全集合中选择几个关键字,可以看作是全局自注意力的稀疏版本。但是,过多的下采样会导致信息混淆,Deformable Attention严重依赖于CNN学习的High-Level特征图,可能不能直接用于原始输入图像。
另一种方法是将全局自注意力替换为局部自注意力,将每个自注意层的范围限制在一个局部区域内。如图1(b)所示,首先将特征映射划分为几个不重叠的方形规则窗口(用不同的颜色表示),在每个窗口内分别进行自注意力计算。
设计局部自注意力机制的关键挑战是如何弥合局部和全局感受野之间的差距?
一种典型的方式是在规则的方形窗口之间构建连接。例如,在连续块中交替使用常规窗口和另一种新设计的窗口分区方式(图1(b)中Shift Window或Shuffle Window),并操作Messenger Tokens来跨窗口交换信息。
此外,Axial Attention通过对特征图的每一行或每一列进行自注意力计算,分别在水平和垂直方向上获得较长的距离依赖。
CSWin提出了一个包含多行多列的Cross-Shaped Self-Attention区域。现有的这些局部注意力机制虽然在一定程度上提供了突破局部感受野的机会,但它们的依赖关系不够丰富,不足以在单个自注意力层中捕获足够的上下文信息,从而限制了整个网络的建模能力。
与本文的工作最相关的是CSWin,CSWin开发了一个Cross-Shaped Self-Attention用于计算水平和垂直条纹中的自注意力,而本文提出的PS-Attention计算Pale形状区域的自注意力。此外,本文的方法中每个Token的感受野比CSWin宽得多,这也赋予了本文的方法更强的上下文建模能力。