《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》
微软亚洲研究院出品
提出 Swin Transformer
可以作为 CV 的通用主干
Tansformer 用于图像的挑战:
解决:分层结构+移动窗口
优点:
效果:
Swin Transformer 优势特点:
效果:
Swin Transformer 在 COCO 对象检测和 ADE20K 语义分割方面实现了最先进的性能,大大超过了以前的最佳方法。
展望:
第一段:CV现状
长期以来,计算机视觉建模一直由 CNN 主导。
第二段:NLP 现状
另一方面,NLP 中网络架构的演变走上了一条不同的道路,今天流行的架构是 Transformer。
第三段:本文对现存问题的解决
本文愿景:
试图扩大 Transformer 的适用性,使其可以作为计算机视觉的通用主干。
将 Transformer 在语言领域的高性能转移到视觉领域的重大挑战可以用两种模式之间的差异来解释:
解决方案:提出通用的 Transformer 主干——Swin Transformer
构造层次特征图
Swin-Transformer 通过从小尺寸补丁(灰色轮廓)开始,逐渐合并更深 Transformer 层中的相邻补丁(patch),构建了一个层次表示。有了这些分层特征图,Swin-Transforme 模型可以方便地利用高级技术进行密集预测,如特征金字塔网络(FPN)或 U-Net。
对图像大小具有线性计算复杂性。
线性计算复杂性是通过在划分图像(红色轮廓)的非重叠窗口内局部计算自注意来实现的。每个窗口中的补丁数量是固定的,因此复杂性与图像大小成线性关系。这些优点使 Swin Transformer适合作为各种视觉任务的通用主干,与之前基于 Transformer 的架构形成鲜明对比,后者产生单一分辨率的特征图,并具有二次复杂性。
第四段:在连续的自注意层之间移动窗口分区(如图就是往右往下各移动两个 patch)
高建模能力:
偏移的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力。
低延迟:
一个窗口内的所有查询补丁共享相同的密钥集,这有助于硬件中的内存访问。相比之下,早期的基于滑动窗口的自关注方法在通用硬件上由于不同查询像素的不同密钥集而延迟较低。
设计通用性:
实验表明,所提出的移位窗口方法比滑动窗口方法具有低得多的延迟,但在建模能力方面相似。移位窗口方法也被证明对所有 MLP 架构都是有益的。
第五段:表现出色
第六段:多模态通一展望
我们相信,跨计算机视觉和自然语言处理的统一架构可以使这两个领域受益,因为它将促进视觉和文本信号的联合建模,并且可以更深入地共享这两个域的建模知识。我们希望 Swin Transformer 在各种视觉问题上的出色表现能够在社区中更深入地推动这种信念,并鼓励对视觉和语言信号进行统一建模。
CNN 及其变体
CNN 是整个计算机视觉的标准网络模型。
基于自注意力机制的骨干架构
一些作品使用自注意层来取代流行的ResNet 中的部分或全部空间卷积层。
现状与优势:
在这些工作中,为了加快优化,自注意力是在每个像素的局部窗口内计算的,并且它们实现了比对应的 ResNet 架构略好的准确性/FLOP权衡。
缺点:
它们昂贵的内存访问导致它们的实际延迟显著大于卷积网络。
本文工作:
我们建议在连续层之间移动窗口,而不是使用滑动窗口,这允许在通用硬件中更有效地实现。
以自注意力机制或 Transformer 补充 CNN
另一项工作是用自注意力层或 Transformer 来增强标准的 CNN 架构
基于 Transformer 的视觉骨干
最相关工作是 ViT 及其后续工作。
ViT 的开创性:
ViT 的开创性工作直接将 Transformer 架构应用于不重叠的中等大小图像块,用于图像分类。与卷积网络相比,它在图像分类方面实现了令人印象深刻的速度-精度折衷。
ViT 的数据集依赖:
虽然 ViT 需要大规模的训练数据集(即JFT-300M)才能表现良好,但 DeiT 引入了几种训练策略,使ViT 也能使用较小的 ImageNet-1K 数据集发挥作用。
ViT 的计算复杂:
ViT 在图像分类方面的结果令人鼓舞,但由于其低分辨率特征图和复杂度随图像大小的二次方增加,其架构不适合用作密集视觉任务或输入图像分辨率高时的通用骨干网络。
当前对 ViT 的改进:
有一些工作通过直接上采样或去卷积将 ViT 模型应用于对象检测和语义分割的密集视觉任务,但性能相对较低。还有一些修改了 ViT 架构以获得更好的图像分类。
本文工作:
根据经验,我们发现我们的 Swin-Transformer 架构在图像分类的这些方法中实现了最佳的速度精度权衡,尽管我们的工作侧重于通用性能,而不是专门针对分类。另一项并行工作探索了在 Transformer 上构建多分辨率特征图的类似思路。它的复杂性仍然是图像大小的二次方,而我们的复杂性是线性的,并且也在局部操作,这已被证明有利于对视觉信号中的高相关性进行建模。我们的方法既高效又有效,在COCO 对象检测和 ADE20K 语义分割方面都达到了最先进的精度。
总体架构
阶段一 [TODO]:
Patch Partition:
首先通过和 ViT 类似的 patch 分割模块将输入 RGB 图像分割成不重叠的 patch。每个 patch 都被视为一个“标记(token)”,其特征被设置为原始像素 RGB 值的串联。在本文的实现中,我们使用 4 × 4 4\times4 4×4 的 patch 大小,因此每个补丁的特征维度为 4 × 4 × 3 = 48 4\times4\times3=48 4×4×3=48。
Linear Embedding:
用线性嵌入层应将补丁投影到任意维度(表示为 C C C)。这一顿操作之后每张图片就变成了 H 4 × W 4 × C \frac{H}{4}\times\frac{W}{4}\times C 4H×4W×C 的尺寸。
在这些补丁 token 上应用了几个具有修改的自注意计算的 Transformer 块(Swin-Transformer 块)。Transformer 块保持令牌的数量( H 4 × W 4 \frac{H}{4}\times\frac{W}{4} 4H×4W ),并且与线性嵌入一起被称为“阶段1”。
阶段二:
Patch Merging:有点像 Pixel Shuffle 上采样 [TODO] 的逆转版本。
为了生成分层表示,随着网络的深入,通过 patch 合并层来减少令牌的数量。
阶段三和阶段四:
重复阶段二两次即分别为阶段三和阶段四,输出分辨率进一步降为 H 16 × W 16 × 4 C \frac{H}{16}\times\frac{W}{16}\times4C 16H×16W×4C 和 H 32 × W 32 × 8 C \frac{H}{32}\times\frac{W}{32}\times8C 32H×32W×8C。太像卷积了,这些阶段共同产生分层表示,具有与典型卷积网络(例如 VGG 和 ResNet)相同的特征图分辨率。因此,所提出的体系结构可以方便地取代现有方法中用于各种视觉任务的骨干网络。
Swin Transformer 块:
Swin Transformer 是通过将 Transformer 块中的标准多头自注意(MSA)模块替换为基于移位窗口的模块而构建的,其他层保持不变。Swin Transformer 块由一个基于移位窗口的 MSA 模块组成,然后是一个中间具有 GELU非线性的两层 MLP。在每个 MSA 模块和每个 MLP 之前应用 LayerNorm(LN)层,并且在每个模块之后应用残差连接。
基于移位窗口的自我注意
问题阐述:
标准 Transformer 架构及其对图像分类的自适应都进行全局自注意,其中计算 token 和所有其他 token 之间的关系。全局计算导致了 token 数量的二次复杂性,使其不适合于许多需要大量 token 集进行密集预测或表示高分辨率图像的视觉问题。
非重叠窗口中的自我注意:
为了有效建模,我们在局部窗口内进行自注意操作。窗口被排列为以非重叠的方式均匀地划分图像。假设每个窗口包含 M × M M\times M M×M 个 patch,全局 MSA 模块和基于 h × w h\times w h×w 个 patch 图像的窗口的计算复杂度为 [TODO]:
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \begin{align} \Omega(\mathrm{MSA})=4hwC^2+2(hw)^2C\\ \Omega(\mathrm{W-MSA})=4hwC^2+2M^2hwC \end{align} Ω(MSA)=4hwC2+2(hw)2CΩ(W−MSA)=4hwC2+2M2hwC
其中前者是 patch 数 h w hw hw 的二次方,而后者在 M M M 固定时是线性的(默认设置为 7)。全局自注意计算对于大型 h w hw hw 来说通常是负担不起的,而基于窗口的自注意是可扩展的。
连续块中的移动窗口分区
基于窗口的自注意力模块缺乏跨窗口的连接,这限制了其建模能力。为了引入跨窗口连接,同时保持非重叠窗口的有效计算,我们提出了一种移动窗口分区方法,该方法在连续 Swin-Transformer 块中的两种分区配置之间交替。
第一个模块使用从左上角像素开始的规则窗口划分策略,将 8 × 8 8\times8 8×8 的特征图均匀地划分为大小为 4 × 4 4\times4 4×4(M=4)的 2 × 2 2\times2 2×2 个窗口。然后,下一个模块通过将窗口从规则划分的窗口移位( ⌊ M 2 ⌋ \left\lfloor\frac{M}{2}\right\rfloor ⌊2M⌋, ⌊ M 2 ⌋ \left\lfloor\frac{M}{2}\right\rfloor ⌊2M⌋)个像素,采用与前一层的窗口配置不同的窗口配置。使用移动窗口分区方法,连续的 Swin-Transformer 块计算如下:
z ^ l = W − M S A ( L N ( z l − 1 ) ) + z l − 1 , z l = M L P ( L N ( z ^ l − 1 ) ) + z ^ l − 1 , z ^ l + 1 = S W − M S A ( L N ( z l ) ) + z l , z l + 1 = M L P ( L N ( z ^ l + 1 ) ) + z ^ l + 1 , \begin{align} &\hat{\boldsymbol{\mathrm{z}}}^l=\mathrm{W-MSA}(\mathrm{LN}(\boldsymbol{\mathrm{z}}^{l-1}))+\boldsymbol{\mathrm{z}}^{l-1},\\ &\boldsymbol{\mathrm{z}}^l=\mathrm{MLP}(\mathrm{LN}(\hat{\boldsymbol{\mathrm{z}}}^{l-1}))+\hat{\boldsymbol{\mathrm{z}}}^{l-1},\\ &\hat{\boldsymbol{\mathrm{z}}}^{l+1}=\mathrm{SW-MSA}(\mathrm{LN}(\boldsymbol{\mathrm{z}}^l))+\boldsymbol{\mathrm{z}}^l,\\ &\boldsymbol{\mathrm{z}}^{l+1}=\mathrm{MLP}(\mathrm{LN}(\hat{\boldsymbol{\mathrm{z}}}^{l+1}))+\hat{\boldsymbol{\mathrm{z}}}^{l+1}, \end{align} z^l=W−MSA(LN(zl−1))+zl−1,zl=MLP(LN(z^l−1))+z^l−1,z^l+1=SW−MSA(LN(zl))+zl,zl+1=MLP(LN(z^l+1))+z^l+1,
其中, z ^ l \hat{\boldsymbol{\mathrm{z}}}^l z^l 和 z l \boldsymbol{\mathrm{z}}^l zl 分别表示块 l l l 的 (S)W-MSA 模块和 MLP 模块的输出特征;W-MSA 和 SW-MSA 分别表示使用规则和移动窗口划分配置的基于窗口的多头自注意。
移动窗口分割方法引入了前一层中相邻非重叠窗口之间的连接,并被发现在图像分类、对象检测和语义分割方面是有效的。
针对移位配置的高效批量计算
移动窗口分区的一个问题是,在移位配置中,它将导致更多的窗口,从 ⌈ h M ⌉ × ⌈ w M ⌉ \left\lceil\frac{h}{M}\right\rceil\times\left\lceil\frac{w}{M}\right\rceil ⌈Mh⌉×⌈Mw⌉ 到 ( ⌈ h M ⌉ + 1 ) × ( ⌈ w M ⌉ + 1 ) (\left\lceil\frac{h}{M}\right\rceil+1)\times(\left\lceil\frac{w}{M}\right\rceil+1) (⌈Mh⌉+1)×(⌈Mw⌉+1) ,并且一些窗口将小于 M × M M\times M M×M。一个简单的解决方案是将较小的窗口填充到 M × M M\times M M×M 的大小,并在计算注意力时屏蔽填充的值。当规则分区中的窗口数量很小时,例如 2 × 2 2\times 2 2×2,使用这种朴素解增加的计算量是相当大的( 2 × 2 → 3 × 3 2\times2\to3\times3 2×2→3×3,是 2.25 倍)。在这里,我们提出了一种更有效的批量计算方法,通过向左上角方向循环移位。
在该偏移之后,分批窗口可以由在特征图中不相邻的几个子窗口组成,因此采用掩蔽机制 [TODO] 来将自注意计算限制在每个子窗口内。通过循环移位,批处理窗口的数量与常规窗口分区的数量保持相同,因此也是有效的。
相对位置偏差
在计算自注意时,我们通过在计算相似性时包括每个头部的相对位置偏差 B ∈ R M 2 × M 2 B\in\R^{M^2\times M^2} B∈RM2×M2:
A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T / d + B ) V \mathrm{Attention}(Q,K,V)=\mathrm{SoftMax}(QK^T/\sqrt{d}+B)V Attention(Q,K,V)=SoftMax(QKT/d+B)V
由于沿每个轴的相对位置位于 [ − M + 1 , M − 1 ] [-M+1,M−1] [−M+1,M−1] 的范围内,因此我们参数化较小的偏置矩阵 B ^ ∈ R ( 2 M − 1 ) × ( 2 M − 1 ) \hat{B}\in\R^{(2M-1)\times(2M-1)} B^∈R(2M−1)×(2M−1),并且 B B B 中的值取自 B ^ \hat{B} B^。
观察到与没有该偏差项或使用绝对位置嵌入的对应项相比有显著改进。进一步向输入添加绝对位置嵌入会略微降低性能,因此在我们的实现中没有采用它。
预训练中学习到的相对位置偏差也可以用于初始化模型,以便通过双三次插值以不同的窗口大小进行微调。
架构变体
模型大小和计算复杂度与 ViTB/DIT-B 相似
Swin-T:
模型大小和计算复杂度是 ViTB/DIT-B 的 0.25 倍,与 ResNet-50(DeiT-S)复杂度相似
Swin-S:
模型大小和计算复杂度与 ViTB/DIT-B 的 0.5 倍,与 ResNet-101 的复杂性相似
Swin-L:
模型大小和计算复杂度与 ViTB/DIT-B 的 2 倍
模型变体的体系结构超参数为:
S w i n − T : C = 96 , l a y e r n u m b e r s = { 2 , 2 , 6 , 2 } S w i n − S : C = 96 , l a y e r n u m b e r s = { 2 , 2 , 18 , 2 } S w i n − B : C = 128 , l a y e r n u m b e r s = { 2 , 2 , 18 , 2 } S w i n − L : C = 192 , l a y e r n u m b e r s = { 2 , 2 , 18 , 2 } \begin{align} \mathrm{Swin-T}&:C=96,\mathrm{layer\ numbers}=\{2,2,6,2\}\\ \mathrm{Swin-S}&:C=96,\mathrm{layer\ numbers}=\{2,2,18,2\}\\ \mathrm{Swin-B}&:C=128,\mathrm{layer\ numbers}=\{2,2,18,2\}\\ \mathrm{Swin-L}&:C=192,\mathrm{layer\ numbers}=\{2,2,18,2\} \end{align} Swin−TSwin−SSwin−BSwin−L:C=96,layer numbers={2,2,6,2}:C=96,layer numbers={2,2,18,2}:C=128,layer numbers={2,2,18,2}:C=192,layer numbers={2,2,18,2}
ImageNet-1K上的图像分类
设定:
数据集:
ImageNet-1K:
包含 128 万个训练图像和来自 1000 个类别的 50 万个验证图像。报告了单作物的 top-1 精度。
ImageNet-22K:
在这个较大的数据集上进行预训练,包含 1420 万张图像和 22K 个类。
两种训练环境:
定期 ImageNet-1K 训练。
使用 AdamW 优化器,用于 300 个 epochs
使用余弦衰减学习率调度器和 20 个 epochs 的线性预热
使用 1024 的批量大小、0.001 的初始学习率和 0.05 的权重衰减。
在训练中包括了大多数扩充和正则化策略,除了重复扩充和 EMA,它们不会提高性能。注意,这与相反,在中,重复增强对稳定ViT的训练至关重要。
ImageNet-22K 预训练和 ImageNet-1K 上的微调
常规 ImageNet-1K 训练的结果:
与 DeiT (之前最先进的基于 Transformer 的架构)相比:
Swin Transformers 显著超过了具有类似复杂性的对应 DeiT 架构:Swin-T(81.3%)使用 2242 输入时比 DeiT-S(79.8%)高 +1.5%,Swin-B(83.3%/84.5%)使用 2242/3842 输入时比 DeiT-B(81.8%/83.1%)高 +1.5%。
与 RegNet 和 EfficientNet (最先进的 ConvNets)相比:
Swin Transformer 实现了略好的速度-精度权衡。注意到,虽然 RegNet 和 EfficientNet 是通过彻底的架构搜索获得的,但所提出的 Swin Transformer 是根据标准 Transformer 改编的,具有很强的进一步改进潜力。
ImageNet-22K 预训练结果
我们还在 ImageNet-22K 上预训练较大容量的 Swin-B 和 Swin-L。
COCO上的目标检测
设定
数据集:COCO 2017
在此数据集上进行对象检测和实例分割实验,其中包含 118K 训练、5K 验证和 20K测试开发图像。使用验证集进行消融研究,并在测试中报告系统级比较。
消融研究:
四种典型的对象检测框架:
参数设置:对这四个框架使用相同的设置:
比较对象与方式:
与 ResNe(X)t 的比较
下表列出了 Swin-T 和 ResNet-50 在四个对象检测框架上的结果。与 ResNet-50 相比,我们的 Swin-T 架构带来了稳定的 +3.4~4.2 盒 AP 增益,具有略大的型号大小、FLOP 和延迟。
下表比较了使用级联掩码 RCNN 在不同模型容量下的 Swin Transformer 和 ResNe(X)t。
与 Dei 的比较
与以前最先进技术的比较
ADE20K 上的语义分割
设定:
ADE20K 是一个广泛使用的语义分割数据集,涵盖了 150 个语义类别。它总共有 25K 张图像,其中 20K 用于训练,2K 用于验证,另外 3K 用于测试。我们利用 mmseg 中的 UperNet 作为其高效性的基础框架。
结果:
消融实验
实验方案:
使用 ImageNet-1K 图像分类、用于 COCO 对象检测的级联掩码 R-CNN 和用于 ADE20K 语义分割的 UperNet,来去除所提出的 Swin Transformer 中的重要设计元素。
移动窗口
相对位置偏差
不同的自注意力方法
上表比较了不同的自注意计算方法和实现的实际速度。
在四个网络阶段上,基于所提出的移位窗口方法构建的自注意模块的效率分别比滑动窗口的效率高40.8×/2.5×、20.2×/22.5×、9.3×/2.1× 和 7.6×/1.8×。
总体而言,基于移位窗口构建的 Swin-Transformer 架构分别比基于滑动窗口构建的变体 Swin-T、Swin-S 和 Swin-B 快 4.1/1.5、4.0/1.5 和 3.6/1.5 倍。下表比较了它们在三项任务中的准确性,表明它们在视觉建模中同样准确。
与最快的 Transformer 架构之一 Performer 相比,所提出的基于移位窗口的自注意计算和整体 Swin-Transformer 架构略快 ,同时与使用 Swin-T 的 ImageNet-1K 上的 Performer 相比,实现了 +2.3% 的 top-1 精度。
大约就是把 [ H , W , C ] [H,W,C] [H,W,C] 的图卷积成 [ H , W , C × r 2 ] [H,W,C\times r^2] [H,W,C×r2] 的大小,再通过 Shuffle 操作变成 [ H × r , W × r , C ] [H\times r,W\times r,C] [H×r,W×r,C] 的大小,从而实现上采样的效果。
Patch Merging 则像是把它反过来,把前文所述化成示意图:
以图片分辨率为 224 × 224 224\times 224 224×224 为例
第一阶段:
Patch Partition 模块把 224 × 224 224\times224 224×224 的图片打成 4 × 4 4\times4 4×4 的图片块,所以图片维度由 224 × 224 × 3 224\times224\times3 224×224×3 变成了 ( 224 ÷ 4 ) × ( 224 ÷ 4 ) × ( 4 × 4 × 3 ) = 56 × 56 × 48 (224\div4)\times(224\div4)\times(4\times4\times3)=56\times56\times48 (224÷4)×(224÷4)×(4×4×3)=56×56×48
Linear Embedding 层 Swin-T 的投影维度 C = 96 C=96 C=96,所以尺寸会变成 56 × 56 × 96 56\times56\times96 56×56×96 (代码里实际上是用 4 × 4 4\times4 4×4、步幅为4 、输出通道为 96 的卷积层实现的)、
在 Swin Transformer 块里会先展平为 序列长度 × 每个 t o k e n 的维度 = 3136 × 96 序列长度\times每个token的维度=3136\times96 序列长度×每个token的维度=3136×96 ,3136 这个长度对于注意力机制来说太长了,所以 Swin Transformer 块内进行的是基于窗口的自注意力。Swin Transformer 块也是不改变输入维度的,所以最终输出依然是 56 × 56 × 96 56\times56\times96 56×56×96 。
第二阶段:
第三阶段和第四阶段:
这两个阶段是复制的前面,所以仅仅是把尺寸变成了 14 × 14 × 384 14\times14\times384 14×14×384 和 7 × 7 × 768 7\times7\times768 7×7×768
对于 MSA 来说
对于 W-MSA 来说
白话简述:
相较于 ViT 的尽量不用归纳偏置,完全使用 Transformer 原架构。Swin Transformer 更像是专门为图像而设计,像是把卷积核替换成了 Transformer 核。为此又设计了诸多繁琐的细节。这样在图像领域效果更好了,但是在不同模态的通用性降低了,应用在多模态领域可能需要一些额外的设计。