这篇文章结合了CNN的归纳偏置,基于局部窗口做注意力,并且逐步融合到深层transformer层中构建表征,来达到扩大感受野,并且极大降低了计算量。是一个特征提取的主干网络,backbone。构建了一种分层特征提取
的方式,不断减小“feature map”的大小(token的数量),构造层次的特征映射。
关键部分是提出了Shift window移动窗口(W-MSA、SW-MSA),改进了ViT中忽略局部窗口之间相关性的问题。在ViT中使用不重叠的窗口进行self-attention计算,忽略了相邻窗口间的相关性,而Swin-T使用shfit windown
移动(M/2)来桥接不同窗口间的信息。但这样会引入很大的计算量,于此作者又提出了cyclic-shift 循环位移
,保证计算量不变,但是这样的移动又又又会使得不相关的部分拼接在一起。计算这些部分的注意力是没有意义的。于是提出了attention mask
来遮盖无效的部分,使注意力权重为0 这部分的详细推导。还加入了相对位置偏置B
。
获得了2021ICCV最优文章。
原文链接:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
参考文献:
对Swin-T的输入输出不太清楚的可以看这篇:Swin Transformer详解
W-MSA和SW-MSA复杂度计算:MSA模块计算复杂度推导
本文提出了一种新的transformer结构,称为Swin Transformer,它可以作为计算机视觉的通用主干
。视觉和语言两个领域之间的差异主要体现在两个方面:尺度和分辨率。
为了解决以上问题,作者提出了一种分层级的Transformer。通过移位窗口将自注意计算限制在非重叠的局部窗口上,同时允许跨窗口连接。通过融合patch来改变特征图像大小以达到不同层级的注意力计算。这种分层结构具有在各种尺度下建模的灵活性,并且相对于图像大小具有线性计算复杂性。Swin Transformer能够与广泛的视觉任务兼容,包括图像分类和密集预测任务,如目标检测和语义分割。
Transformer是为序列建模和转导任务而设计的,它具有建立数据中的长期依赖关系
的能力,在语言领域获得了巨大的成功。这促使研究人员想要开发它的对计算机视觉的适应性。事实上Transformer在视觉领域已经获得了部分的成功,用self-attention代替部分或全部CNN;或CNN和transformer结合;或单纯使用transformer结构。
Swin-T的方法是基于ViT的。ViT的开创性工作直接将Transformer架构应用于非重叠的中等大小图像块,用于图像分类。但ViT需要大规模的训练数据集(即JFT-300M)才能表现良好,因此DeiT引入了几种训练策略,使ViT也能有效地使用较小的ImageNet-1K数据集。ViT的体系结构不适合用作密集视觉任务的通用主干网络:当输入图像分辨率很高,低分辨率特征映射的复杂度随图像大小呈二次增长
。
在本文中,作者试图扩展Transformer的适用性,将其在语言领域的高性能转移到视觉领域,使其可以像CNN在视觉中一样,作为计算机视觉的通用主干。提出了Swin Transformer结构,它构造了层次特征映射
,并具有与图像大小成线性关系的计算复杂度
。
所提出的Swin-T在图像分类、目标检测和语义分割等识别任务上具有很强的性能。它的性能明显优于ViT/DeiT和ResNe(X)t模型。
文章的重点在于移动窗口Shift Window,窗口的移动方式和移动后注意力的计算(里面有个mask attention)
输入图像大小为 ( 224 × 224 × 3 ) (224×224×3) (224×224×3)
patch partition
将输入的RGB图像分割为非重叠的patch(同ViT)。每个patch视为一个“token”。设置patch大小为4×4个像素区域。所以每个patch特征维度为 4 × 4 × 3 = 48 4×4×3=48 4×4×3=48。----输出 ( 56 × 56 × 48 ) (56×56×48) (56×56×48)线性嵌入层
,将patch映射到维度为C。(C设置为96) ----输出 ( 56 × 56 × 96 ) (56×56×96) (56×56×96)两个个Swin-T block
,分别是常规窗口W-MSA和移动窗口SW-MSA,进行自注意力计算。 ----输出 ( 56 × 56 × 96 ) (56×56×96) (56×56×96)patch 融合
减少token数量,同时也减少特征维度。将第一层的每 2 × 2 2×2 2×2个patch合并,并维度上拼接为4C,并经过一个线性层映射到2C。这一步token数量减少了 2 × 2 = 4 2×2=4 2×2=4倍。实际上就是特征图缩小了 2 × 2 = 4 2×2=4 2×2=4倍。----输出 ( 28 × 28 × 192 ) (28×28×192) (28×28×192)两个Swin-T Block
计算自注意力,将特征转换到更深层。----输出 ( 28 × 28 × 192 ) (28×28×192) (28×28×192)patch merging
减少token,降低维度。 ----输出 ( 14 × 14 × 384 ) (14×14×384) (14×14×384)六个Swin-T Block
(两个为一组)可以看出,注意力模块的计算是不改变特征大小的。 ----输出 ( 14 × 14 × 384 ) (14×14×384) (14×14×384)patch merging
减少token,降低维度。 ----输出 ( 7 × 7 × 768 ) (7×7×768) (7×7×768)两个Swin-T Block
计算自注意力,将特征转换到更深层,得到最终的特征。 ----输出 ( 7 × 7 × 768 ) (7×7×768) (7×7×768)输出特征大小为 ( 7 × 7 × 768 ) (7×7×768) (7×7×768)。四个阶段分别是四个层级的特征映射。
和标准的transformer结构类似,只是替换了多头注意力计算部分MSA为基于移动窗口的模块W-MSA(Window-based MSA)和SW-MSA(Shfit Window-based MSA),其他层保持不变。如上图Swin Transformer block由一个基于移位窗口的MSA模块组成,然后是一个中间带有GELU激活层的的两层MLP。在每个MSA模块和MLP之前应用LayerNorm(LN)层,在每个模块之后应用残差连接 。
标准Transformer架构会对输入进行全局自注意力计算
,计算每个token和其他所有token之间的关系。全局计算导致计算计算复杂度是token数量的二次方,这使得它没法适用于许多需要大量token进行密集预测或表示高分辨率图像的视觉问题。
↓↓
因此结合CNN的局部特性。提出了一种基于窗口
的注意力计算方式。只在局部窗口内计算每个token和其他token的关系。窗口是以不重叠的方式均匀分割图像。每个窗口包含 M × M M×M M×M个patch。(M=7)
全局MSA和W-MSA模块的计算复杂度比较(图像大小为 h × w h×w h×w):具体推导方法可以看这篇MSA模块计算复杂度推导
前者是patch数hw的二次方,而后者在M固定时是线性的。全局自注意计算的消耗通常难以负担,而基于窗口的自注意计算量降低了很多,且是可调整的。
单纯基于窗口的自注意力计算方法丢失了相邻窗口间的相关性
,限制了其建模能力。为了保持非重叠窗口的高效计算同时引入跨窗口连接,提出了shift-window,一种新的窗口划分方式:在两个连续的Swin-T Block中交替使用两种划分设置。
窗口经过移位后,导致窗口数量增加了。数量从 h M × w M \frac{h}{M}\times\frac{w}{M} Mh×Mw到 ( h M + 1 ) × ( w M + 1 ) (\frac{h}{M}+1)\times(\frac{w}{M}+1) (Mh+1)×(Mw+1)。当常规分区中窗口数量很小时(例如2×2),增加的计算量就很大了(2×2)→(3×3),即2.25倍大。(一般窗口的数量都不会太多的)
解决的方法是将较小的窗口填充到M×M的大小,并在计算注意力时屏蔽填充值。将左上方小块循环移位填充到右下方,如上图。在这个移位之后,某些窗口内可能由几个在特征图中不相邻的子窗口组成,因此使用掩蔽机制将自注意计算限制在每个子窗口内(这个子窗口是指被移动的不同颜色的小块构成的,这些有颜色的部分会被遮盖)。通过循环移位,窗口的数量与常规窗口分区的数量相同。关于mask的细节可以看这篇mask手工推导
Relative position bias:
在计算Self-Attention的过程中,SwinTransformer也加入了相对位置编码的部分。
相对位置编码主要是为了解决Self-Attention中的排列不变性的问题,即不同顺序输入的tokens会得到一样的结果。
分别在ImageNet-1K图像分类、COCO目标检测和ADE20K语义分割上进行了实验。
ImageNet-1K中包含1.28M个训练图像和来自1000个类的50K个验证图像。设置了两种训练环境:
ImageNet-22K数据集包含1420万张图像和22K类。
表1(a)给出了使用常规ImageNet-1K训练与其他主干网(包括基于Transformer和基于ConvNet)的比较。
①与之前最先进的基于Transformer的体系结构(即DeiT)相比,Swin-T明显超过了具有类似复杂性的对应DeiT体系结构,不同大小的是输入图像上精确度都有提高。
②与最先进的ConvNet(即RegNet和EfficientNet)相比,Swin Transformer在速度和精确度方面取得了略好的折衷。
如表1(b)所示,还在ImageNet22K上预训练更大容量的Swin-B和Swin-L,并在ImageNet-1K上微调。很明显获得了更好的结果,实现了显著的速度-精度权衡。
目标检测和实例分割实验在COCO 2017上进行,其中包括118K训练、5K验证和20K测试开发图像。
和ResNe(X)t相比:
表2(a)列出了Swin-T和ResNet-50在四种目标检测框架上的结果。Swin-T架构带来了的+3.4∼4.2 box AP,比ResNet-50更具优势,但模型尺寸、算力消耗、延迟都稍大一些。
表2(b)比较了Swin-T和ResNe(X)t在不同模型容量下采用级联mask-RCNN。Swin Transformer和相似模型大小、算力和延迟的ResNeXt101-64x4d相比获得了+3.6 box AP and +3.3 mask AP的显著增益。
表2(c),Swin Transformer和使用改进的HTC框架相比,增益分别为+4.1 box AP and +3.1 mask AP。
关于推理速度,ResNe(X)t是由高度优化的Cudnn函数构建的,但Swin-T体系结构是由内置的PyTorch函数实现的,这些函数并没有得到很好的优化。
和DeiT相比:
表2(b)所示,和使用级联掩模R-CNN框架的DeiT-S性能。与模型尺寸相似(86M对80M)的DeiT-S相比,Swin-T的结果是+2.5box AP和+2.3mask AP,并且推理速度显著更高(15.3fps对10.4fps)。DeiT的推理速度较低主要是由于其对输入图像大小的二次复杂度。
和SOTA相比:
表2(c)将Swin-T的最佳结果与之前最先进的模型进行了比较。Swin-T的最佳模型在COCO测试开发上超过了之前的最佳结果+2.7 box AP和+2.6 mask AP。
ADE20K是一个广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K个图像,其中20K用于训练,2K用于验证,另外3K用于测试。利用mmseg中的SuperNet作为基础框架,以实现其高效性。
表3列出了不同方法/主干线对的mIoU、模型大小(#param)、FLOP和FPS。从这些结果可以看出,在计算成本相似的情况下,Swin-S比DeiT-S高出 +5.3 mIoU (49.3 vs. 44.0) 。它也比ResNet-101高出+4.4 mIoU,比ResNeSt-101高出+2.4 mIoU。Swin框架带有ImageNet-22K预训练的Swin-L模型在val集合上实现了53.5 mIoU,超过了之前的最佳模型+3.2 mIoU。
在本节中,使用ImageNet-1K图像分类、COCO目标检测的级联掩码R-CNN和ADE20K语义分割的SuperNet,在提出的Swin Transformer中删除了重要的设计元素。
表4、5中显示了在三项任务中有无移位窗口、有无相对位置偏差、不同自注意力方法的表现力:
①在ImageNet-1K上,采用移位窗口分区的Swin-T在每个阶段的性能都优于基于单个窗口分区的Swin-T。说明使用移动窗口在前几层的窗口之间建立连接是有效的。移位窗口的延迟开销也很小,如表5所示。
②在不同位置嵌入相对位置偏差方法的比较。结果表明具有相对位置偏差的Swin-T比未进行位置编码和绝对位置嵌入的效果都要好,表明相对位置偏差的有效性。
note: 虽然包含绝对位置嵌入提高了图像分类精度(+0.4%),但它损害了对象检测和语义分割的效果。虽然最近的ViT/DeiT模型放弃了图像分类中的平移不变性
(尽管它长期以来一直被证明对视觉建模至关重要)。但作者认为,保留一定平移不变性的归纳偏差仍然适用于通用视觉建模,尤其是在目标检测和语义分割的密集预测任务中。
③不同的自注意方法 表5比较了不同自注意计算方法和实现的实际速度。Swin-T的循环移位比单纯的填充更具硬件效率,尤其是对于更深层的阶段。基于所提出的移位窗口方法构建的自注意力模块比滑动窗口的效率高。表6展示了在这三项任务中的准确性,表明它们在视觉建模方面同样准确。与速度最快的Transformer架构之一Performer相比,提出的基于移位窗口的自注意计算和整体Swin Transformer架构速度稍快。
本文提出了一种新的视觉Transformer主干网络。Swin-T结合了CNN的归纳偏置,基于局部窗口
做注意力,构建了一种层次化
的特征表示,并具有与输入图像大小呈线性计算复杂度
,极大降低了计算量。
局部窗口
做注意力层次化
的特征表示cyclic-shift 循环位移
和mask机制
,保证计算量不变,并且忽略不相关部分的注意力权重。相对位置偏置B
。最后祝各位科研顺利,身体健康,万事胜意~