Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

摘要

本文介绍了一种新的Vision Transformer,称为Swin Transformer,它可以作为计算机视觉的通用主干。将Transformer从语言转换为视觉的挑战来自于这两个领域之间的差异,例如视觉实体规模的巨大变化以及与文本中的文字相比,图像中像素的高分辨率。为了解决这些差异,我们提出了一个分层的Transformer,它的表示是通过移位窗口计算的。移窗方案通过将自注意计算限制在不重叠的局部窗口,同时允许跨窗口连接,从而提高了计算效率。这种层次结构具有在不同尺度上建模的灵活性,并具有相对于图像大小的线性计算复杂度。Swin Transformer的这些特性使它能够兼容广泛的视觉任务,包括图像分类(ImageNet-1K上87.3 top-1的精度)和密集的预测任务,如对象检测(COCO测试dev上58.7 box AP和51.1 mask AP)和语义分割(ADE20K val上53.5 mIoU)。它的性能大大超过了之前的先进水平,在COCO上+2.7 boxAP和+2.6maskAP,在ADE20K上+3.2 mIoU,展示了基于transformer的模型作为视觉骨干的潜力。分层设计和移动窗口方法也证明对所有的mlp架构是有益的。源码:GitHub - microsoft/Swin-Transformer: This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows".

1.简介

计算机视觉建模长期以来一直由卷积神经网络(cnn)主导。从AlexNet[39]和它在ImageNet图像分类挑战上的革命性性能开始,CNN架构通过更大的规模[30,76]、更广泛的连接[34]和更复杂的卷积形式[70,18,84]而变得越来越强大。随着cnn充当各种视觉任务的骨干网络,这些架构上的进步导致了性能的改进,从而大大提升了整个领域。

另一方面,自然语言处理(NLP)中的网络体系结构的演变走上了一条不同的道路,目前流行的体系结构是Transformer[64]。Transformer是为序列建模和转换任务而设计的,其引人注目的地方在于它对数据中长期依赖关系建模的关注。它在语言领域的巨大成功促使研究人员开始研究它对计算机视觉的适应能力,最近在某些任务上显示出了很有希望的结果,特别是图像分类[20]和视觉-语言联合建模[47]。

在本文中,我们试图扩大Transformer的适用性,使其能够作为计算机视觉的通用主干,就像它在NLP和视觉中的cnn所做的那样。我们观察到,将语言域的高性能转移到视觉域的重大挑战可以用两种模式的差异来解释。

差异之一是规模。与语言transformer中作为基本处理元素的单词符号不同,视觉元素可以在规模上有很大的变化,这是一个在对象检测等任务中需要注意的问题[42,53,54]。在现有的基于transformer的模型中[64,20],令牌都是固定比例的,这一属性不适合这些视觉应用程序。另一个区别是,图像的像素分辨率比文字段落中的文字高得多。目前存在许多视觉任务,如语义分割,需要在像素级进行密集预测,而这对于Transformer在高分辨率图像上是难以实现的,因为其自注意的计算复杂度是图像大小的二次方。为了克服这些问题,我们提出了一个通用的Transformer主干,称为Swin Transformer,它构建分层特征映射,计算复杂度与图像大小成线性关系。如图1(a)所示,Swin Transformer构建了一个分层表示,从较小的补丁(用灰色表示)开始,逐渐将相邻的补丁合并到更深的Transformer层中。通过这些分层特征映射,Swin Transformer模型可以方便地利用高级技术进行密集预测,如特征金字塔网络(FPN)[42]或U-Net[51]。线性计算复杂度是通过在划分图像(用红色表示)的非重叠窗口中局部计算自我注意来实现的。由于每个窗口中的patch数量是固定的,因此复杂度与图像大小成线性关系。这些优点使Swin Transformer适合作为各种视觉任务的通用骨干,而不像以前的基于Transformer的架构[20],后者生成单一分辨率的特征图,复杂度为二次型。

图1。(a)所提出的Swin Transformer通过在更深的层中合并图像块(灰色部分)来构建分层特征映射,并且由于只在每个本地窗口中计算自注意,因此对输入图像大小具有线性计算复杂度(红色部分)。因此,它可以作为图像分类和密集识别任务的通用骨干。(b)相比之下,以往的视觉transformer[20]产生的是单一的低分辨率特征图,由于全局自注意计算,输入图像尺寸的计算复杂度为二次。

Swin Transformer的一个关键设计元素是在连续的自注意层之间移动窗口分区,如图2所示。移位的窗口桥接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力(见表4)。这种策略对于真实世界的延迟也是有效的:一个窗口内的所有查询补丁共享相同的键set1,这有利于硬件中的内存访问。相比之下,早期基于滑动窗口的自注意方法[33,50]在一般硬件上的延迟较低,因为不同的查询像素对应不同的键集2。我们的实验表明,所提出的移窗方法比滑动窗方法有更低的延迟,但在建模能力方面类似(见表5和6)。移窗方法也证明对全mlp架构是有益的[61]。

