Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
abstract
-
本文提出了一种新的视觉transformer,称为Swin transformer,它能够作为计算机视觉的通用骨干。将Transformer从语言转换为视觉的挑战来自于两个领域之间的差异,例如视觉实体的规模有很大的差异,以及图像中的像素与文本中的单词相比具有较高的分辨率。为了解决这些差异,本文提出了一个分层的Transformer,它的表示是通过移位窗口计算的。 -
移窗方案通过将自我注意计算限制在不重叠的局部窗口上,同时允许跨窗口连接,从而提高了效率。这种分层结构具有在不同尺度上建模的灵活性,并具有与图像大小相关的线性计算复杂度。 -
Swin Transformer的这些特性使其兼容广泛的视觉任务,包括图像分类(ImageNet-1K上的87.3 top-1精度)和密集预测任务,如目标检测(COCO testdev上的58.7 Box_AP和51.1mask_AP)和语义分割(ADE20K val上的53.5 mIoU)。它的性能大大超过了之前的状态,COCO上的+2.7 box_AP和+2.6 mask_AP,以及ADE20K上的+3.2 mIoU,展示了基于transformer的模型作为视觉骨干的潜力分层设计和转移窗口方法也被证明对所有mlp架构有益。 -
代码和模型在 https://github.com/microsoft/Swin-Transformer 上公开。 -
论文地址:https://arxiv.org/abs/2103.14030 -
Swin Transformer是2021年微软研究院发表在ICCV上的一篇文章,并且已经获得ICCV 2021 best paper 的荣誉称号。Swin Transformer网络是Transformer模型在视觉领域的又一次碰撞。该论文一经发表就已在多项视觉任务中霸榜。
Introduction
-
计算机视觉建模一直以卷积神经网络(cnn)为主导。从AlexNet及其在ImageNet图像分类挑战上的革命性表现开始,CNN架构已经通过更大的规模[resnet,Wide residual networks]、更广泛的连接[Densely connected convolutional networks]和更复杂的卷积形式[Aggregated residual transformations for deep neural networks,Deformable convolutional networks,Deformable convnets v2]进化得越来越强大。cnn作为各种视觉任务的骨干网络,这些架构上的进步导致了性能的提高,广泛提升了整个领域。 -
另一方面,自然语言处理(NLP)中网络架构的演变却走了一条不同的道路,如今流行的架构反而是Transformer。Transformer是为序列建模和转换任务而设计的,它的显著之处在于对数据中的远程依赖关系进行建模。它在语言领域的巨大成功促使研究人员对其在计算机视觉中的适应性进行了研究,最近它在某些任务上表现出了良好的结果,特别是图像分类和联合视觉语言建模。 -
在本文中,本文试图扩展Transformer的适用性,使其可以作为计算机视觉的通用主干,就像它在NLP和cnn在视觉方面所做的那样。本文观察到,将其在语言领域的高表现转移到视觉领域的重大挑战可以用两种模式之间的差异来解释。 -
其中一个区别就是规模。与语言transformer中作为基本处理元素的单词标记不同,视觉元素在规模上可以有很大的变化,这是在对象检测等任务中需要注意的问题 -
在现有的基于transformer的模型中,token都是固定规模的,这一属性不适合这些视觉应用。另一个区别是图像像素的分辨率比文本段落中的单词高得多。在语义分割等视觉任务中,需要在像素级进行密集的预测,而Transformer对高分辨率图像的自我注意计算复杂度是图像大小的二次元,这对它来说是很困难的。 -
为了克服这些问题,本文提出了一个通用的Transformer骨干,称为Swin Transformer,它构造层次特征映射,并具有与图像大小线性的计算复杂度。如下图(a)所示,Swin Transformer通过从小的补丁(用灰色表示)开始,并逐渐在较深的Transformer层中合并相邻的补丁来构建一个分层表示。
-
-
(a)提出的Swin Transformer通过合并更深层次的图像补丁(如图灰色部分)来构建分层特征映射,由于只在每个局部窗口内(如图红色部分)计算自我注意,因此对输入图像大小的计算具有线性计算复杂度。因此,它可以作为图像分类和密集识别任务的通用主干。 -
(b)以往的视觉transformer产生单一低分辨率的特征图,由于全局自注意计算,对输入图像大小的计算复杂度为二次元。 -
Swin Transformer使用了类似卷积神经网络中的层次化构建方法(Hierarchical feature maps),比如特征图尺寸中有对图像下采样4倍的,8倍的以及16倍的,这样的backbone有助于在此基础上构建目标检测,实例分割等任务。而在之前的Vision Transformer中是一开始就直接下采样16倍,后面的特征图也是维持这个下采样率不变。 -
在Swin Transformer中使用了Windows Multi-Head Self-Attention(W-MSA)的概念,比如在下图的4倍下采样和8倍下采样中,将特征图划分成了多个不相交的区域(Window),并且Multi-Head Self-Attention只在每个窗口(Window)内进行。相对于Vision Transformer中直接对整个(Global)特征图进行Multi-Head Self-Attention,这样做的目的是能够减少计算量的,尤其是在浅层特征图很大的时候。这样做虽然减少了计算量但也会隔绝不同窗口之间的信息传递,所以在论文中作者又提出了 Shifted Windows Multi-Head Self-Attention(SW-MSA)的概念,通过此方法能够让信息在相邻的窗口中进行传递。 -
通过这些分层特征映射,Swin Transformer模型可以方便地利用高级技术进行密集预测,如特征金字塔网络(FPN)或U-Net。线性计算复杂度是通过在分割图像(用红色标出)的非重叠窗口内局部计算自我注意来实现的。 -
每个窗口中的patch数量是固定的,因此复杂度与图像大小成线性关系。这些优点使Swin Transformer适合作为各种视觉任务的通用主干,与以前基于Transformer的架构形成对比,后者产生单一分辨率的特征映射,具有二次元复杂度。 -
Swin Transformer的一个关键设计元素是它在连续的自我注意层之间转移窗口分区,如下图所示。
-
移动的窗口将上一层的窗口连接起来,提供了这些窗口之间的连接,显著地增强了建模能力(见下表)。这种策略对于真实世界的延迟也是有效的:一个窗口内的所有查询补丁共享相同的键set,这方便了硬件的内存访问。
-
相比之下,早期基于滑动窗口的自关注方法[Local relation networks for image recognition,Stand-alone selfattention in vision models]在一般硬件上的延迟较低,这是因为针对不同查询pixels的键集合不同。本文的实验表明,提出的移动窗口方法比滑动窗口方法具有更低的延迟,但在建模能力方面类似(见下表)。移动窗口方法也被证明有利于所有mlp架构。
-
所提出的Swin Transformer在图像分类、目标检测和语义分割等识别任务上都取得了较好的性能。在三个任务的延迟相似的情况下,它明显优于ViT / DeiT和ResNe(X)t模型。其在COCO测试开发集上的58.7 box_AP和51.1 mask_AP超过了之前最先进的结果,+2.7 box_AP(Simple copy-paste is a strong data augmentation method for instance segmentation,没有外部数据)和+2.6 mask_AP(探测器[Detectors: Detecting objects with recursive feature pyramid and switchable atrous convolution])。在ADE20K语义分割中,val集上得到53.5 mIoU,比之前的技术(SETR)提高了+3.2 mIoU。在ImageNet-1K图像分类中,top-1准确率达到87.3%。 -
本文相信,跨计算机视觉和自然语言处理的统一架构将有利于这两个领域,因为它将促进视觉和文本信号的联合建模,并且可以更深入地共享这两个领域的建模知识。本文希望Swin Transformer在各种视觉问题上的强大表现能够在社区中更深入地推动这种信念,并鼓励视觉和语言信号的统一建模。
Related Work
-
CNN and variants
-
cnn是整个计算机视觉的标准网络模型。虽然CNN已经存在了几十年,但直到AlexNet的引入,CNN才开始起飞并成为主流。此后,人们提出了更深入、更有效的卷积神经体系结构,如VGG、GoogleNet、ResNet、DenseNet、HRNet和EfficientNet,进一步推动计算机视觉领域的深度学习浪潮。 -
除了这些架构上的进步,人们还在改进单个卷积层方面做了很多工作,如深度卷积和可变形卷积。虽然CNN及其变体仍然是计算机视觉应用的主要骨干架构,但本文强调Transformer-like架构在视觉和语言之间统一建模方面的强大潜力。本文的工作在几个基本的视觉识别任务上取得了出色的表现,本文希望它将有助于建模的转变。 -
Self-attention based backbone architectures
-
同样受到自注意层和Transformer架构在NLP领域成功的启发,一些作品使用自注意层来取代流行的ResNet中的部分或全部空间卷积层[Local relation networks for image recognition,Stand-alone selfattention in vision models,Exploring self-attention for image recognition]。 -
在这些工作中,自我注意是在每个像素的一个局部窗口内计算的,以加快优化,他们实现了比对应的ResNet架构略好的精度/FLOPs权衡。然而,它们昂贵的内存访问导致它们的实际延迟明显大于卷积网络。本文建议在连续的层之间切换窗口,而不是使用滑动窗口,这允许在一般硬件中更有效地实现。 -
Self-attention/Transformers to complement CNNs
- 另一项工作是用自注意力层或transformer增强标准CNN架构。通过提供对远程依赖或异构交互进行编码的能力,自我注意层可以补充主干或头部网络。最近,Transformer中的编码器-解码器设计已被应用于对象检测和实例分割任务。本文的作品探索了transformer的基本视觉特征提取,是这些作品的补充。
-
Transformer based vision backbones
-
与本文的工作最相关的是Vision Transformer (ViT)及其后续产品[Training data-efficient image transformers & distillation through attention,Tokensto-token vit: Training vision transformers from scratch on imagenet,Do we really need explicit position encodings for vision transformers?,Transformer in transformer,Pyramid vision transformer: A versatile backbone for dense prediction without convolutions]。ViT的开创性工作是直接将Transformer架构应用于非重叠中型图像块上进行图像分类。与卷积网络相比,它在图像分类方面取得了令人印象深刻的速度和精度折衷。虽然ViT需要大规模的训练数据集(即JFT-300M)才能表现良好,但DeiT引入了几种训练策略,使ViT也可以有效地使用较小的ImageNet-1K数据集。ViT在图像分类方面的效果令人鼓舞,但由于其特征映射分辨率较低,且随着图像大小的二次增长,其结构不适合作为通用骨干网络在密集视觉任务或输入图像分辨率较高的情况下使用。 -
通过直接上采样或反卷积的方法,将ViT模型应用于目标检测和语义分割的密集视觉任务,但性能相对较低[Toward transformer-based object detection,Rethinking semantic segmentation from a sequence-to-sequence perspective with transformers]。 -
与本文的工作并行的是一些修改ViT架构[Tokensto-token vit,Do we really need explicit position encodings for vision transformers?,Transformer in transformer],以更好的图像分类。根据经验,本文发现Swin Transformer架构在图像分类方面实现了这些方法之间的最佳速度和精度权衡,尽管本文的工作重点是通用性能,而不是专门针对分类。 -
另一项并行工作[Pyramid vision transformer]探索了在transformer上构建多分辨率特征图的类似思路。它的复杂度仍然是图像大小的二次函数,而本文的复杂度是线性的,并且也是局部操作的,这已被证明有利于对视觉信号的高相关性建模。本文的方法既高效又有效,在COCO对象检测和ADE20K语义分割上都达到了最先进的精度。
Method
Overall Architecture
-
下图展示了Swin Transformer架构的概述,其中说明了小型版本(SwinT)。它首先通过补丁分割模块(如ViT)将输入的RGB图像分割成不重叠的补丁。每个补丁被视为一个“token”,其特征被设置为原始像素RGB值的拼接。
-
-
(a) Swin Transformer (Swin- t)的结构; -
(b)两个连续的Swin transformer块(表示法为式(3))。W-MSA和SW-MSA分别是具有规则窗口配置和移位窗口配置的多头自注意模块。 -
整个模型采取层次化的设计,一共包含4个Stage,每个stage都会缩小输入特征图的分辨率,像CNN一样逐层扩大感受野。
-
在输入开始的时候,做了一个Patch Embedding ,将图片切成一个个图块,并嵌入到Embedding 。 -
在每个Stage里,由Patch Merging 和多个Block组成。 -
而Block具体结构如右图所示,主要是LayerNorm ,MLP ,Window Attention 和 Shifted Window Attention 组成 -
首先将图片输入到Patch Partition模块中进行分块,即每4x4相邻的像素为一个Patch,然后在channel方向展平(flatten)。假设输入的是RGB三通道图片,那么每个patch就有4x4=16个像素,然后每个像素有R、G、B三个值所以展平后是16x3=48,所以通过Patch Partition后图像shape由 [H, W, 3]变成了 [H/4, W/4, 48]。 -
然后在通过Linear Embeding层对每个像素的channel数据做线性变换,由48变成C,即图像shape再由 [H/4, W/4, 48]变成了 [H/4, W/4, C]。其实在源码中Patch Partition和Linear Embeding就是直接通过一个卷积层实现的,和之前Vision Transformer中讲的 Embedding层结构一模一样。 -
然后就是通过四个Stage构建不同大小的特征图,除了Stage1中先通过一个Linear Embeding层外,剩下三个stage都是先通过一个Patch Merging层进行下采样。然后都是重复堆叠Swin Transformer Block注意这里的Block其实有两种结构,这两种结构的不同之处仅在于一个使用了W-MSA结构,一个使用了SW-MSA结构。而且这两个结构是成对使用的,先使用一个W-MSA结构再使用一个SW-MSA结构。 -
在每个Stage中首先要通过一个Patch Merging层进行下采样(Stage1除外)。如下图所示,假设输入Patch Merging的是一个4x4大小的单通道特征图(feature map),Patch Merging会将每个2x2的相邻像素划分为一个patch,然后将每个patch中相同位置(同一颜色)像素给拼在一起就得到了4个feature map。接着将这四个feature map在深度方向进行concat拼接,然后在通过一个LayerNorm层。最后通过一个全连接层在feature map的深度方向做线性变化,将feature map的深度由C变成C/2。通过这个简单的例子可以看出,通过Patch Merging层后,feature map的高和宽会减半,深度会翻倍。 -
-
h
t
t
p
s
:
/
/
b
l
o
g
.
c
s
d
n
.
n
e
t
/
q
q
3
7541097
/
a
r
t
i
c
l
e
/
d
e
t
a
i
l
s
/
121119988
https://blog.csdn.net/qq_37541097/article/details/121119988
https://blog.csdn.net/qq3?7541097/article/details/121119988 -
在本文的实现中,使用了4 × 4的patch size,因此每个patch的特征维度为4 × 4 × 3 = 48。在该原始值特征上应用线性嵌入层,将其投影到任意维(记为C)。 -
在这些补丁标记上应用了几个带有改进的自注意计算的Transformer块(Swin Transformer块)。Transformer块维护令牌的数量(
H
4
?
W
4
\frac{H}{4}*\frac{W}{4}
4H??4W?),并与线性嵌入一起被称为“阶段1”。 -
为了产生分层表示,随着网络的深入,通过补丁合并层来减少token的数量。第一个patch merge层将相邻的每组2 × 2个patch的特征进行拼接,并对拼接后的4c维特征进行线性层。这减少了2× 2 = 4的token数量(2×分辨率下采样),输出维度设置为2C。之后采用Swin Transformer块进行特征变换,分辨率保持在
H
8
×
W
8
\frac{H}8 × \frac{W}8
8H?×8W?。这第一块补丁合并和特征转换被称为“第二阶段”。该过程重复两次,即“第三阶段”和“第四阶段”,输出分辨率分别为
H
16
×
W
16
\frac{H}{16} × \frac{W}{16}
16H?×16W?和
H
32
×
W
32
\frac{H}{32} × \frac{W}{32}
32H?×32W?。
-
Patch Merging的作用是对图像进行降采样,类似于CNN中Pooling层。Patch Merging是主要是通过??nn.Unfold??函数实现降采样的,??nn.Unfold??的功能是对图像进行滑窗,相当于卷积操作的第一步,因此它的参数包括窗口的大小和滑窗的步长。 -
Patch Partition/Patch Merging起到的作用像是CNN中通过带有步长的滑窗来降低分辨率,再通过 卷积来调整通道数。不同的是在CNN中最常使用的降采样的最大池化或者平均池化往往会丢弃一些信息,例如最大池化会丢弃一个窗口内的地响应值,而Patch Merging的策略并不会丢弃其它响应,但它的缺点是带来运算量的增加。在一些需要提升模型容量的场景中,其实可以考虑使用Patch Merging来替代CNN中的池化。 -
这些阶段共同产生一个层次表示,具有与典型卷积网络(如VGG和ResNet)相同的特征映射分辨率。因此,该体系结构可以方便地替代现有方法中的骨干网络,用于各种视觉任务。 -
Swin Transformer block
- Swin Transformer是通过将Transformer块中的标准多头自注意(MSA)模块替换为基于移动窗口的模块来构建的,而其他层保持不变。如上图(b)所示,Swin transformer块包括一个基于移动窗口的MSA模块,然后是一个中间带有GELU非线性的2层MLP。在每个MSA模块和每个MLP模块前加LN (LayerNorm)层,在每个模块后加残差连接。
Shifted Window based Self-Attention
-
标准的Transformer体系结构及其对图像分类的适应都进行全局自关注,其中计算一个token和所有其他token之间的关系。全局计算导致了符号数量的二次复杂度,使得它不适合许多需要大量符号集来进行密集预测或表示高分辨率图像的视觉问题。 -
这是这篇文章的关键。传统的Transformer都是基于全局来计算注意力的,因此计算复杂度十分高。而Swin Transformer则将注意力的计算限制在每个窗口内,进而减少了计算量。主要区别是在原始计算Attention的公式中的Q,K时加入了相对位置编码。后续实验有证明相对位置编码的加入提升了模型性能。 -
Self-attention in non-overlapped windows
-
为了高效建模,本文建议在局部窗口内计算自我注意。所述窗口被安排以不重叠的方式均匀地分割图像。假设每个窗口包含M × M个patch,则一个全局MSA模块和一个基于h × w个patch图像的MSA模块窗口的计算复杂度为 -
Ω
(
M
S
A
)
=
4
h
w
C
2
+
2
(
h
w
)
2
C
,
(
1
)
Ω
(
W
?
M
S
A
)
=
4
h
w
C
2
+
2
M
2
h
w
C
,
(
2
)
Ω(MSA)=4hwC^2+2(hw)^2C,(1)\\Ω(W-MSA)=4hwC^2+2M^2hwC,(2)
Ω(MSA)=4hwC2+2(hw)2C,(1)Ω(W?MSA)=4hwC2+2M2hwC,(2) -
其中,前者是patch号hw的二次函数,后者在M固定(默认为7)时是线性函数。全局自关注计算对于大的hw来说通常是负担不起的,而基于窗口的自注意力是可伸缩的。 -
Shifted window partitioning in successive blocks
-
基于窗口的自我关注模块缺乏跨窗口的连接,这限制了它的建模能力。为了引入跨窗口连接,同时保持非重叠窗口的高效计算,提出了一种移位窗口分区方法,该方法在连续Swin Transformer块中的两个分区配置之间交替进行。 -
如第二张图所示,第一个模块采用规则窗口划分策略,从左上角像素开始,将8 × 8特征映射均匀划分为2 × 2个大小为4 × 4 (M = 4)的窗口。然后,下一个模块采用与上一层不同的窗口配置,将窗口替换为规则划分窗口上的(
f
l
o
o
r
(
M
2
)
,
f
l
o
o
r
(
M
2
)
floor(\frac{M} 2),floor(\frac M2)
floor(2M?),floor(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
)
)
+
z
^
l
,
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
,
(
3
)
\hat{z}^l=W-MSA(LN(z^{l-1})+z^{l-1},\\ z^l=MLP(LN(\hat{z}^l))+\hat{z}^l,\\ \hat{z}^{l+1}=SW-MSA(LN(z^{l})+z^{l},\\ z^{l+1}=MLP(LN(\hat{z}^{l+1}))+\hat{z}^{l+1},(3)
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,(3) -
其中
z
^
l
\hat{z}^l
z^l和
z
l
z^l
zl分别表示(S)WMSA模块和l块MLP模块的输出特征;W-MSA和W-MSA分别表示使用规则和移位窗口分区配置的基于窗口的多头自注意。 -
移位窗口分割方法在前一层引入了相邻的非重叠窗口之间的连接,在图像分类、目标检测和语义分割方面效果良好,如下表所示。 -
-
采用Swin-T架构,在三个基准上对移位窗方法和不同位置嵌入方法进行消融研究。W /o移位:所有自注意模块均采用规则窗口分区,不移位;abs. pos.: ViT的绝对位置嵌入项;rel. pos.:带有附加相对位置偏差项的默认设置(参见公式(4));应用:式(4)中第一个缩放的点积项。 -
Efficient batch computation for shifted configuration
-
移位窗口划分的一个问题是,它将导致更多的窗口,从
h
M
×
w
M
\frac h M ×\frac w M
Mh?×Mw?到移位配置
(
h
M
+
1
)
×
(
w
M
+
1
)
(\frac h M +1) × (\frac w M +1)
(Mh?+1)×(Mw?+1),并且一些窗口将小于M × M。一个简单的解决方案是将较小的窗口填充为M × M大小,并在计算注意力时屏蔽填充的值。 -
当常规分区中的窗口数量较少时,例如:2 × 2,用这个原始解增加的计算量是相当大的(2 × 2→3 × 3,是2.25倍)。在这里,我们提出了一种更有效的批处理计算方法,即向左上角循环移动,如下图所示。 -
-
在移位窗口分区中用于自我注意的高效批处理计算方法的示例。 -
在这种偏移后,一个批处理窗口可能由多个在特征映射中不相邻的子窗口组成,因此采用了掩码机制,将自注意计算限制在每个子窗口内。使用循环移位,批处理窗口的数量与常规窗口分区的数量相同,因此效率也很高。这种方法的低延迟如下表所示。 -
-
不同的自注意力计算方法和在V100 GPU上的实际速度。 -
Relative position bias
-
在计算自注意时,在计算相似性时,在每个头部包含一个相对位置偏差
B
∈
R
M
2
×
M
2
B∈\Bbb R^{{M^ 2}×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
,
(
4
)
Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d}}+B)V,(4)
Attention(Q,K,V)=softmax(d
?QKT?+B)V,(4) -
式中
Q
,
K
,
V
∈
R
M
2
×
d
Q, K, V∈\Bbb R^{M^2×d}
Q,K,V∈RM2×d是查询矩阵、键矩阵和值矩阵;d为查询/键维度,m2为一个窗口中的补丁数量。由于每个轴上的相对位置位于[?M + 1, M?1]范围内,本文参数化了一个较小的偏差矩阵
B
^
∈
R
(
2
M
?
1
)
×
(
2
M
?
1
)
\hat B∈\Bbb R^{(2M?1)×(2M?1)}
B^∈R(2M?1)×(2M?1),B中的值取自?B。 -
本文观察到,与没有该偏差项或使用绝对位置嵌入的同行相比,有显著的改进,如上表所示。像[VIT]那样在输入中进一步添加绝对位置嵌入会略微降低性能,因此在本文的实现中没有采用它。在训练前学习到的相对位置偏差也可以用来初始化模型,通过双三次插值进行不同窗口大小的微调。
Architecture Variants
-
本文构建了名为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。这些模型变量的架构超参数为: -
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
}
Swin-T:C=96,layer~numbers=\{2,2,6,2\}\\ Swin-S:C=96,layer~numbers=\{2,2,18,2\}\\ Swin-B:C=128,layer~numbers=\{2,2,18,2\}\\ Swin-L:C=192,layer~numbers=\{2,2,18,2\}\\
Swin?T:C=96,layer?numbers={2,2,6,2}Swin?S:C=96,layer?numbers={2,2,18,2}Swin?B:C=128,layer?numbers={2,2,18,2}Swin?L:C=192,layer?numbers={2,2,18,2} -
式中C为第一阶段隐层通道数。下表列出了用于ImageNet图像分类的模型大小、理论计算复杂度(FLOPs)和模型变体的吞吐量。 -
-
ImageNet-1K分类中不同主干的比较。吞吐量是使用GitHub库和V100 GPU来测量的,下面是[Training data-efficient image transformers & distillation through attention.]。
Experiments
- 本文分别对ImageNet-1K图像分类、COCO对象检测、ADE20K语义分割进行实验。在接下来的文章中,本文首先将Swin Transformer架构与之前在这三个任务上的先进水平进行比较。然后,对Swin transformer的重要设计要素进行了分析。
Image Classification on ImageNet-1K
-
对于图像分类,我们在ImageNet-1K上对拟议的Swin Transformer进行了基准测试,其中包含来自1000个类的1.28M训练图像和50K验证图像。报告了在单个作物上的前1位精度。本文考虑两种训练设置:
-
常规ImageNet-1K训练。这一设置大多遵循[Training data-efficient image transformers & distillation through attention.]。本文使用AdamW优化器,使用余弦衰减学习率调度器和20个线性预热时段。批量大小为1024,初始学习率为0.001,权重衰减为0.05。 -
本文在训练中纳入了[Training data-efficient image transformers & distillation through attention.]的大部分增强和正则化策略,除了重复增强和EMA不能提高成绩。注意,这与[Training data-efficient image transformers & distillation through attention.]相反,在[Training data-efficient image transformers & distillation through attention.]中,反复增强对于稳定ViT训练至关重要。 -
ImageNet-22K的预训练和ImageNet-1K的微调。本文还在更大的ImageNet-22K数据集上进行了预训练,该数据集包含1420万张图片和22K类。本文使用了一个AdamW优化器,用于90个epoch,使用一个线性衰减学习率调度器,带有5个epoch的线性预热。批大小为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K微调中,本文训练模型30个epoch,批大小为1024,恒定的学习率为10?5,权重衰减为10?8。 -
Results with regular ImageNet-1K training
-
下表(a)展示了与其他骨干的比较,包括基于transformer和基于convnet的骨干,使用常规的ImageNet-1K训练。 -
-
与之前最先进的基于transformer的架构(即DeiT)相比,Swin transformer明显超过了具有类似复杂性的对应DeiT架构:使用224*224输入时,Swin- t(81.3%)比DeiT- s(79.8%)高出1.5%,使用2242/3842输入时,Swin transformer分别比Swin- b(83.3%/84.5%)比DeiT- b(81.8%/83.1%)高出1.5%/1.4%。 -
与目前最先进的ConvNets (RegNet和effentnet)相比,Swin Transformer实现了稍好的速度-精度权衡。需要注意的是,RegNet和EfficientNet是通过彻底的架构搜索获得的,而拟议的Swin Transformer是根据标准Transformer改编的,有很大的进一步改进的潜力。 -
Results with ImageNet-22K pre-training
-
本文还在ImageNet22K上预训练更大容量的Swin-B和Swin-L。对ImageNet-1K图像分类进行微调的结果如下表(b)所示。对于Swin-B, ImageNet22K的预训练比ImageNet-1K从头训练带来1.8% ~ 1.9%的收益。 -
-
与之前ImageNet-22K预训练的最佳结果相比,本文的模型实现了更好的速度-精度权衡:Swin-B获得了86.4%的top-1精度,这比ViT在类似的推断吞吐量(84.7 vs. 85.9 images/sec)和略低的FLOPs(47.0G vs. 85.9 images/sec)高出2.4%。55.4 g)。较大的Swin-L模型达到了87.3%的top-1准确率,比Swin-B模型提高了0.9%。
Object Detection on COCO
Semantic Segmentation on ADE20K
-
ADE20K是一个被广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。利用mmseg中的supernet作为我们的基本框架,因为它的高效率。更多细节见附录。 -
下表列出了不同方法/主干对的mIoU、模型大小(#param)、FLOPs和FPS。从这些结果可以看出,在计算成本相近的情况下,Swin-S比DeiT-S高出了+5.3 mIoU(49.3比44.0)。比ResNet-101高+4.4 mIoU,比ResNeSt-101高+2.4 mIoU。本文采用ImageNet-22K预训练的Swin-L模型在val集上达到了53.5 mIoU,超过了之前的最佳模型+3.2 mIoU(模型尺寸更大的SETR的50.3 mIoU)。 -
-
在ADE20K val和测试集上的语义分割结果。?表示额外的转置卷积层用于生成分层特征图。?表示模型在ImageNet-22K上进行了预训练。
Ablation Study
-
在本节中,本文去除了Swin transformer中的重要设计元素,使用ImageNet-1K图像分类,Cascade Mask R-CNN用于COCO目标检测,以及UperNet用于ADE20K语义分割。 -
下表报告了三个任务中移动窗口方法的细节。带有移位窗口分区的Swin-T在每个阶段优于在单个窗口分区上建立的对等体,在ImageNet-1K上+1.1%的top-1精度,在COCO上+2.8盒AP/+2.2掩码AP,在ADE20K上+2.8 mIoU。 -
-
采用Swin-T架构,在三个基准上对移位窗方法和不同位置嵌入方法进行消融研究。W /o移位:所有自注意模块均采用规则窗口分区,不移位;abs. pos.: ViT的绝对位置嵌入项;rel. pos.:带有附加相对位置偏差项的默认设置(参见公式(4));应用:式(4)中第一个缩放的点积项。 -
结果表明,使用移动窗口在前面的层之间建立窗口连接的有效性。移动窗口的延迟开销也很小,如下表所示。
-
Relative position bias
-
消融实验第一张表显示了不同位置嵌入方法的比较。相对位置偏差的Swin-T在ImageNet-1K上的top1精度为+1.2%/+0.8%,在COCO上的top1精度为+1.3/+1.5 box AP和+1.1/+1.3 mask AP,在ADE20K上的top1精度为+2.3/+2.9 mIoU,表明了相对位置偏差的有效性。还需要注意的是,虽然包含绝对位置嵌入提高了图像分类精度(+0.4%),但它损害了目标检测和语义分割(COCO上-0.2盒/掩码AP和ADE20K上-0.6 mIoU)。 -
虽然最近的ViT/DeiT模型在图像分类中放弃了旋转不变性,尽管它长期以来一直被证明是视觉建模的关键,但本文发现,鼓励一定旋转不变性的归纳偏差仍然是通用视觉建模的首选,特别是对于目标检测和语义分割的密集预测任务。 -
Different self-attention methods
-
上表比较了不同的自注意计算方法和实现的实际速度。本文的循环实现比单纯填充更有效,特别是对于更深的阶段。总的来说,它为Swin-T、Swin-S和Swin-B分别带来了13%、18%和18%的加速。 -
在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倍。下表比较了它们在三个任务上的准确性,显示它们在可视化建模中同样准确。 -
-
Swin transformer在三个基准上使用不同的方法进行自我注意计算的准确性。 -
与最快的Transformer架构之一的Performer相比,提出的基于移位窗口的自关注计算和整体Swin Transformer架构略快,同时与使用Swin- t的Performer在ImageNet-1K上的top-1精度相比,实现了+2.3%的精度。
Conclusion
-
本文提出了一种新的ViT Swin Transformer,它产生层次化的特征表示,并对输入图像的大小具有线性计算复杂度。Swin Transformer在COCO对象检测和ADE20K语义分割方面实现了最先进的性能,显著超过了以往的最佳方法。本文希望Swin Transformer在各种视觉问题上的强大性能将鼓励视觉和语言信号的统一建模。 -
作为Swin Transformer的关键元素,基于移位窗口的自我注意在视觉问题上被证明是有效和高效的,本文也期待研究它在自然语言处理中的应用。
A1. Detailed Architectures
A2. Detailed Experimental Settings
A2.1. Image classification on ImageNet-1K
-
对上一阶段的输出特征图使用全局平均池化层进行图像分类,然后使用线性分类器进行分类。本文发现这种策略与在ViT和DeiT中使用额外的类令牌一样准确。在评价中,采用单一作物的精度为top-1。 -
Regular ImageNet-1K training:训练设置大多遵循[Training data-efficient image transformers & distillation through attention.]。对于所有的模型变体,本文采用默认的输入图像分辨率
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为线性预热。批量大小为1024,初始学习率为0.001,权重衰减为0.05,最大范数为1的梯度剪裁。在训练中包括了[Training data-efficient image transformers & distillation through attention]的大多数增强和正则化策略,包括RandAugment , Mixup , Cutmix,随机擦除和随机深度,但不包括不能提高性能的重复增强和指数移动平均(EMA)。注意,这与[Training data-efficient image transformers & distillation through attention]相反,在[Training data-efficient image transformers & distillation through attention]中,反复增强对于稳定ViT训练至关重要。对于较大的模型,采用逐渐增加的随机深度增加程度,即Swin-T、Swin-S和Swin-B分别为0.2、0.3、0.5。 -
为了对更大分辨率的输入进行微调,本文使用了30个epoch的adamW优化器,学习率为10?5,权重衰减为10?8,除了将随机深度比设置为0.1外,数据增强和正则化与第一阶段相同。 -
ImageNet-22K pre-training:本文还在更大的ImageNet-22K数据集上进行了预训练,该数据集包含1420万张图片和22K类。训练分两个阶段进行。对于第一阶段的
22
4
2
224^2
2242个输入,本文使用了一个用于90个epoch的AdamW优化器,使用一个线性衰减学习率调度器(带有5个epoch的线性预热)。批大小为4096,初始学习率为0.001,权重衰减为0.01。在ImageNet-1K微调的第二阶段,输入
22
4
2
/
38
4
2
224^2/384^2
2242/3842,本文训练模型30个epoch,批大小为1024,恒定的学习率为10?5,权重衰减为10?8。
A2.2. Object detection on COCO
-
在消融研究中,本文考虑了四种典型的目标检测框架:Cascade Mask R-CNN , ATSS , RepPoints v2和mmdetection中的Sparse RCNN。对于这四个框架,本文使用相同的设置:多尺度训练(调整输入,使短边在480到800之间,长边最多为1333),AdamW优化器(初始学习率0.0001,权重衰减为0.05,批大小为16),3x调度(36个epoch,学习率在epoch 27和33衰减10×)。 -
对于系统级的比较,本文采用一种改进的HTC(表示为HTC + +)与instaboost,加强多尺度训练(调整输入,短边是在400 和1400之间,而不再是最多1600),6 x时间表(72 epoch学习速率下降的时代63和69的0.1倍),softNMS,和一个额外的全局self-attention层附加在最后阶段的输出和ImageNet-22K pre-trained模型初始化。本文对所有Swin Transformer模型采用比值为0.2的随机深度。
A2.3. Semantic segmentation on ADE20K
-
ADE20K是一个被广泛使用的语义分割数据集,涵盖了150个语义类别。它总共有25K张图像,其中20K用于训练,2K用于验证,另外3K用于测试。利用mmsegmentation中的supernet作为本文的基本框架,因为它的高效率。 -
在训练中,本文使用AdamW优化器,初始学习率为6 × 10?5,权重衰减为0.01,使用线性学习率衰减的调度器,并进行1500次迭代的线性预热。模型在8个GPU上训练,每个GPU 2张图像,160K迭代。对于增强,本文采用mmsegmentation的默认设置:随机水平翻转,在比例范围[0.5,2.0]内随机缩放和随机光度失真。 -
所有Swin Transformer模型均采用比值为0.2的随机深度。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]×。在报告测试分数时,训练图像和验证图像都被用于训练,遵循常见的做法[Disentangled non-local neural networks]。
A3. More Experiments
A3.1. Image classification with different input size
A3.2. Different Optimizers for ResNe(X)t on COCO
-
下表比较了ResNe(X)t骨干在COCO对象检测上的AdamW和SGD优化器。在这个比较中使用了Cascade Mask R-CNN框架。虽然SGD被用作Cascade Mask R-CNN框架的默认优化器,但本文通常观察到用AdamW优化器替换它可以提高精度,特别是对于较小的骨干。因此,与Swin Transformer架构相比,本文使用AdamW作为ResNe(X)t骨干优化器。 -
-
使用Cascade Mask R-CNN框架对COCO对象检测进行ResNe(X)t骨干的SGD和AdamW优化器的比较。
A3.3. Swin MLP-Mixer
-
本文将提出的分层设计和移位窗口方法应用于MLP-Mixer架构,称为Swin-Mixer。下表显示了Swin-Mixer与原始MLPMixer架构MLP-Mixer和后续方法ResMLP的性能比较。Swin-Mixer使用略小的计算预算(10.4G vs 12.7G),性能明显优于MLP-Mixer (81.3% vs 76.4%)。与ResMLP相比,它还具有更好的速度精度权衡[62]。这些结果表明,本文提出的分层设计和移位窗口方法是可推广的。 -
-
Swin MLP-Mixer在ImageNet-1K分类中的性能。D表示每个头的通道数。吞吐量是使用GitHub库【rwightman/pytorch-image-models: PyTorch image models, scripts, pretrained weights – ResNet, ResNeXT, EfficientNet, EfficientNetV2, NFNet, Vision Transformer, MixNet, MobileNet-V3/V2, RegNet, DPN, CSPNet, and more (github.com)】和V100 GPU来测量的。
|