Author: Yue Cao et.al.
Translate from: arXiv:2103.14030v2
Cite as: Liu, Z., Lin, Y., Cao, Y., Hu, H., Wei, Y., Zhang, Z., Lin, S.C., & Guo, B. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ArXiv, abs/2103.14030.
Open source: https://github. com/microsoft/Swin Transformer
本文提出了一种新的ViT,称为Swin Transformer,它可以作为CV领域的通用backbones。把Transformer从NLP用到CV的挑战来自于两个领域之间的差异,例如视觉对象的规模以及图像中像素的高分辨率。为了解决这些差异,我们提出了一种分层 (hierarchical) Transformer,它的表示是用移位窗口 (Shifted windows) 计算的。
移位窗口的设计限制将Self-attenion的计算限制在非重叠的局部窗口中,同时允许跨窗口的连接,从而提高了效率。
这种分层结构具有在不同尺度下建模的灵活性,并且相对于图像大小具有线性计算复杂度。
Swin Transformer的这些特性使其与广泛的视觉任务兼容,包括图像分类(ImageNet-1K),密集预测任务,目标检测(COCO)和语义分割(ADE20K)。它的性能超过了之前的最先进水平,这表明了基于ViT的模型作为视觉backbones的潜力。分层设计和移位窗口方法也证明对所有MLP体系结构都是有益的。
计算机视觉中的建模一直由卷积神经网络(CNN)主导。CNN架构通过更大的规模、更广泛的连接和更复杂的卷积形式变得越来越强大。CNN已成为各种视觉任务的Backbones。
事实上,Shifted windows的思想就和CNN中Conv的计算方法很像
另一方面,自然语言处理(NLP)中网络体系结构的演变走了一条完全不同的道路,最流行的体系结构是Transformer。它是为序列建模 (sequence modeling) 和转换任务而设计的,它以关注数据中的long-range的依赖关系而著称。它在NLP领域的巨大成功促使研究人员研究它对CV的适应性,最近它在某些任务上展示了有希望的结果,特别是图像分类和联合视觉语言建模。
在本文中,我们试图扩展Transformer以便使其作为计算机视觉的通用backbones,就像CNN所做的那样。我们观察到,将Transformer从NLP迁移到CV领域的挑战可以通过两种模式之间的差异来解释。
图1(a)Swin Transformer通过在更深的层中合并图像块(灰色分块)来构建分层的feature maps,并且由于只在每个局部窗口(红色分块)内计算Self-attention,因此对于输入图像大小具有线性计算复杂性。(b)相比之下,以前的ViT生成单一低分辨率的feature maps,并且由于计算全局自我注意,输入图像大小具有二次计算复杂性。
我们提出了一种通用的backbone,称为Swin-Transformer,它构造了层次化feature maps,并且具有与图像大小成线性关系的计算复杂度。如图1所示,Swin Transformer从小尺寸的patch开始,逐步合并更深层次的Transformer层中的相邻patch,构建层次表示。有了这些层次化feature maps,Swin Transformer模型可以方便地利用先进技术进行密集预测。线性计算复杂性是通过在分割图像的非重叠窗口内局部计算Self-attention来实现的。每个窗口中的patch数量是固定的,因此复杂性与图像大小成线性关系。Swin Transformer与以前基于Transformer的体系结构不同,后者生成单一分辨率的feature maps,并且具有二次方复杂度。
图2 一个用于计算Self-attention的shifted window方法的示例。在 l l l层(左),采用规则的window划分方案,并在每个窗口内计算Self-attention。在下一层 l + 1 l+1 l+1(右)中,窗口分区被shifted,从而产生新的窗口。因此新窗口中的Self-attention计算跨越了先前窗口的边界,建立了它们之间的联系。
Swin Transformer的一个关键设计元素是在连续的shifted window分区,如图2所示。这种策略在考虑真实世界的时延(latency)方面也很有效:window中的所有query patch都共享相同的key集合,这有助于硬件访问内存。早期的基于滑动窗口的自我注意方法[33,50]由于不同query像素的key集合不同,在普通硬件上的延迟问题更严重。实验表明,shifted window方法比sliding window方法具有更低的延迟,但建模能力相似。
注意!移动的是窗口的划分(所以叫shifted window),而非移动窗口本身(这是以前的sliding window)!这一改动的好处在这段写得很清楚,即shifted window使得不重叠的窗口共享key集合,从而计算复杂度好很多。
具体来说,该方法在前后相继的SWN Transformer模块中交替使用两种划分配置,如3.2节所详细解释。
略
图3概述了Swin Transformer体系结构,其中说明了tiny版本(Swin-T)。它首先将RGB图像分割为非重叠的patch。每个patch被视为一个token,其特征被就是被展平的像素RGB值。在我们的实现中,我们使用4×4像素的patch,因此每个patch的特征维度为4×4×3=48。在该原始值特征上应用线性嵌入层将其投影到任意维度(表示为C)。
图3(a)Swin-T的结构(b)两个前后相继的的Swin-T模块,W-MSA和SW-MSA分别表示具有标准和移位window的多头自注意力模块。
首先,在这些patch上应用了几个改进的Swin Transformer blocks。转换器块保持token的数量( H 4 × W 4 \frac{H}{4}\times \frac{W}{4} 4H×4W),与Linear embedding一起被称为“stage 1”。
为了产生分层表示,随着网络的深入,通过将patch合并来减少token的数量。第一个合并层连接每组2×2相邻patch的特征,并在4C维合并后的特征上应用线性层。这将令牌的数量减少了2×2=4倍(相当于分辨率的2×降采样),输出维度变为2C。之后应用SW Transformer块进行特征变换,分辨率保持在 H 8 × W 8 \frac{H}{8}\times \frac{W}{8} 8H×8W,被称为“stage 2”。
“stage 2”重复两次,即“stage 3”和“stage 4”,输出分辨率经过两次降采样变为分别为 H 16 × W 16 \frac{H}{16}\times \frac{W}{16} 16H×16W和 H 32 × W 32 \frac{H}{32}\times \frac{W}{32} 32H×32W。这些阶段共同产生分层表示,具有与典型卷积网络相同的特征图的分辨率,因此,所提出的体系结构可以方便地替换现有方法中的backbone,用于各种视觉任务。
Swin Transformer是通过将标准多头自关注(MSA)模块替换为基于shifted window的模块而构建的,其他层保持不变。如图3(b)所示,Swin Transformer模块由一个SW-MSA模块组成,然后是一个具有GELU非线性的2层MLP。在每个MSA模块和每个MLP之前应用LayerNorm(LN)层,在每个模块之后添加残差连接。
全局的Self-attention计算具有token数量二次方的复杂性,这使得它不适用于许多高分辨率图像的视觉问题。
为了有效建模,我们建议只在局部窗口中计算Self-attention。每个窗口以不重叠的方式均匀地分割图像。假设每个窗口包含M×M个patch,则全局MSA模块和基于窗口的MSA模块计算复杂度分别(假设有 h × w h\times w h×w个patch):
其中,前者是patch总数 h w hw hw的二次方,而后者在窗口数 M M M固定时对 h w hw hw是线性的。全局MSA计算量通常是负担不起的,而基于窗口的W-MSA是scalable的。
到目前为止基于窗口W-MSA模块缺乏跨窗口之间的连接,这限制了其建模能力。为了在保持非重叠窗口的高效计算的同时引入跨窗口连接,我们提出了一种移位窗口划分的方法,该方法在前后相继的SWN transformer模块中交替使用两种划分配置。
如图2所示,第一个模块使用从左上角像素开始的常规窗口分区策略,将8×8特征映射均匀地划分为大小为4×4(M=4)的2×2大小的窗口。然后,下一个模块采用与前一层不同的窗口配置,按照 M 2 \frac{M}{2} 2M移动窗口分区策略。
使用移位窗口划分方法,整体的SWN transformer模块计算如下(对应图2b):
移位窗口分区的一个问题是,它将得到更多的窗口,并且处于图像边缘的窗口大小将小于 M × M M×M M×M。一个简单的解决方案是将较小的窗口填充到M×M大小,并在计算attention时mask掉填充值。但还有一个问题是,当划分的窗口数很少时,使用此填充方法增加的计算量相当大。在这里,我们提出了一种更有效的批量计算方法,方法是向左上方向循环移位,如图4所示。在该移位之后,批处理窗口可能由多个子窗口组成,这些子窗口在feature maps中不相邻,因此采用mask机制将Self-attention计算限制在每个子窗口内。通过循环移位,批处理窗口的数量与常规窗口分区的数量相同,因此也是有效的。