图2,说明了在提出的Swin Transformer架构中,用于计算自注意力的移动窗口方法。在l层(左)中,采用规则的窗口划分方案,在每个窗口内计算自注意力权重。在下一层l + 1(右)中,窗口分区被移位,产生了新的窗口。新窗口的自注意力计算跨越了之前l层窗口的边界,提供了不同窗口之间的连接。

所提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上都取得了较好的性能。在三个任务的延迟相似的情况下,它显著优于ViT / DeiT[20,63]和ResNe(X)t模型[30,70]。它在COCO测试开发集上的58.7 box AP和51.1 mask 比先前最先进的结果提升了2.7AP(Copy-paste[26],不需要外部数据)和提升2.6 mask AP(DetectoRS[46])。在ADE20K语义分词上,在val集上得到53.5 mIoU,比之前的最先进的(SETR[81])提高了3.2 mIoU。在ImageNet-1K图像分类中,准确率最高达87.3%。

我们相信,一个跨越计算机视觉和自然语言处理的统一架构可以使这两个领域受益,因为它将促进视觉和文本信号的联合建模,并且两个领域的建模知识可以更深入地共享。我们希望Swin Transformer在各种视觉问题上的出色表现能够在社区中推动这种信念的深入,并鼓励视觉和语言信号的统一建模。

2.相关工作

2.1CNN及其变体

CNN作为计算机视觉的标准网络模型。虽然CNN已经存在了几十年[40],但直到AlexNet[39]的引入,CNN才起飞并成为主流。此后,人们提出了更深入、更有效的卷积神经体系结构,以进一步推进计算机视觉中的深度学习浪潮,如VGG[52]、GoogleNet[57]、ResNet[30]、DenseNet[34]、HRNet[65]和EfficientNet[58]。除了这些结构上的进步,也有很多工作在改进单独的卷积层,如深度卷积[70]和可变形卷积[18,84]。虽然CNN及其变体仍然是计算机视觉应用程序的主要骨干架构,但我们强调了类似transformer的架构在视觉和语言之间统一建模方面的强大潜力。我们的工作在几个基本的视觉识别任务上取得了良好的表现,我们希望它将有助于模型的转变。

2.2基于自注意力机制的骨干架构

受到NLP领域中自注意力层和Transformer架构成功的启发,一些作品使用自注意力层来替代流行的ResNet中的部分或全部空间卷积层[33,50,80]。在这些工作中,在每个像素的本地窗口中计算自我关注,以加速[33]的优化,它们比对应的ResNet架构实现了更好的精度/FLOPs权衡。然而,它们昂贵的内存访问导致其实际延迟明显大于卷积网络[33]。我们建议在连续的层之间移动窗口,而不是使用滑动窗口,这允许在一般硬件中更有效的实现。

2.3通过自注意力机制/Transformer去增强CNNs

另一项工作是用自我注意层或transformer来增强标准的CNN架构。自注意层可以补充骨干网络[67,7,3,71,23,74,55]或头网络[32,27],提供编码远程依赖或异构交互的能力。最近,Transformer中的编码器-解码器设计已经被应用于对象检测和实例分割任务[8,13,85,56]。我们的工作探索了transformer对基本视觉特征提取的适应,作为这些工作的补充。

2.4基于Transformer的视觉骨干架构

与我们的工作最相关的是Vision Transformer (ViT)[20]及其后续版本[63,72,15,28,66]。ViT的开创性工作直接将Transformer架构应用于非重叠中等大小的图像块进行图像分类。与卷积网络相比,它在图像分类方面实现了令人印象深刻的速度和精度之间的权衡。虽然ViT需要大规模的训练数据集(即JFT-300M)才能很好地执行,但DeiT[63]引入了几种训练策略,使ViT也能够有效地使用较小的ImageNet-1K数据集。ViT在图像分类方面的研究结果令人鼓舞,但由于其特征映射的分辨率较低,且复杂性随图像大小的二次增加,因此其结构不适合用于密集视觉任务或输入图像分辨率较高时的通用主干网络。也有一些研究将ViT模型直接上采样或反卷积的方法应用于密集视觉任务的目标检测和语义分割,但性能相对较低[2,81]。与我们的工作同时进行的还有一些修改ViT架构的工作[72,15,28],以实现更好的图像分类。根据经验,我们发现我们的Swin Transformer架构在这些图像分类方法中实现了最佳的速度和精度之间的权衡,尽管我们的工作重点是通用性能,而不是具体的分类。另一项同时进行的工作[66]探索了类似的思路,即在Transformer上构建多分辨率特征图。它的复杂性仍然是图像大小的二次方,而我们的是线性的,并且也进行局部运算,这在建模视觉信号的高相关性方面被证明是有益的[36,25,41]。我们的方法既高效又有效,在COCO对象检测和ADE20K语义分割上都实现了最先进的准确性。

