摘要
本文提出了一个新的vision Transformer模型,称为Swin Transformer,它可以作为计算机视觉的一个通用骨干。将Transformer从自然语言处理运用到视觉的挑战来自于两个领域的差异,比如视觉实体的尺度变化很大,以及与文本中的字相比,图像中的像素分辨率很高。为了解决这些差异,我们提出了一个层次化的Transformer,其表示方法是用移位窗口计算的。移位窗口方案通过将自我注意的计算限制在不重叠的局部窗口,同时也允许跨窗口连接,从而带来更大的效率。这种分层结构可以灵活地在各种尺度上建模,并且相对于图像大小具有线性计算复杂性。Swin Transformer的这些特质使其与广泛的视觉任务兼容,包括图像分类(在ImageNet-1K上的87.3 top-1 accuracy)和密集预测任务,如物体检测(在COCO testdev上的58.7 box AP和
引言
长期以来,计算机视觉中的建模工作一直由卷积神经网络(CNN)主导。从AlexNet[39]及其在ImageNet图像分类挑战中的革命性表现开始,CNN架构通过更大的规模[30, 76]、更广泛的连接[34]和更复杂的卷积形式[70, 18, 84],已经发展得越来越强大。随着CNN成为各种视觉任务的骨干网络,这些架构上的进步导致了性能的提高,广泛地提升了整个领域。
另一方面,自然语言处理(NLP)中的网络架构的演变走了一条不同的道路,今天流行的架构反而是Transformer[64]。Transformer是为序列建模和转换任务而设计的,其显著特点是使用注意力来模拟数据中的长距离依赖关系。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上表现出了有希望的结果,特别是图像分类[20]和视觉-语言联合建模[47]。
在本文中,我们试图扩大Transformer的适用性,使其能够作为计算机视觉的通用骨干,就像它对NLP和CNN对视觉的作用一样。我们观察到,将其在语言领域的高性能转移到视觉领域的重大挑战可以用这两种模式之间的差异来解释。这些差异之一涉及规模。与作为语言Transformer处理的基本元素的单词token不同,视觉元素在尺度上可以有很大的变化,这个问题在物体检测等任务中受到关注[42, 53, 54]。在现有的基于Transformer的模型中
Swin Transformer的一个关键设计元素是它在连续的自注意层之间的窗口分区的转移,如图2所示。移位后的窗口为前一层的窗口架起了桥梁,提供了它们之间的连接,大大增强了建模能力(见表4)。这种策略在现实世界的延迟方面也是高效的:一个窗口内的所有query patch共享相同的key集合
所提出的Swin Transformer 在图像分类、物体检测和语义分割等识别任务上取得了强大的性能。它在这三个任务上的表现明显优于ViT/DeiT[20, 63]和ResNe(X)t模型[30, 70],延迟相近。在COCO测试开发集上,其
我们相信,一个横跨计算机视觉和自然语言处理的统一架构可以使这两个领域受益,因为它将促进视觉和文本信号的联合建模,而且两个领域的建模知识可以更深入地共享。我们希望Swin Transformer在各种视觉问题上的强大表现能够推动这一信念在社区中的深入发展,并鼓励视觉和语言信号的统一建模。
相关工作
CNN及其变种 CNN作为整个计算机视觉的标准网络模型。虽然CNN已经存在了几十年[40],但直到AlexNet[39]的推出,CNN才开始发展并成为主流。此后,更深更有效的卷积神经架构被提出来,进一步推动了计算机视觉的深度学习浪潮,例如VGG[52]、GoogleNet[57]、ResNet[30]、DenseNet[34]、HRNet[65]和EfficientNet[58]。除了这些架构上的进步,在改进单个卷积层方面也有很多工作,如深度卷积[70]和可变形卷积[18, 84]。虽然CNN及其变种仍然是计算机视觉应用的主要骨干架构,但我们强调了类似Transformer的架构在视觉和语言之间统一建模的强大潜力。我们的工作在几个基本的视觉识别任务上取得了强大的性能,我们希望它能为建模的转变做出贡献。
基于自注意的骨干架构 同样受到自我注意层和Transformer架构在NLP领域的成功启发,一些工作采用自注意层来取代流行的ResNet中的部分或全部空间卷积层[33, 50, 80]。在这些工作中,自注意是在每个像素的局部窗口内计算的,以加快优化[33],它们实现了比对应的ResNet架构稍好的准确性/FLOPs权衡。然而,其昂贵的内存访问导致其实际延迟明显大于卷积网络[33]。我们建议不使用滑动窗口,而是在连续的层之间转移窗口,这样可以在一般的硬件中更有效地实现。
自注意/Transformers来补充CNN 另一个工作方向是用自注意层或变换器来增强标准CNN架构。自注意层可以补充骨干网[67, 7, 3, 71,
基于Transformers的视觉骨干 与我们的工作最相关的是Vision Transformer (ViT) [20]及其后续工作
方法
整体架构
图3展示了Swin Transformer结构的概况,其中描述了微小版本(SwinT)。它首先通过一个patch分割模块将输入的RGB图像分割成不重叠的patch,就像ViT所做的一样。每个patch被视为一个 "token",其特征被设置为原始像素RGB值的连接。在我们的实现中,我们使用
几个具有修改过的自注意计算的Transformer块(Swin Transformer块)被应用于这些patch token。Transformer块保持了token的数量
为了产生分层表征,随着网络的深入,通过patch merging层来减少token的数量。第一个patch merging层将每组
Swin Transformer块 Swin Transformer是通过将Transformer块中的标准多头自注意(MSA)模块替换为基于移位窗口的模块(在第3.2节中描述),而其他层保持不变。如图3(b)所示,一个Swin Transformer模块包括一个基于移位窗的MSA模块,然后是一个两层的MLP,中间是GELU非线性变换。在每个MSA模块和每个MLP之前都有一个LayerNorm (
基于移动窗口的自注意力
标准的Transformer架构[64]和它为图像分类所做的调整[20]都进行了全局的自注意力,其中一个token和所有其他token之间的关系被计算出来。全局计算会导致相对于token数量的二次复杂性,使得它不适合许多需要大量token集进行密集预测或表示高分辨率图像的视觉问题。
非重叠窗口中的自注意力 为了有效建模,我们建议在局部窗口中计算自注意。窗口的安排是以非重叠的方式均匀地划分图像。假设每个窗口包含
其中前者对patch数
在连续的区块中进行移位窗口划分 基于窗口的自我注意模块缺乏跨窗口的连接,这限制了其建模能力。为了引入跨窗口的连接,同时保持非重叠窗口的有效计算,我们提出了一种移位的窗口划分方法,在连续的Swin Transformer块中交替使用两种划分配置。
如图2所示,第一个模块采用常规的窗口划分策略,从左上角的像素开始,
用移动窗口分区的方法,连续的Swin Transformer被计算为
其中
移位窗口划分方法在上一层的相邻非重叠窗口之间引入了连接,并被发现在图像分类、物体检测和语义分割中是有效的,如表4所示。
用于移位配置的高效的批量计算 移位窗口分区的一个问题是,它将导致更多的窗口。从
相对位置偏差 在计算自注意时,我们遵循
其中
如表4所示,我们观察到,与没有这个偏置项或使用绝对位置嵌入的对应项相比,有明显的改进。此外,像[20]中那样将绝对位置嵌入到输入中会使性能略有下降,因此在我们的实现中没有采用它。
预训练中学习到的相对位置偏差也可用于初始化模型,通过双立方插值对不同窗口大小进行微调[20, 63]。
架构变种
我们建立了我们的基础模型,称为Swin-B,其模型大小和计算复杂性与ViTB/DeiT-B相似。我们还介绍了Swin-T、Swin-S和Swin-L,它们的模型大小和计算复杂性分别为
- Swin-T:
, layer numbers - Swin-S:
, layer numbers - Swin-B:
, layer numbers - Swin-L:
, layer numbers
其中
实验结果
Comments | NOTHING