赞
踩
链接: https://arxiv.org/abs/2103.14030
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。这篇文章提出了一个新的视觉Transformer,叫做Swin Transformer,能够当做计算机视觉中的一个通用骨架。将Transformer从语言中适用到视觉中的挑战来自于两个领域的差异,例如视觉主体的的尺度变化很大,与文本中的单词相比,图像中的像素具有高分辨率。为了解决这个差异,我们提出了一个分层的Transformer,它的表征通过Shifted windows滑窗来计算。这个滑窗的策略带来更高的效率,通过限制自注意力的计算在不重叠的局部窗口上,同时允许跨窗口的连接。这个分层的架构在不同尺度上具有建模的灵活性,同时具有相对于图像大小的线性复杂度。SwinT的这些特性使其在广泛的视觉任务上展示了兼容性,包括图像分类(ImageNet-K上87.3%的top精度)和密集的预测任务,例如目标检测(coco test-dev上的58.7 box AP)和语义分割(ADE20K val上53.5%的mIoU)。它的性能超过了当前领先方法一大截,证明了这个基于Transformer的模型作为骨架的潜力。这个分层的设计和滑窗方法同样对于所有MLP架构也有帮助。代码模型开源。
提示:以下是本篇文章正文内容
Modeling in computer vision has long been dominated by convolutional neural networks (CNNs). Beginning with AlexNet [39] and its revolutionary performance on the ImageNet image classification challenge, CNN architectures have evolved to become increasingly powerful through greater scale [30, 76], more extensive connections [34], and more sophisticated forms of convolution [70, 18, 84]. With CNNs serving as backbone networks for a variety of vision tasks, these architectural advances have led to performance improvements that have broadly lifted the entire field.
长期以来,计算机视觉建模已经被CNN统治很久。从AlexNet及其其ImageNet图像分类挑战上取得了革命性成果,CNN架构以其更大的规模,更广泛的连接和更复杂的卷积形式已经进化得越来越强大。随着CNN为很多的视觉任务当骨架模型,这些架构上的进步带来了性能的提升,从而广泛提升整个领域。
另外一方面,在NLP中网络架构的进化呈现不同的路径,其中流行的架构是Transformer。用于序列建模和传导任务,Transformer用于使用注意力去远程建模而影响深刻。它在语言领域的巨大成功开始引导研究者去调研它在计算机视觉中的适用性,其中最近已经在核心任务如图像分类和视觉语言建模等,展示了满意的结果。
在这篇文章中,我们试图去拓展Transformer的应用,以致于它能够作为一个通用的计算机视觉骨架模型,如同它对于NLP相当于CNN对视觉。我们观察到,从语言领域迁移它的高性能到视觉领域中的关键挑战,能够通过两个模态的差异来解释。其中一个差别是尺度。不用于语言Transformer中单词令牌作为最基础的处理元素,视觉元素在尺度上变化很大,在目标检测等任务上受到关注的问题。在存在基于Transformer的模型中,tokens都是固定的尺度,这是不适应视觉任务的一个属性。另一个不同点,是图像中的像素分辨率更高,相对于单词在文本消息中。有很多的视觉任务例如语义分割,就需要在像素层的密集预测。并且,在大分辨率的图像上,这对于Transformer也不适用,因为注意力的计算复杂度与图像尺度成平方增长的。为了克服这些问题,我们提出了一个通用的Transformer骨架,即SwinT,它构建了一个分层的特征图,相对于尺度具有线性复杂度。如下图所示,SwinT构建了一个分层的表征,通过从小尺寸的patches,逐渐在较深的层中合并附近的patches块。带有这些分层的特征图,这个SwinT模型能够方便利用先进手段例如特征金字塔和UNet用于密集预测。这个线性复杂度时通过在非重叠的窗口内计算局部的自注意力。每个窗口内的patches数量是固定的,因此复杂度相对于尺度时线性的。这个策略使得SwinT能够作为一个通用的估计,相对于以前的基于Transformer的架构,他们只提供了一个单一的分辨率的特征图和平方复杂度。
(a) The proposed Swin Transformer builds hierarchical feature maps by merging image patches (shown in gray) in deeper layers and has linear computation complexity to input image size due to computation of self-attention only within each local window (shown in red). It can thus serve as a general-purpose backbone for both image classification and dense recognition tasks. (b) In contrast, previous vision Transformers [20] produce feature maps of a single low resolution and have quadratic computation complexity to input image size due to computation of selfattention globally.
提出的SwinT构建分层的特征图,通过合并图像块(灰色部分)在更深的层中,并且具有线性复杂度相对于图像输入的尺度,因为自注意力仅仅在局部窗口(红色部分)上计算。因此它能够作为以通用的骨架对于图像分类和其他密集的预测任务。对比,原始的ViT产生单一的低分辨率的特征图,并且具有平方复杂度相对于图像大小,因为全局注意力的计算。
SwinT的一个核心设计元素是在连续自注意力层之间的窗口分区的移动,如下图所示。这个移动的窗口桥接前一层的窗口,提供了他们之间的链接,显著增强了建模能力。这个策略在实际延迟方面也很有效:一个窗口内的所有查询patches共享同一个键集,这加速了硬件上的内存访问。对比,之前的自注意力方法遭受硬件上的低延迟。实验展示了这个提出的移动窗口比滑动窗口具有更低的延迟,然而在建模能力上是几乎相当的。这个移位窗口的方法同样给所有的MLP架构提供了好处。
Figure 2. An illustration of the shifted window approach for computing self-attention in the proposed Swin Transformer architecture. In layer l (left), a regular window partitioning scheme is adopted, and self-attention is computed within each window. In the next layer l + 1 (right), the window partitioning is shifted, resulting in new windows. The self-attention computation in the new windows crosses the boundaries of the previous windows in layer l, providing connections among them.
移位窗口方法的示例,对于提出的SwinT架构中的自注意力计算。左边的层中,是一个常规的窗口分区,在每一个窗口内计算自注意力,右边是下一层,窗口分区就行了移位,导致新的窗口。这个新的窗口自注意力的计算越过了上一层窗口的边界,提供了他们之间的连接。
Table 4. Ablation study on the shifted windows approach and different position embedding methods on three benchmarks, using the Swin-T architecture. w/o shifting: all self-attention modules adopt regular window partitioning, without shifting; abs. pos.: absolute position embedding term of ViT; rel. pos.: the default settings with an additional relative position bias term (see Eq. (4)); app.: the first scaled dot-product term in Eq. (4).
表格展示了移位窗口和不同位置编码方法在三个标准集上的腐蚀学习,采用都是Swin-T架构。在没有使用移位操作,所有自注意力模块采用标准的窗口分区;
这个提出的SwinT在图像识别,目标检测和语义分割等任务上都取得了强大的性能。它显著地超过了的ViT、DeiT和ResNeXt,在相当的延迟下。同样,在ImageNet-1K上取得了top1的精度。我们相信跨越计算机视觉和自然语言处理的同意架构能够使双方受益,因为它将促进视觉和文本信号的联合建模,从这两领域建模的知识能够更深入地共享。我们希望SwinT的强大表现力在多个视觉问题上,能够更深入地推动这种信念,并促进视觉文本的统一建模。
CNN及其变体
CNN被当做计算机视觉的一个标准网络模型。尽管CNN已经出现有几十年了,直到AlexNet的出现CNN才开始起飞和成为主流。自此,更深更有效的CNN架构被提出来,进一步促进计算机视觉的深度发展浪潮,例如VGG,GoogleNet,ResNet,DenseNet,HRNet和EfficientNet。在这些架构之外,有很多工作致力于提升单个卷积层,例如深度卷积DW-CNN,和可变形卷积,Deformable CNN。尽管CNN和它的变体仍然是计算机视觉应用的主要骨架,但我们强调类Transformer的架构对于统一的视觉和语言建模的巨大潜力。我们的工作在几个基本的视觉识别任务上取得了出色的表现,我们希望它有助于建模转变。
Self-attention based backbone
受到NLP领域中的自注意和Transformer架构成功的启发,一些工作采用自注意力层去部分或者全部替换ResNet中的卷积层。其中,在每个像素的局部窗口内计算自注意力去加速优化,并且取得了稍微好的平衡在精度和运算量上。但是,我们昂贵的内存访问导致了实际的延迟,比CNN网络要大很多。我们提出采用移位窗口,而不是使用滑动窗口,这允许一个更高效的实现方式。
Self-attention/ Transformer to complement CNNs
另一条工作线是去增强一个标准的CNN架构,采用自注意力。自注意力层能够去补充骨架或者head网络通过提供编码远程依赖或者异构交互的能力。最近,Transformer中的一个编码-解码设计已经用于检测和分割任务。我们的工作探索Transformer的适应性,对于基本的视觉特征提取,是这些工作的一个补充。
Transformer based vision backbone.
与我们工作最相关的是ViT和它的变体。先驱工作ViT直接使用Transformer架构在无重叠的中等图像块上实现了图像识别。相比于CNN,它在识别上获得了速度和精度的良好平衡。然而ViT需要在大规模的训练集如JFT-300M上才能表现好,DeiT引入了几个训练策略允许ViT在更小的ImageNet-1K上有效。ViT在图像分类上的结果是鼓舞人心的,但是它的架构不适合作为一个通用的骨架在密集的视觉任务上,或者输入图像的分辨率非常高,这是用于它的低分辨率特征图和相对于尺度的平方复杂度。只有少量的工作直接应用ViT到密集的视觉任务上,例如目标检测和语义分割,通过直接上采样或者反卷积,但是只有相对低一点儿的性能。
与我们的同时进行的是一些修改ViT架构的,为了更好实现图像识别。根据经验,发现我们的SwinT能够获得最好的平衡在这些方法中,尽管我们的工作关注在通用的性能而不仅仅是分类。其他并行工作探索类似的思路,以在Transformer上构建多分辨率特征图。它的复杂度仍然是尺度的平方,而我们的是线性复杂度,并且在局部操作已经被证明在视觉信号中建模高度相关性是有效的。我们的方法高效有效,在COCO目标检测和ADE20K语义分割上取得了领先的效果。
SwinT的概述如下图,它展示了一个tiny版的SwinT。它首先将输入的RGB图像分割成无重叠的图像块,通过一个块分割模块,就像在原始的ViT中那样。每一个图像块被当做一个令牌,并且它的特征被当做原始RGB像素值的合并。在我们的实现中,我们使用4×4的块大小,因此每一个块的特征维度为
4
×
4
×
3
=
48
4 \times 4 \times 3 = 48
4×4×3=48。一个线性嵌入层被应用到这些原始值的特征上去投影它到一个任务维度
C
C
C上。
有一些经过修改的自注意力计算Transformer块,叫SwinT block,被应用到这些patch tokens上。这个SwinT blocks保持tokens的数量为 ( H 4 × W 4 ) (\frac{H}{4}\times\frac{W}{4}) (4H×4W),和一个线性嵌入一起称为Stage 1.
为了产生分层的表征,tokens的数量通过patches合并层而减少,随着网络不断加深。第一个patch 合并层通过串联每一个2×2相邻patches组的特征,并且使用一个线性层在这个 4 C 4C 4C维度的串联特征上。这将tokens数量减少了2×2=4倍的数量,(2倍下采样分辨率),这个输出维度设定为 2 C 2C 2C。然后使用SwinT blocks进行特征变换,保持分辨率为 ( H 8 × W 8 ) (\frac{H}{8}\times\frac{W}{8}) (8H×8W),第一个patch merging和特征变换的block标记为stage 3。这个过程重复两次,分别叫做Stage 3和Stage 4,对应的输出分辨率为 ( H 16 × W 16 ) (\frac{H}{16}\times\frac{W}{16}) (16H×16W)和 ( H 32 × W 32 ) (\frac{H}{32}\times\frac{W}{32}) (32H×32W)。这些阶段联合起来产生了一个分层的表征,具有典型CNN网络相同的特征图分辨率,如VGG,ResNet等。因此,这个提出的架构能够方便替换现有的骨架网络。
SwinT block
SwinT通过基于移位窗口的模块来替代标准的MSA模块来构建的,其它层保持不变。如上图所示,一个SwinT block包含一个基于移位窗口的MSA模块,然后跟随一个两层的MLP带有GELU激活层的结构。LayerNorm层在每一个MSA模块和MLP前使用,在每一个模块后使用残差连接。
这个标准的ViT架构中和它的变体用于图像识别,都计算全局注意力,其中每一个token之间的关系都需要计算。这个全局的计算导致了相对于tokens数量的平方复杂度,使得它对于很多的视觉问题,特别是需要大量令牌用于密集预测或者表征一个大分辨率的图像不太合适。
无重叠窗口中的自注意力 Self-attention in non-overlapped windows
为了高效的运算,我们提出在局部窗口内计算自注意力。这些窗口被布置成不重叠均匀划分图像。假设每一窗口含有
M
×
M
M \times M
M×M个patches块,对于一个图像包含
h
×
w
h \times w
h×w个patches 块,一个全局MSA模块的运算复杂度和一个基于窗口的MSA运算复杂度分别为:
其中,前一个复杂度与块数量
h
w
hw
hw成平方关系,后一个是线性的当M固定的时候,例如
M
=
7
M=7
M=7。全局自注意力的计算通常,对于一个很大的hw通常都是不可负担的,但基于窗口的自注意力是可扩展的。
移位窗口分区在连续的blocks之间 Shifted window partitioning in suceessive blocks
这个基于窗口的自注意力模块缺少窗口之间的连接,这限制了它的建模能力。为了引入跨窗口的连接,同时保持无重叠窗口的有效运算,我们提出了一个移位窗口分区的方法,它能够在两个分区配置之间切换在连续的SwinT blocks之间。
正如图2所示,第一个模块采用一个常规的窗口分区策略,它从最左边的像素开始,将一个
8
×
8
8 \times 8
8×8的特征图均匀划分成
2
×
2
2 \times 2
2×2的窗口,每一个窗口尺度是
4
×
4
(
M
=
4
)
4 \times 4(M =4)
4×4(M=4)。然后,下一个模块使用采用的窗口配置,从上一层的的配置移位而来,通过从规则分区的窗口移动
(
M
2
,
M
2
)
(\frac{M}{2},\frac{M}{2})
(2M,2M)个像素。
通过这种移位窗口分区的方法,连续的SwinT blocks计算如下:
其中,
z
^
l
\hat z^{l}
z^l和
z
l
z^{l}
zl代表是模块
l
l
l中的(S)W-MSA模块和MLP模块的输出特征。SW-MSA指的是采用移位窗口的分区配置的多头注意力。这个移位窗口分区方法引入了相邻不重叠窗口之间的链接,发现在图像任务上非常有效。
相对位置编码 Relative position bias.
在计算自注意力,我们采用一个相对位置偏置到
B
∈
R
M
2
×
M
2
B \in R^{M^{2}\times M^{2}}
B∈RM2×M2每一个head中计算相似度,如下:
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(QK^{T}/\sqrt d + B)V \qquad (4)
Attention(Q,K,V)=SoftMax(QKT/d
+B)V(4)
其中,
Q
,
K
,
V
∈
R
M
2
×
d
Q, K, V \in R^{M^{2} \times d}
Q,K,V∈RM2×d是查询,键和值矩阵;d是维度,
M
2
M^{2}
M2是一个窗口内patches的数量。
由于沿着每个轴的相对位置的范围在
[
−
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
^
\hat B
B^。实验表明,与没有使用位置偏置或者适应绝对位置编码的对应项相对,使用相对位置编码的方法取得了显著的性能提升。
我们构建我们的基础模型,叫做Swin-B,有一个与ViT-B和DeiT-B相似的模型参数与计算复杂度。同样,我们还介绍了Swin-T,Swin-S和Swin-L,分别具有0.25×,0.5×,和2×的容量。注意,Swin-T和Swin-S分别具有与ResNet50和ResNet101相当的复杂度,窗口尺度默认M=7,每一个头的查询矩阵d=32,MLP的扩展系数 α = 4 \alpha =4 α=4。
这里总结下看完SwinT的感想:SwinT在窗口内部使用自注意力,替代了全局注意力,这带来复杂度的减低;但窗口之间的互动,对建模也很重要,因此,采用Cycle-shifted windowing方法,替代了Sliding windows的冗余计算。巧妙的构造,在代码实现上也很精彩。
此外,SwinT对于不是方形图像的处理,需要修改window_size。并且,加载checkpoint时需要去掉一些参数,也能够使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。