3.方法

3.1整体架构

图3展示了Swin Transformer体系结构的概述,它演示了小型版本(SwinT)。它首先通过一个patch分割模块(如ViT)将输入的RGB图像分割成非重叠的patch。每个patch都被视为一个“标记”,其特征被设置为原始像素RGB值的串联。在我们的实现中,我们使用的patch大小为4×4,因此每个patch的特征维数为4×4 × 3 = 48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维度(记作C)。

在这些patch上应用了几个改进的自注意计算的Transformer块(Swin Transformer块),每个patch看作是一个token,Transformer块拥有(H/4 × W/ 4)个token数量,与线性嵌入一起被称为“阶段1”。

为了生成层次表示,随着网络的加深,通过patch合并层(patch merging layers)减少token的数量。第一个patch合并层将每组的2 × 2相邻的patch的特征进行拼接(每组有4个patch),并对拼接后的4C维特征(C 是每个原始 patch 的特征维度)应用线性层。这将token的数量减少了2×2 = 4 (2×分辨率下采样)的倍数,输出维度设置为2C。然后使用Swin Transformer块进行特征变换,分辨率保持在h/8 × w/8。这个patch合并和特征转换的第一个块记为“阶段2”。该过程重复两次,分别为“阶段3”和“阶段4”,输出分辨率分别为h/16 × w/16和h/32 × w/32。这些阶段共同产生层次表示,具有与典型卷积网络(如VGG[52]和ResNet[30])相同的特征图分辨率。因此,该体系结构可以方便地替代现有的各种视觉任务的骨干网。

Swin Transformer 块

Swin Transformer是通过将Transformer块中的标准多头自注意力(MSA)模块替换为基于移位窗口的模块(见章节3.2)来构建的,其他层保持不变。如图3(b)所示,Swin Transformer块包括一个基于移动窗口的MSA模块,其次是具有GELU非线性的两层MLP。在每个MSA模块和每个MLP之前应用一个LayerNorm (LN)层,在每个模块之后应用一个残差连接。

3.2基于移动窗口的自注意力机制

标准的Transformer体系结构[64]及其通过全局自注意力自适应对图像分类[20],计算一个token与其他所有token之间的关系。全局计算导致了token数量的二次复杂度,这使得它不适用于许多需要大量token进行密集预测或表示高分辨率图像的视觉问题。

非重叠窗口中的自注意力机制

为了高效建模,我们提出在局部窗口内计算自注意权重。通过排列窗口,以不重叠的方式均匀地分割图像。假设每个窗口包含M×M patches,全局MSA模块和基于h ×w patches图像的窗口的计算复杂度为:

\begin{aligned}\Omega(\text{MSA})&=4hwC^2+2(hw)^2C,\quad&(1)\\\Omega(\text{W-MSA})&=4hwC^2+2M^2hwC,\quad&(2)\end{aligned}

其中前者是patch大小为hw的平方,后者在M固定时(默认为7)是线性的。全局自注意力计算对于大型硬件系统来说通常是负担不起的,而基于窗口的自注意是可伸缩的。

使用移动窗口划分连续的块

基于窗口的自我注意模块缺乏跨窗口的连接,这限制了它的建模能力。为了引入跨窗口连接,同时保持非重叠窗口的高效计算,我们提出了一种移位窗口划分方法,它在连续的Swin Transformer块中的两中模块之间交替(W-MSA和SW-MSA交替先后使用)。

如图2所示,第一个模块采用规则的窗口划分策略,从左上角的像素开始,将8 × 8的feature map均匀划分为大小为4 × 4的2 × 2个窗口(M = 4),然后下一个模块采用从上一层的布局再进行移动窗口划分,通过分别向下和向右将窗口移动个(\lfloor\frac{M}{2}\rfloor,\lfloor\frac{M}{2}\rfloor)像素重新划分。

采用移动窗口划分方法,连续的Swin Transformer块计算为:

\begin{aligned} & \hat{\mathbf{z}}^l=\mathrm{W-MSA}\left(\mathrm{LN}\left(\mathbf{z}^{l-1}\right)\right)+\mathbf{z}^{l-1}, &  \\  & \mathbf{z}^l=\mathrm{MLP}\left(\mathrm{LN}\left(\hat{\mathbf{z}}^l\right)\right)+\hat{\mathbf{z}}^l, &  \\  & \hat{\mathbf{z}}^{l+1}=\mathrm{SW-MSA}\left(\mathrm{LN}\left(\mathbf{z}^l\right)\right)+\mathbf{z}^l, &  \\  & \mathbf{z}^{l+1}=\mathrm{MLP}\left(\mathrm{LN}\left(\hat{\mathbf{z}}^{l+1}\right)\right)+\hat{\mathbf{z}}^{l+1}, & \left(3\right)\end{aligned}

