paper:2103.14030.pdf (arxiv.org)
code:microsoft/Swin-Transformer: This is an official implementation for “Swin Transformer: Hierarchical Vision Transformer using Shifted Windows”. (github.com)
期刊/会议:ICCV 2021(best paper)
本文提出了一种新的Vision Transformer,称为Swin Transformer,它能够作为计算机视觉的通用骨干网络。将Transformer从语言转化为视觉的挑战来自于两个领域之间的差异,例如视觉实体规模的巨大变化,以及与文本中的单词相比,图像中的像素分辨率较高。为了解决这些差异,我们提出了一个分层(hierarchical)Transformer,它的表示是用移位窗口(shifted windows)计算的。**通过将self-attention计算限制在非重叠的局部窗口,同时还允许跨窗口连接,移位窗口方案带来了更高的效率。**这种层次结构具有在不同尺度上建模的灵活性,并且具有与图像大小相关的线性计算复杂性。Swin Transformer的这些特性使其能够兼容广泛的视觉任务,包括图像分类(在ImageNet-1K上的87.3 top-1精度)和密集的预测任务,如目标检测(COCO test-dev上的58.7 box AP和51.1 mask AP)和语义分割(ADE20K val上的53.5 mIoU)。它的性能大大超过了以前的最先进水平,COCO上的+2.7 box AP和+2.6 mask AP, ADE20K上的+3.2 mIoU,展示了基于transformer的模型作为视觉骨干网络的潜力。分层设计和移位窗口方法也被证明对所有MLP体系结构都有好处。
长期以来,计算机视觉建模一直由卷积神经网络(CNN)主导。从AlexNet及其在ImageNet图像分类挑战中的革命性表现开始,CNN体系结构已经进化得越来越强大,通过更大的规模,更广泛的连接,更复杂的卷积形式。随着CNN作为各种视觉任务的骨干网络,这些架构上的进步导致了性能的提高,广泛地提升了整个领域。
另一方面,在自然语言处理(NLP)中,网络架构的发展已经走上了一条不同的道路,目前流行的架构是Transformer。为序列建模和翻译任务而设计的Transformer以其对数据中的长期依赖模型的注意而闻名。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近在某些任务上展示了有前景的结果,特别是图像分类和联合视觉-语言建模。
在本文中,我们试图扩展Transformer的适用性,使其可以作为通用计算机视觉的主干网络,就像NLP和CNN在视觉中所做的那样。我们观察到,将其在语言领域的高性能转移到视觉领域的重大挑战可以用两种模式之间的差异来解释。其中一个差异涉及规模。与语言Transformer中作为处理基本元素的word token不同,视觉元素在规模上可以有很大的差异,这是在目标检测等任务中需要注意的问题。在现有的基于transformer的模型中,token都是固定规模的,这一属性不适合这些视觉应用。另一个区别是图像像素的分辨率要比文本段落中的单词高得多。存在许多视觉任务,如语义分割,需要在像素级上进行密集预测,这对于高分辨率图像上的Transformer来说是难以解决的,因为其自注意的计算复杂度是图像大小的二次级。为了克服这些问题,我们提出了一个通用的Transformer主干网络,称为Swin Transformer,它构造分层特征映射,并且具有与图像大小线性的计算复杂度。如图1(a)所示,Swin Transformer从较小的补丁(用灰色表示)开始,逐步合并较深Transformer层中的相邻补丁,从而构建了一个分层表示。有了这些分层特征映射,Swin Transformer模型可以方便地利用高级技术进行密集预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在划分图像的非重叠窗口内局部计算自注意来实现的(用红色标出)。每个窗口中的patch数量是固定的,因此复杂度与图像大小成线性关系。这些优点使Swin Transformer适合作为各种视觉任务的通用骨干,而以前基于Transformer的架构只生成单一分辨率的特征映射,并且具有二次复杂度。
Swin Transformer的一个关键设计元素是连续自注意层之间窗口分区的移位,如图2所示。移位的窗口连接了前一层的窗口,提供了它们之间的连接,极大地增强了建模能力(见表4)。这种策略在实际的延迟方面也很有效:一个窗口内的所有查询补丁共享相同的key set,这有助于硬件中的内存访问。相比之下,早期基于滑动窗口(sliding windows)的self-attention由于不同查询像素的key set不同,在一般硬件上延迟较低。我们的实验证明移位窗口(shifted windows)方法相对于滑动窗口(sliding windows)具有更低的延迟,然而在建模能力上是相似的(见表5和表6)。移位窗口方法也被证明对所有MLP体系结构都是有益的。
本文提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上都有较好的表现。它优于ViT / DeiT和ResNe(X)t模型,在三个任务上具有相似的延迟。它在COCO测试开发集上的58.7 box AP和51.1 mask AP超过了以前的最先进结果+2.7 box AP(无外部数据的Copy-paste)和+2.6 mask AP (DetectoRS)。在ADE20K语义分割上,在val集上得到53.5 mIoU,比之前的最先进技术(SETR)提高了+3.2 mIoU。在ImageNet-1K图像分类中,它也达到了87.3%的top-1精度。
我们相信,跨计算机视觉和自然语言处理的统一架构可以使两个领域都受益,因为它将促进视觉和文本信号的联合建模,并且来自两个领域的建模知识可以更深入地共享。我们希望Swin Transformer在各种视觉问题上的强大表现可以在社区中进一步推动这一信念,并鼓励视觉和语言信号的统一建模。
CNN及其变体:CNN作为整个计算机视觉的标准网络模型。虽然CNN已经存在了几十年,但直到AlexNet的引入,CNN才起飞并成为主流。此后,更深入、更有效的卷积神经架构被提出,以进一步推动计算机视觉领域的深度学习浪潮,例如VGG , GoogleNet, ResNet, DenseNet,HRNet和EfficientNet。除了这些架构上的进步,还有很多关于改进单个卷积层的工作,比如深度可分离卷积(depth-wise convolution)和可变形卷积(deformable convolution)。虽然CNN及其变体仍然是计算机视觉应用的主要骨干架构,但我们强调了类似transformer的架构在视觉和语言之间统一建模的强大潜力。我们的工作在几个基本的视觉识别任务上取得了出色的表现,我们希望它将有助于建模的转变。
基于self-attention的骨干网络:同样受到NLP领域self-attention层和Transformer架构成功的启发,一些工作使用self-attention来取代流行的ResNet中的部分或全部空洞卷积层(spatial convolution layers)。在这些工作中,self-attention是在每个像素的局部窗口内计算的,以加快优化,并且他们获得了比对应的ResNet架构更好的精度/FLOPs权衡。然而,它们巨大的内存访问导致它们的实际延迟明显大于卷积网络。我们建议在连续的层之间移动窗口(shifted window),而不是使用滑动窗口(sliding window),这允许在一般硬件中更有效地实现。
self-attention/Transformer 去辅助CNN:另一项工作是用self-attention layer或transformer增强标准CNN架构。self-attention layer可以通过提供编码远程依赖关系或异构交互的能力来补充backbone或head网络。最近,Transformer中的编码器-解码器设计已被应用于目标检测和实例分割任务。我们的工作探索了transformer对基本视觉特征提取的适应性,并与这些类似的工作相辅相成。
基于Transformer的视觉骨干网络:与我们的工作最相关的是Vision Transformer(ViT)及其后续工作。ViT的开创性工作直接将Transformer架构应用于不重叠的中型图像patch,用于图像分类。与卷积网络相比,它在图像分类上实现了令人印象深刻的速度-准确性权衡。虽然ViT需要大规模的训练数据集(即JFT-300M)才能表现良好,但DeiT引入了几种训练策略,使ViT也能有效地使用较小的ImageNet-1K数据集。ViT在图像分类上的结果是令人鼓舞的,但由于其低分辨率的特征映射以及复杂度随图像大小的二次增长,其架构不适合用作密集视觉任务或输入图像分辨率较高时的通用骨干网络。通过直接上采样或反褶积,将ViT模型应用于目标检测和语义分割的密集视觉任务,但性能相对较低。与我们的工作并行的是一些修改ViT架构的工作,以更好地进行图像分类。根据经验,我们发现我们的Swin Transformer架构在图像分类的这些方法中实现了最佳的速度-精度权衡,尽管我们的工作重点是通用性能,而不是专门用于分类。另一项并行工作探索了类似的思路,在transformer上构建多分辨率特征映射。它的复杂度仍然是图像大小的二次元,而我们的复杂度是线性的,并且在局部操作,这已被证明有利于建模视觉信号的高相关性。我们的方法既高效又有效,在COCO目标检测和ADE20K语义分割方面都达到了最先进的精度。
图3展示了Swin Transformer体系结构的概述,它展示了tiny版本(Swin-T)。它首先通过patch分割模块(如ViT)将输入的RGB图像分割为不重叠的patch。每个patch都被视为一个“token”,其特征被设置为原始像素RGB值的拼接。在我们的实现中,我们使用4 × 4的patch大小,因此每个patch的特征维数为4 × 4 × 3 = 48。在这个原始值特征上应用线性嵌入层,将其投影到任意维度(记为 C C C)。
在这些patch token上应用了几个具有改进的self-attention计算的Transformer块(Swin Transformer块)。Transformer块保持标记的数量( H 4 × W 4 \frac{H}{4}×\frac{W}{4} 4H×4W),并与线性嵌入一起被称为“Stage 1”。
为了产生分层表示,随着网络的深入,通过patch合并层来减少token的数量。第一个patch合并层将每组2 × 2相邻patch的特征进行拼接,并在 4 C 4C 4C维拼接特征上应用线性层。这将token的数量减少了2× 2 = 4的倍数(分辨率的2×下采样),并且输出维度设置为 2 C 2C 2C。随后采用Swin Transformer block进行特征变换,分辨率保持在 H 8 × W 8 \frac{H}{8}×\frac{W}{8} 8H×8W。这个patch合并和特征转换的第一个块被称为“Stage 2”。该过程重复两次,即“Stage 3”和“Stage 4”,输出分辨率分别为 H 16 × W 16 \frac{H}{16}×\frac{W}{16} 16H×16W和 H 32 × W 32 \frac{H}{32}×\frac{W}{32} 32H×32W。这些步骤联合处理产生一个层级表示,具有与典型卷积网络相同的特征图分辨率,如VGG和ResNet。因此,我们所提出的架构可以方便地取代现有方法中的骨干网络,以完成各种视觉任务。
Swin Transformer block:Swin Transformer是通过将Transformer块中的标准multi-head self-attention(MSA)模块替换为基于移位窗口(shifted window)的模块(在第3.2节中描述),而其他层保持不变来构建的。如图3(b)所示,Swin Transformer块由一个基于移位窗口(shifted window)的MSA模块组成,然后是一个介于GELU非线性之间的2层MLP。在每个MSA模块和每个MLP模块之前加一个LN (LayerNorm)层,在每个模块之后加一个残差连接。
标准Transformer架构及其对图像分类的适应都进行全局self-attention,其中计算一个token和所有其他token之间的关系。全局计算导致相对于token数量的二次复杂度,使得它不适合许多需要大量token集进行密集预测或表示高分辨率图像的视觉问题。
非重叠窗口中的self-attention 为了有效地建模,我们提出在局部窗口内计算self-attention。窗口的安排以非重叠的方式均匀地划分图像。假设每个窗口包含 M × M M × M M×M个补丁,则全局MSA模块和基于 h × w h × w h×w个patch图像的窗口的计算复杂度为:
Ω ( M S A ) = 4 h w C 2 + 2 ( h w ) 2 C \Omega(MSA)=4hwC^2+2(hw)^2C Ω(MSA)=4hwC2+2(hw)2C
Ω ( W − M S A ) = 4 h w C 2 + 2 M 2 h w C \Omega(W-MSA)=4hwC^2+2M^2hwC Ω(W−MSA)=4hwC2+2M2hwC
其中前者是patch数量是 h w hw hw的二次函数,后者在 M M M固定时(默认为7)是线性的。对于大的 h w hw hw,全局自注意计算通常是无法承受的,而基于窗口的self-attention是可扩展的。(公式1和公式2的具体计算过程可以参考博客Swin-Transformer网络结构详解_太阳花的小绿豆的博客-CSDN博客_swin transformer结构,论文中的没有具体计算出计算复杂度)
在连续块中移位窗口分区:基于窗口的self-attention模块缺乏跨窗口的连接,这限制了它的建模能力。为了引入跨窗口连接,同时保持非重叠窗口的高效计算,我们提出了一种移位窗口分区方法,该方法在连续Swin Transformer块中的两个分区配置之间交替。
如图2所示,第一个模块采用从左上角像素开始的规则窗口划分策略,将8 × 8的特征图均匀划分为2 × 2个大小为4 × 4 ( M = 4 M = 4 M=4)的窗口。然后,下一个模块采用从规则分区窗口中移出( ⌊ M 2 , M 2 ⌋ \left \lfloor \frac{M}{2},\frac{M}{2} \right \rfloor ⌊2M,2M⌋)个像素的窗口的上一层窗口设置。
使用移位窗口分区方法,连续的Swin Transformer块计算为
z ^ l = W-MSA ( LN ( z l − 1 ) ) + z l − 1 , z l = MLP ( LN ( z ^ l ) ) + z ^ l , z ^ l + 1 = SW-MSA ( LN ( z l ) ) + z l , z l + 1 = MLP ( LN ( z ^ l + 1 ) ) + z ^ l + 1 \hat z^l=\text{W-MSA}(\text{LN}(z^{l-1}))+z^{l-1}, \\ z^l=\text{MLP}(\text{LN}(\hat z^l))+\hat z^l,\\ \hat z^{l+1}=\text{SW-MSA}(\text{LN}(z^l))+z^l,\\ z^{l+1}=\text{MLP}(\text{LN}(\hat z^{l+1}))+\hat z^{l+1} z^l=W-MSA(LN(zl−1))+zl−1,zl=MLP(LN(z^l))+z^l,z^l+1=SW-MSA(LN(zl))+zl,zl+1=MLP(LN(z^l+1))+z^l+1
z ^ l , z ^ l \hat z^l,\hat z^l z^l,z^l分别指的是(S)W-MSA模块和MLP模块第 l l l层的输出。W-MSA和SW-MSA分别表示采用规则和移位窗口划分配置的基于窗口的multi-head self-attention。
移位窗口划分方法引入了前一层中相邻的不重叠窗口之间的连接,在图像分类、目标检测和语义分割方面都很有效,如表4所示。
高效的批量计算移位配置:移位窗口划分的一个问题是,它将导致更多的窗口,从 ⌈ 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 × M M×M。一个简单的解决方案是将较小的窗口填充为 M × M M × M M×M的大小,并在计算注意力时屏蔽填充值。当常规分区中的窗口数量较少时,例如2 × 2,用这种朴素解增加的计算量是相当大的(2 × 2→3 × 3,增加了2.25倍)。在这里,我们提出了一种更高效的批处理计算方法(efficient batch computation approach),即向左上角方向循环移动,如图4所示。在这种转移之后,一个批处理窗口可能由几个在特征图中不相邻的子窗口组成,因此使用掩蔽机制来限制自注意计算在每个子窗口内。使用循环移位,批处理窗口的数量保持与常规窗口分区相同,因此也是有效的。这种方法的低延迟如表5所示。(也可以参考上述博客Swin-Transformer网络结构详解_太阳花的小绿豆的博客-CSDN博客_swin transformer结构)
相对位置偏置:在计算self-attention时,我们遵循先前的工作,在计算相似度时对每个头包含相对位置偏差 B ∈ R M 2 × M 2 B \in \R^{M^2 \times M^2} B∈RM2×M2:
Attention ( Q , K , V ) = SoftMax ( Q K T / d + B ) V \text{Attention}(Q,K,V)=\text{SoftMax}(QK^T/ \sqrt d +B)V Attention(Q,K,V)=SoftMax(QKT/d+B)V
Q , K , V ∈ R M 2 × d Q,K,V \in \R^{M^2 \times d} Q,K,V∈RM2×d是query,key和value指标。 d d d是query/key的维度, M 2 M^2 M2是一个窗口中patch的数量。由于沿各轴的相对位置在 [ − 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)×(2M−1)} B^∈R(2M−1)×(2M−1), B B B中的值取自 B ^ \hat B B^。
我们观察到,与不使用该偏差项或使用绝对位置嵌入的同行相比,有显著的改进,如表4所示。进一步像先前的工作那样在输入中添加绝对位置嵌入会略微降低性能,因此在我们的实现中不采用它。
预训练中学习到的相对位置偏差也可用于初始化模型,通过双三次插值对不同窗口大小进行微调。
我们建立了我们的基础模型,称为Swin-B,它的模型大小和计算复杂度与ViTB/DeiT-B相似。我们还介绍了Swin-T、Swin-S和Swin-L,这三个版本分别是模型大小和计算复杂度的0.25×、0.5×和2×。注意,Swin-T和Swin-S的复杂性分别类似于ResNet-50 (DeiT-S)和ResNet-101。窗口大小默认设置为 M = 7 M = 7 M=7。对于所有实验,每个头的查询维数为 d = 32 d = 32 d=32,每个MLP的扩展层为 α = 4 α = 4 α=4。这些模型变量的体系结构超参数是:
其中 C C C为第一阶段隐藏层的通道号。表1列出了用于ImageNet图像分类的模型变量的模型大小、理论计算复杂度(FLOPs)和吞吐量。
我们对ImageNet-1K图像分类、COCO目标检测和ADE20K语义分割进行了实验。在接下来的文章中,我们首先将所提出的Swin Transformer架构与之前的最先进技术在这三个任务上进行比较。然后,对Swin Transformer的重要设计要素进行了分析。
设置:对于图像分类,我们在ImageNet-1K[19]上对所提出的Swin Transformer进行基准测试,其中包含来自1000个类的1.28M训练图像和50K验证图像。据报道,在单一物品 上的精度最高。我们考虑两种训练设置:
在ImageNet-1K常规训练的结果:表1(a)展示了与其他骨干网络的比较,包括使用常规ImageNet-1K训练的基于Transformer和基于ConvNet的骨干网络。
与之前最先进的基于transformer的架构,即DeiT相比,Swin transformer明显超过了具有类似复杂性的对应DeiT架构:使用 22 4 2 224^2 2242输入的Swin- T(81.3%)比DeiT- S(79.8%) +1.5%,使用 22 4 2 / 38 4 2 224^2/384^2 2242/3842输入的Swin- B(83.3%/84.5%)比DeiT- B(81.8%/83.1%) +1.5%/1.4%。
与最先进的ConvNets相比,即RegNet和EfficientNet, Swin Transformer实现了更好的速度-精度权衡。请注意,虽然RegNet和EfficientNet是通过彻底的体系结构搜索获得的,但所提出的Swin Transformer是从标准Transformer改编而来的,具有进一步改进的强大潜力。
在ImageNet-22K上预训练的结果:我们还在ImageNet-22K上预训练大容量的Swin-B和Swin-L。对ImageNet-1K图像分类进行微调的结果如表1(b)所示。对于Swin-B, ImageNet22K预训练比ImageNet-1K从头训练带来1.8% ~ 1.9%的收益。与之前ImageNet-22K预训练的最佳结果相比,我们的模型实现了显著更好的速度-准确度的平衡:Swin-B获得了86.4%的top-1准确度,这比具有相似推理吞吐量(84.7 vs. 85.9图像/秒)和略低FLOPs (47.0G vs. 55.4G)。较大的Swin-L模型top-1精度达到87.3%,比Swin-B模型更高0.9%。
设置:目标检测和实例分割实验在COCO 2017上进行,其中包含118K训练图像、5K验证图像和20K测试开发(test-dev)图像。使用验证集进行消融研究,并在test-dev中报告系统级比较。对于消融研究,我们考虑了四种典型的目标检测框架:级联掩码(Cascade Mask)R-CNN, ATSS, RepPoints v2和Sparse RCNN在mmdetection框架中。对于这四个框架,我们使用相同的设置:多尺度训练(调整输入的大小,使较短的一侧在480到800之间,而较长的一侧最多为1333),AdamW优化器(初始学习率为0.0001,权重衰减为0.05,batch-size大小为16),以及3 x schedule(36个epoch)。对于系统级的比较,我们采用改进的HTC(记为HTC++),具有instaboost,更强的多尺度训练,6 x schedule(72 epoch), soft-NMS, ImageNet-22K预训练模型作为初始化。
我们对比Swin Transformer和标准的ConvNets(ResNe(x)t等),先前的Transformer结构(DeiT)。在其他设置不变的情况下,仅通过更改主干网络进行比较。请注意,由于Swin Transformer和ResNe(X)t的分层特征映射,它们可以直接应用于上述所有框架,而DeiT只生成单一分辨率的特征映射,不能直接应用。为了公平比较,我们遵循使用deconvolution layer为DeiT构造分层特征图。
对比ResNe(x)t:表2(a)列出了Swin-T和ResNet-50在四种目标检测框架上的结果。与ResNet-50相比,我们的Swin-T架构带来了一致的+3.4 ~ 4.2 box AP增益,模型尺寸、FLOPs和延迟略大。
表2(b)比较了Swin Transformer和ResNe(X)t在不同模型容量下使用Cascade Mask RCNN。Swin Transformer实现了51.9 box AP和45.0 mask AP的高检测精度,与具有相似模型大小、FLOPs和延迟的ResNeXt101-64x4d相比,显著提高了+3.6 boxAP和+3.3 mask AP。在使用改进的HTC框架的52.3 box AP和46.0 mask AP的更高基线上,Swin Transformer的增益也很高,为+4.1 box AP和+3.1 mask AP(见表2©)。在推理速度方面,ResNe(X)t是由高度优化的Cudnn函数构建的,而我们的架构是用内置的PyTorch函数实现的,这些函数并没有得到很好的优化。彻底的内核优化超出了本文的范围。
对比DeiT:使用Cascade Mask R-CNN框架的DeiT-S性能如表2(b)所示。与DeiT-S相比,Swin-T的结果是+2.5 box AP和+2.3 mask AP,模型大小相似(86M vs 80M),推理速度显著提高(15.3 FPS vs 10.4 FPS)。DeiT的推理速度较低主要是由于其对输入图像大小的二次复杂度。
对比先前的SOTA:表2 © 将我们的最佳结果与先前最先进的模型进行了比较。我们的最佳模型在COCO test-dev上实现了58.7 box AP和51.1 mask AP,超过了之前的最佳结果+2.7 box AP(无外部数据的Copy-paste)和+2.6 mask AP (DetectoRS)。
设置:ADE20K是一个广泛使用的语义分割数据集,涵盖150个语义类别。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。我们利用mmseg中的UperNet作为我们的基础框架,以实现其高效率。更多细节见附录。
结果:表3列出了不同方法/骨干对的mIoU、模型大小(#param)、FLOPs和FPS。从这些结果可以看出,在计算成本相似的情况下,Swin-S比DeiT-S高出+5.3 mIoU (49.3 vs. 44.0)。比ResNet-101高+4.4 mIoU,比ResNet-101高+2.4 mIoU。我们使用ImageNet-22K预训练的Swin-L模型在val集上达到了53.5 mIoU,超过了之前最好的模型+3.2 mIoU (SETR的50.3 mIoU具有更大的模型尺寸)。
在本节中,我们使用ImageNet-1K图像分类、COCO对象检测上的 Cascade Mask R-CNN和ADE20K语义分割上的UperNet,去除了所提出的Swin Transformer中的重要设计元素。
移位窗口(shifted window):移位窗口方法在三个任务上的消融情况如表4所示。在ImageNet-1K上,具有移位窗口分区的Swin-T比基于单一窗口分区的Swin-T在每一阶段的top-1精度提高了1.1%,在COCO上提高了2.8 box AP/+2.2 mask AP,在ADE20K上提高了2.8 mIoU。结果表明,使用移位窗口在前一层窗口之间建立连接是有效的。移位窗口的延迟开销也很小,如表5所示。
相对位置偏置:表4显示了不同位置嵌入方法的比较。相对位置偏差的Swin-T在ImageNet-1K上的top-1精度为+1.2%/+0.8%,在COCO数据集上box AP为+1.3/+1.5,掩码AP为+1.1/+1.3,在ADE20K上相对于无位置编码和绝对位置嵌入的分别为+2.3/+2.9 mIoU,说明相对位置编码的有效性。还要注意,虽然包含绝对位置嵌入提高了图像分类精度(+0.4%),但它损害了对象检测和语义分割(COCO上的-0.2 box/mask AP和ADE20K上的-0.6 mIoU)。
虽然最近的ViT/DeiT模型在图像分类中放弃了迁移不变性,尽管它长期以来一直被证明对视觉建模至关重要,但我们发现鼓励一定迁移不变性的inductive bias仍然是通用视觉建模的首选,特别是对于对象检测和语义分割的密集预测任务。
不同的self-attention方法:表5比较了不同自注意计算方法和实现的实际速度。我们的循环实现在硬件上比普通填充更有效率,特别是对于更深层的阶段。总的来说,它在Swin-T、Swin-S和Swin-B上分别带来了13%、18%和18%的加速。
基于所提出的移动窗口方法构建的self-attention模块在4个网络阶段上的效率分别比滑动窗口方法提高了40.8×/2.5×、20.2×/2.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倍。表6比较了他们在三个任务上的准确性,显示他们在视觉建模上的准确性相似。
与Performer相比,它是最快的Transformer架构之一,提出的基于移位窗口的self-attention计算和整体Swin Transformer架构略快(见表5),同时与使用Swin-T的Performer在ImageNet-1K上实现+2.3%的top-1精度(见表6)。
本文提出了一种新的Vision Transformer——Swin Transformer,它可以生成一个层次特征表示,具有与输入图像大小相关的线性计算复杂度。Swin Transformer在COCO目标检测和ADE20K语义分割方面实现了最先进的性能,大大超过了以前的最佳方法。我们希望Swin Transformer在各种视觉问题上的强大表现将鼓励视觉和语言信号的统一建模。
作为Swin Transformer的一个关键元素,基于移位窗口的self-attention被证明在视觉问题上是有效和高效的,我们期待着在自然语言处理中研究它的使用。
详细的体系结构规范如表7所示,其中假设所有体系结构的输入图像大小为224×224。“Concat n × n”表示一个patch中n × n个相邻特征的拼接。该操作将导致特征映射以 n n n的速率进行下采样。“96-d”表示输出维数为96的线性层。“win. sz.7 × 7”表示multi-head self-attention模块,窗口大小为7 × 7。
图像分类是通过在上一阶段的输出特征图上应用全局平均池化层来执行的,然后是线性分类器。我们发现这种策略与使用ViT和DeiT中的附加class token一样准确。在评估中,报告了使用单一种类的top-1个精度。
Regular ImageNet-1K training:对于所有模型变量,我们采用默认的输入图像分辨率 22 4 2 224^2 2242。对于其他分辨率,如 38 4 2 384^2 3842,我们在 22 4 2 224^2 2242分辨率下对训练模型进行微调,而不是从头开始训练,以减少GPU消耗。
当使用 22 4 2 224^2 2242输入从头开始训练时,我们使用AdamW优化器进行300个 epoch,使用余弦衰减学习率调度器进行20个epoch的线性变暖。batch-size大小为1024,初始学习率为0.001,权重衰减为0.05,使用最大范数为1的梯度裁剪。我们在训练中加入了数据增强和正则化策略,包括RandAugment, Mixup , Cutmix,random erasing和stochastic depth,但没有repeated augmentation和Exponential Moving Average(EMA),它们并不能增强性能。注意,,反复增强对于稳定ViT训练至关重要。对于较大的模型,随机深度增强程度增加,即Swin-T, Swin-S和Swin-B分别为0.2,0.3,0.5。
为了在更大分辨率的输入上进行微调,我们使用adamW优化器进行30个epoch,其恒定学习率为10−5,权重衰减为10−8,除了将随机深度比设置为0.1之外,与第一阶段相同的数据增强和正则化。
在ImageNet-22K上进行预训练:我们还在更大的ImageNet-22K数据集上进行了预训练,该数据集包含1420万张图像和22K类。训练分两个阶段进行。对于第一个阶段的 22 4 2 224^2 2242个输入,我们使用一个AdamW优化器90个epoch,使用一个线性衰减学习率调度器和一个5 epoch的linear warm-up。batch-size大小为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K的第二阶段,输入 22 4 2 / 38 4 2 224^2/384^2 2242/3842,我们训练模型30个epoch,batch-size大小为1024,恒定的学习速率为10−5,权重衰减为10−8。
对于消融研究,我们考虑了四种典型的对象检测框架:Cascade Mask R-CNN、ATSS、RepPoints v2和Sparse RCNN,并在mmdetection中进行实验。对于这四个框架,我们使用相同的设置:多尺度训练(调整输入的大小,使较短的一侧在480到800之间,而较长的一侧最多为1333),AdamW优化器(初始学习率为0.0001,权重衰减为0.05,batch-size大小为16),以及3 x scheudle(36个epoch,学习率在第27和第33个周期衰减10倍)。
对于系统级的比较,我们采用了改进的HTC(记为HTC++),带有instaboost,更强的多尺度训练(调整输入大小,短边在400 - 1400之间,长边最多1600),6x schedule(72 epoch,学习率在63和69 epoch衰减0.1倍),softNMS,并在最后阶段附加了一个额外的全局self-attention的输出和预训练ImageNet-22K模型作为初始化。对于所有的Swin Transformer模型,我们采用比率为0.2的随机深度。
ADE20K[83]是一个广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。我们利用mmsegmentation中的UperNet作为我们的基础框架,以实现其高效率。
在训练中,我们使用初始学习率为6 ×10−5,权重衰减为0.01的AdamW优化器,使用线性学习率衰减的调度器,并进行1500次迭代的line warm-up。模型在8个GPU上训练,每个GPU 2张图像,进行160K迭代。对于增强,我们在语义分割中采用默认设置的随机水平翻转,在比率范围[0.5,2.0]内随机重新缩放和随机光度失真。所有的Swin Transformer模型都采用了比为0.2的随机深度(stochastic depth)。Swin-T, Swin-S与前面的方法一样在标准设置上进行训练,输入512×512。带有 ‡ ‡ ‡的Swin-B和Swin-L表示这两个模型在ImageNet-22K上进行了预训练,并在640×640的输入下进行了训练。
在推理中,使用分辨率为训练分辨率的[0.5,0.75,1.0,1.25,1.5,1.75]×的多尺度测试。在报告测试集分数时,训练图像和验证图像都用于训练,遵循常见的做法。
表8列出了输入图像大小从 22 4 2 224^2 2242到 38 4 2 384^2 3842时Swin Transformer的性能。一般来说,输入分辨率越大,top-1精度越高,但推理速度越慢。
表9比较了ResNe(X)t骨干在COCO对象检测上的AdamW和SGD优化器。Cascade Mask R-CNN框架用于比较。虽然SGD被用作Cascade Mask R-CNN框架的默认优化器,但我们通常通过将其替换为AdamW优化器来提高精度,特别是对于较小的主干。因此,与提出的Swin Transformer架构相比,我们使用AdamW作为ResNe(X)t骨干。
我们将提出的分层设计和移位窗口方法应用于MLP-Mixer体系结构,称为Swin-Mixer。表10显示了Swin-Mixer与原始MLPMixer架构MLP-Mixer和后续版本方法相比的效果。Swin-Mixer的性能明显优于MLP-Mixer (81.3% vs. 76.4%),计算预算略小(10.4G vs. 12.7G)。与ResMLP相比,它也有更好的速度精度权衡。这些结果表明所提出的分层设计(hierarchical design)和移位窗口(shifted window)方法是可推广的。
推荐看一下这个博主的详细理解博客,Swin-Transformer网络结构详解_太阳花的小绿豆的博客-CSDN博客_swin transformer结构,个人感觉还是非常有帮助,但是也建议全面看一下本文翻译,或者原文阅读,掌握更多细节。