式中,\hat{z}^{l}{z}^{l}分别表示块l的(S)WMSA模块和MLP模块的输出特征;W-MSA和SW-MSA分别表示使用基于规则和移动窗口的多头自注意力机制。

移动窗口划分方法引入了上一层相邻无重叠窗口之间的连接,发现该方法在图像分类、目标检测和语义分割方面是有效的,如表4所示。

移动窗口划分会产生更多窗口,从\lceil\frac{h}{M}\rceil\times\lceil\frac{w}{M}\rceil(\lceil\frac{h}{M}\rceil+1)\times(\lceil\frac{w}{M}\rceil+1),其中一些窗口会小于M×M。一个简单的解决方案是将较小的窗口填充到M × M的大小,并在计算注意力时屏蔽填充值。当规则分区中的窗口数较小时,如2 × 2时,这种常规解增加的计算量相当大(2 × 2→3 × 3,是原来的2.25倍)。在这里,我们提出了一种更有效的批处理计算方法,即向左上角方向循环移动,如图4所示。在此移动之后,一个批处理窗口可能由几个在feature map中不相邻的子窗口组成,因此采用掩蔽机制将自注意计算限制在每个子窗口内。通过循环移位,批处理窗口的数量与常规窗口划分的数量保持一致,因此也是高效的。这种方法的低延迟如表5所示。

循环移位(cyclic shift,向左上角方向循环移动):

首先,对Shift Window后的每个窗口都给上index

①.将第一行0,1,2移到最下方

②.将移完的第一列3,6,0移动到最右方

组成4个2×2的窗口

对每个窗口设置mask:

我们希望在计算Attention的时候,让具有相同index QK进行计算,而忽略不同index QK计算结果,从而能够将循环移位后的窗口移回原位

最后正确的结果如下图所示 :

而要想在原始四个窗口下得到正确的结果,我们就必须给Attention的结果加入一个mask(如上图最右边所示,只有相同index进行点积运算的结果才不用mask)

通过移动窗口(shifted window)获取不同窗口之间的信息,通过循环移位(cyclic shift)减少计算量,通过mask保证让相同index的Q,K进行计算,以便后续将循环移位的窗口移回原位。

引用于:图解Swin Transformer - 知乎 (zhihu.com)

相对位置偏置

在计算自注意时,我们遵循[49,1,32,33]的方法,将相对位置偏置B\in\mathbb{R}^{M^2\times M^2}引入相似度计算中:

\text{Attention}(Q,K,V)=\text{SoftMax}(QK^T/\sqrt{d}+B)V,\quad(4)

B代表与当前patch的相对位置的远近关系,若B较大则意味着相对位置更接近,公式中加上较大的B,计算得到的相似度也会更高。

其中Q、K、V\in\mathbb{R}^{M^2\times d}分别是查询矩阵、键矩阵和值矩阵;d为查询矩阵/键矩阵的维数,M^{2}为一个窗口内patch的数量。由于每个窗口内patch的相对位置在[−M+1,M−1]范围内,我们参数化了一个大小较小的相对位置偏置矩阵\widehat{B}\in R^{(2M-1)\times(2M-1)},公式中B值取自\widehat{B}

绝对位置编码是在进行self-attention计算之前为每一个token添加一个可学习的参数,相对位置编码如上式所示,是在进行self-attention计算时,在计算过程中添加一个可学习的相对位置参数B。

假设window_size = 2*2即每个窗口有4个patch (M=2) ,在计算self-attention时,窗口内每个patch都要与窗口内所有的patch分别计算Q,K值,如图6所示,当位置1的patch计算self-attention时,要计算与位置1、2、3、4的QK值,即以位置1的batch为中心点,中心点位置坐标(0,0),其他位置计算与当前位置坐标的偏移量。

图6最后生成的是相对位置索引矩阵,相对位置索引矩阵的大小为M^{2}\times M^{2},在网络中注册成为一个不可学习的变量,相对位置索引矩阵的作用就是根据最终的索引值找到对应的可学习的相对位置编码。相对位置索引的数值范围(0~8),即 (2M−1)×(2M−1) ,所以相对位置偏置表的长度为(2M−1)×(2M−1),相对位置偏置表的值是是可训练的,随着训练过程,其内部的数值是不断优化更新的,根据相对位置偏置表的索引值和对应的数值得到相对位置偏置矩阵,公式中的B则取自相对位置偏置矩阵中。

(以上两图取自不同文章,故的相对位置编码不一致)

总体流程:

引用于:Swin Transformer 论文详解及程序解读 - 知乎 (zhihu.com)

              Swin Transformer之相对位置编码详解 (zhihu.com)

我们观察到,与没有这个相对位置偏置值或使用绝对位置嵌入的对照相比,有显著的改善,如表4所示。像[20]中那样,进一步向输入中添加绝对位置嵌入会略微降低性能,因此在我们的实现中没有采用它。

在训练前学习到的相对位置偏差也可以通过Bicubic interpolation(双三次插值)来初始化不同窗口大小的微调模型[20,63]。

双三次插值:

假设源图像A大小为m*n,缩放K倍后的目标图像B的大小为M*N,即K=M/m。A的每一个像素点是已知的,B是未知的,我们想要求出目标图像B中每一像素点(X,Y)的值,必须先找出像素(X,Y)在源图像A中对应的像素(x,y),再根据源图像A距离像素(x,y)最近的16个像素点作为计算目标图像B(X,Y)处像素值的参数,利用BiCubic基函数求出16个像素点的权重,图B像素(x,y)的值就等于16个像素点的加权叠加。

引用于:双三次插值(BiCubic插值)-CSDN博客

3.3结构变体

我们构建了称为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。所有实验中,每个头部的查询维数为d = 32,每个MLP的扩展层数为α = 4。这些模型变量的结构超参数为:

\text{Swin-T:}C=96,\text{layer numbers}=\{2,2,6,2\}

\text{Swin-S:}C=96,\text{layer numbers}=\{2,2,18,2\}

\text{Swin-B:}C=128,\text{layer numbers}=\{2,2,18,2\}

\text{Swin-L:}C=192,\text{layer numbers}=\{2,2,18,2\}

式中C为第一阶段隐藏层的通道数。ImageNet图像分类的模型尺寸、理论计算复杂度(FLOPs)和模型变量的吞吐量如表1所示。

4.实验

我们对ImageNet-1K图像分类[19]、COCO对象检测[43]和ADE20K语义分割进行了实验[83]。在接下来的文章中,我们首先将提议的Swin Transformer架构与之前的三个任务进行比较。然后,对Swin Transformer的重要设计元素进行了分析。

4.1在ImageNet-1K上的图像分类

配置

对于图像分类,我们在ImageNet-1K[19]上对提出的Swin Transformer进行了基准测试,其中包含了来自1000个类的1.28M训练图像和50K验证图像。对单一作物的准确度排名第一。我们考虑两种训练设置:

·ImageNet-1K常规训练。这个设置主要遵循[60]。我们使用一个AdamW[36]优化器,用于使用余弦衰减学习速率调度程序的300个epoch和20个epoch的线性预热周期。banchsize为1024,初始学习率为0.001,权重衰减为0.05。我们包括了训练中[60]的大部分增强和正规化策略,除了重复增强[30]和EMA[44],它们不能增强效果。注意,这与[60]相反,[60]中反复增强是稳定ViT训练的关键。

学习率预热(linear warmup)

由于刚开始训练时,模型的权重(weights)是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoch或者一些step内学习率较小(在预热的epoch阶段,学习率逐渐增大,即从一个很小的值增加到一个设定的较大的值),在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择人工预先设置的学习率进行训练(若使用余弦衰减学习速率调度程序,则在预热学习率的epoch之后逐步减小学习率),使得模型收敛速度变得更快,模型效果更佳。

较小的学习率有助于在初始阶段更平滑地搜索优化空间,使得模型更容易找到合适的初始状态。

"优化空间"指的是神经网络训练过程中,模型参数可能的取值组合所构成的高维空间。

·ImageNet-22K预训练,ImageNet-1K微调。我们还在更大的ImageNet-22K数据集上进行预训练,该数据集包含1420万张图像和22K类。我们使用一个AdamW优化器为90个epoch使用一个线性衰减学习速率调度与5个epoch的线性预热学习率。使用的batch size为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K微调中,我们训练了30个epoch的模型,batch size为1024,学习速率为0.00001,权重衰减为0.00000001。

ImageNet-1K常规训练的结果

表1(a)展示了使用ImageNet-1K常规训练与其他骨干的比较,包括基于transformer和基于ConvNet的骨干。

与之前最先进的基于transformer的架构(即DeiT[60])相比,Swin transformer明显超过了与之对应的DeiT架构,具有类似的复杂性:使用224*224 /384*384输入时,swi - T(81.3%)比DeiT-S (79.8%) 提高1.5%, swi - B(83.3%/84.2%)比DeiT-B(81.8%/83.1%)分别增加1.5%/1.1%。

与最先进的ConvNets,即RegNet[47]和EfficientNet[57]相比,Swin-Transformer实现了稍微更好的速度-精度权衡。需要注意的是,虽然RegNet[47]和EfficientNet[57]是通过完善的架构搜索获得的,但提出的Swin-Transformer是根据标准Transformer改编的,具有进一步改进的强大潜力。

ImageNet-22K预训练的结果

我们还在ImageNet- 22K上预训练大容量的swan - B和swan - L。对ImageNet-1K图像分类进行微调的结果如表1(b)所示。对于Swin- B, ImageNet- 22K预训练比ImageNet- 1k常规训练带来1.8% 1.9%的收益。与ImageNet-22K预训练的最佳结果相比,我们的模型实现了明显更好的速度-精度平衡:swin - B获得了86.0% top-1的精度,比具有相似推断吞吐量的ViT (84.7 vs. 85.9 images/sec)高2.0%,FLOPs略低(47.0G vs. 55.4G)。较大的Swin-L模型top-1准确率达到86.4%,略优于Swin-B模型。

4.2基于COCO的目标检测

配置

在COCO 2017上进行目标检测和实例分割实验,包含118K训练、5K验证和20K测试开发图像。使用验证集执行消融研究,并在test-dev上报告系统级比较。对于消融研究,我们考虑四种典型的目标检测框架: Cascade Mask R-CNN [28, 5], ATSS [76],RepPoints v2 [11], and Sparse RCNN [55] in mmdetection [9].对于这四个框架,我们使用相同的设置:多尺度训练[7,55](调整输入,短边是在480和800之间,而长边最多1333),AdamW[43]优化器(最初的学习速率为0.0001,权重衰减为0.05,批量大小16),和3x schedule (36 epochs)。在系统级比较方面,我们采用改进的HTC[8](记为HTC++),具有instaboost[21]、更强的多尺度训练[6]、6x schedule (72 epoch)、soft-NMS[4]、ImageNet-22K预训练模型。

"3x schedule (36 epochs)" 表示学习率调度的一种设定,其中学习率将在整个训练过程中进行三次调整,总共训练 36 个 epochs。在这 36 个 epochs 中,学习率将会在三个不同的时间点进行调整。通常这样的调度策略是为了在训练过程中逐渐降低学习率,以使模型更好地收敛到最优解。学习率的调整可能采用不同的方式,比如线性衰减、指数衰减等。

我们将Swin Transformer与标准的ConvNets(即ResNe(X)t)和以前的Transformer网络(如DeiT)进行比较。通过只改变主干而其他设置不变来进行的比较。请注意,由于Swin Transformer和ResNe(X)t的分层特征图,它们直接适用于上述所有框架,而DeiT只产生单一分辨率的特征图,不能直接应用。为了公平比较,我们参照[78]使用反卷积构建DeiT的分层特征图。

使用反卷积构建DeiT的分层特征图(个人理解)

通过反卷积的不同上采样操作将DeiT单一分辨率的特征图采样到多个分辨率,将得到的多个分辨率的特征图统一称为分层特征图。

和ResNe(X)t比较

表2(a)列出了Swin-T和ResNet-50对四种对象检测框架的检测结果。与ResNet-50相比,我们的swwin - T架构带来了一致的提高3.4~4.2 box AP增益,模型尺寸略大,FLOPs和延迟稍大。

表2(b)使用Cascade Mask RCNN对Swin Transformer和ResNe(X)t在不同模型容量下的比较。Swin Transformer实现了51.9 box AP和45.0 mask AP的高检测精度,在ResNeXt101- 64x4d上实现了3.6 box AP和3.3 mask AP的显著增益,具有相似的模型大小、FLOPs和延迟。在使用改进的HTC框架的52.3 box AP和46.0 mask AP的更高基线上,Swin Transformer的增益也很高,分别提高了4.1 box AP和3.1 mask AP(见表2(c))。关于推理速度,虽然ResNe(X)t是由高度优化的Cudnn函数构建的,但我们的架构是由内置的PyTorch函数实现的,这些函数并没有得到很好的优化。完善的内核优化超出了本文的范围。

和DeiT比较

使用级联掩码R-CNN框架的DeiT-S性能如表2(b)所示。与模型尺寸相近的DeiT-S相比,Swin-T的 box AP和 mask AP分别增加2.5 box AP和2.3 mask AP,推理速度为15.3 FPS和10.4 FPS。DeiT推理速度较低的主要原因主要在于它是输入图像大小的二次复杂度。

和以前最先进的技术相比

表2(c)将我们的最佳结果与以前最先进的模型进行了比较。我们的最佳模型在COCO test-dev上实现了58.7 box AP和51.1mak AP,超过了之前的最佳结果约2.7 box AP(Copy-paste[25],没有外部数据)和2.6 mask AP(检测器[45])。

4.3基于ADE20K的语义分割

配置

ADE20K[83]是一个应用广泛的语义分词数据集,涵盖了150个语义类。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。我们利用mmseg[16]中的UperNet[69]作为我们高效的基础框架。更多细节见附录。

结果

表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[75]。我们使用ImageNet-22K预训练的swi - L模型在val集合(验证集,Validation Set)上达到53.5 mIoU,比之前的最佳模型高出了3.2 mIoU (setrer[78]模型尺寸更大,达到50.3 mIoU)。

在语义分割中,模型需要为图像中的每个像素分配一个语义标签,从而将图像划分成不同的语义区域。Intersection over Union (IoU) 是一个衡量预测区域与真实区域重叠程度的指标,定义为预测区域与真实区域交集面积除以它们的并集面积。

4.4消融实验

在本节中,我们去掉了Swin Transformer中重要的设计元素,使用ImageNet-1K图像分类,Cascade Mask R-CNN用于COCO目标检测,UperNet用于ADE20K语义分割。

移动窗口

表4报告了在三个任务上移位窗口方法的消融情况。在ImageNet-1K上增加了1.1% ,达到top-1精度,在COCO上增加了2.8 box AP/2.2 mask AP,在ADE20K上提高了2.8 mIoU。结果表明,利用移位窗口建立前一层窗口之间的连接是有效的。移位窗口的延迟开销也很小,如表5所示。

相对位置偏置值

表4显示了不同位置嵌入方法的比较。相对于没有位置编码和有绝对位置嵌入的swin-T,相对位置偏移的swin        -T在ImageNet-1K上的top-1精度提高了1.2%/0.8%,在COCO上的增加1.3/1.5 box AP和1.1/1.3 mask AP和在ADE20K上的提高2.3/2.9 mIoU,表明相对位置偏移是有效的。另外需要注意的是,虽然包含绝对位置嵌入提高了图像分类精度(增加0.4%),但它损害了目标检测和语义分割(COCO上减少0.2 box/mask AP, ADE20K上减少0.6 mIoU)。

虽然最近的ViT/DeiT模型放弃了图像分类中的平移不变性,尽管它长期以来被证明对视觉建模至关重要,但我们发现,鼓励某些平移不变性的归纳偏差在通用视觉建模中仍然是可取的。特别是对于目标检测和语义分割等密集的预测任务。

不同的自注意力计算方法

表5比较了不同的自注意计算方法和实现的实际速度。我们的循环移位比单纯的填充在硬件上更有效率,特别是对于更深层次的阶段。总的来说,它使swin-T、swin-S和swin-B的速度分别提高了13%、18%和18%。

在四个网络阶段,基于移位窗口方法构建的自注意模块比朴素/内核实现的滑动窗口分别提高了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比较了它们在三个任务上的准确性,表明它们在可视化建模方面同样准确。

与最快的Transformer架构之一Performer[13](见[59])相比,所提议的基于移位窗口的自注意计算和整体Swin Transformer架构略快(见表5),同时使用Swin - T在ImageNet-1K上实现了提高2.3%的top-1精度(见表6)。

5.总结

本文提出了一种新的视觉Transformer,Swin Transformer,它产生了一种分层的特征表示,并且相对于输入图像大小具有线性计算复杂度。Swin Transformer在COCO目标检测和ADE20K语义分割方面取得了最先进的性能,显著超过了以往的最佳方法。我们希望Swin Transformer在各种视觉问题上的强大表现将鼓励视觉和语言信号的统一建模。

基于移动窗口的自注意力机制作为Swin Transformer的关键元素,在视觉问题上有效且实用,我们也期待着研究它在自然语言处理中的应用。

A1.详细架构

详细的体系结构规范如表7所示,其中假定所有体系结构的输入图像大小为224×224。“Concat n × n”表示在一个patch中将n × n个相邻的feature串联起来。该操作的结果是特征图以n的速率下采样。“96-d”表示输出维数为96的线性层。"win.sz.7 × 7”表示窗口大小为7 × 7的多头自注意模块。

A2.详细的实验设置

A2.1ImageNet-1K的图像分类

图像分类是在最后一阶段的输出特征图上应用全局平均池化层,然后使用线性分类器进行分类。我们发现这种策略与使用ViT[19]和DeiT[60]中的额外增加的Class Token一样准确。在评价中,报告了使用单一成果的最高精度。

ImageNet-1K的常规训练

训练设置主要遵循[60]。对于所有模型变体,我们采用默认输入图像分辨率为224*224。对于其他分辨率,如384*384,我们微调训练在224*224分辨率的模型,而不是从头开始训练,以减少GPU消耗。

当使用224*224输入从头开始训练时,我们使用一个AdamW[36]优化器用于300个epoch,并使用一个余弦衰减学习率调度器和20个epoch的线性学习率预热。使用的batch size为1024,初始学习率为0.001,权重衰减为0.05,最大范数为1的梯度剪切。我们在训练中包含了[60]的大部分增强和正则化策略,包括RandAugment[16]、Mixup[74]、Cutmix[72]、随机擦除[79]和随机深度[34],但没有重复增强[30]和指数移动平均(EMA)[44],它们不能增强性能。注意,这与[60]的观点相反,[60]认为反复增强是稳定ViT训练的关键。对于较大的模型,采用比例分别为0.2、0.3、0.5的随机深度增大程度(在正常的模型结构中添加额外的层或块),分别得到Swin - T、Swin - T和Swin - B。

梯度的范数,又称为梯度的长度,是指梯度向量中所有元素的平方和的平方根。在数学上,给定一个向量 g,其梯度的范数表示为∥g∥。对于一个具有 n 个参数的神经网络,梯度向量可以表示为g=[g1​,g2​,…,gn​],其中每个 gi​ 是相应参数的梯度。那么,梯度的范数定义如下:

\begin{equation}\|\mathbf{g}\|=\sqrt{g_1^2+g_2^2+\ldots+g_n^2}\end{equation}

对于输入更大分辨率的微调,我们采用一个adamW[36]优化器迭代30次epoch,学习率恒定为0.00001,权重衰减(在训练神经网络时用于控制模型参数的大小)为0.00000001,除了将随机深度比设置为0.1外,数据扩充和正则化与第一阶段相同。

ImageNet-22K的预训练

我们还在更大的ImageNet-22K数据集上进行预训练,该数据集包含1420万张图像和22K类。训练分两个阶段进行。对于具有224*224输入的第一阶段,我们使用了一个用于90个epoch的AdamW优化器,该优化器使用5个epoch用于线性预热,在后续epoch使用线性衰减学习率调度程序。使用batch size为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K fine - tuning的第二阶段,使用224*224 /384*384输入,我们训练模型为30个epoch,batch size为1024,学习率为0.00001,权重衰减为0.00000001。

A2.2 COCO的目标检测

在消融研究中,我们考虑了四种典型的目标检测框架:Cascade Mask R-CNN[28, 5]、ATSS[76]、RepPoints v2[11]和mmdetection[9]中的Sparse RCNN[55]。对于这四个框架,我们使用相同的设置:多尺度训练[7,55](调整输入,短边是在480和800之间,长边最多1333),AdamW[43]优化器(最初的学习速率为0.0001,权重衰变为0.05,批量大小为16),和3x schedule (36次迭代,在第27和33次迭代时学习速率衰减10倍)。

对于系统级的比较,我们采用一种改进的HTC[8](表示为HTC + +)与instaboost[21],加强多尺度[6]训练(调整输入,短边是在400和1400之间,长边最多1600),6x schedul(72个epoch,在第63和69个epoch时,学习速率衰减设置为0.1),softNMS[4],在最后一阶段和ImageNet-22K预训练模型的输出附加一个额外的全局自注意层作为初始化。所有Swin Transformer模型均采用比值为0.2的随机深度。

A2.3 ADE20K的语义分割

ADE20K[80]是一个被广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K图像,其中20K用于训练,2K用于验证,还有3K用于测试。我们利用mmsegmentation[15]中的UperNet[66]作为我们的基础框架,因为它的效率很高。

在训练中,我们使用AdamW[43]优化器,初始学习率为6*0.00001,权值衰减为0.01,调度程序使用线性学习率衰减,并进行1500次迭代的线性预热。模型在8个GPU上训练,每个GPU 2张图像,160K次迭代。对于增强,我们采用mmsegmentation中默认的设置:随机水平翻转,在比率范围[0.5,2.0]内的随机重缩放和随机光度失真。所有Swin Transformer模型均采用比值为0.2的随机深度。Swin-T, Swin-S按照标准设置进行训练,与前面的方法一样,输入为512* 512。这两个模型在ImageNet-22K上进行预训练,输入为640*640进行训练。

在推理中,采用多尺度测试,其分辨率为训练中的[0.5,0.75,1.0,1.25,1.5,1.75]。在报告测试分数时,训练图像和验证图像都用于训练,遵循惯例[68]。

A3.更多实验

A3.1不同输入尺寸的图像分类

表8列出了不同输入图像大小从224*224到384*384的Swin Transformer的性能。一般来说,较大的输入分辨率会导致更好的top-1精度,但会导致较慢的推理速度。

A3.2在COCO上使用不同的ResNe(X)t优化器

表9比较了ResNe(X)t骨干在COCO对象检测上的AdamW和SGD优化器。在这个比较中使用了级联掩码R-CNN框架。虽然SGD被用作级联掩码R-CNN框架的默认优化器,但我们通常观察到,用AdamW优化器替换它可以提高准确性,特别是对于较小的骨干。因此,与提出的Swin Transformer架构相比,我们使用AdamW作为ResNe(X)t的优化器。

A3.3 Swin MLP-Mixer

我们将提出的分层设计和移位窗口方法应用于MLP-Mixer架构[61],即称为Swin-Mixer。表10显示了与原始的MLPMixer架构MLP-Mixer[61]和后续的ResMLP[61]相比,Swin-Mixer使用略小的计算预算(10.4G vs. 12.7G),其性能显著优于MLP-Mixer (81.3% vs. 76.4%)。与ResMLP相比,它还具有更好的速度与精度权衡[62]。这些结果表明,所提出的分层设计和移动窗口方法是可推广的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值