Swin Transformer: Hierarchical Vision Transformer using Shifted Windows使用移动窗口的分层视觉转换器阅读笔记
摘要:提出Swin Transformer,作为计算机视觉的通用主干网络。将Transformer应用到是视觉领域的挑战就是语言和视觉两个领域的差异。本文提出的分层transformer,它的表征用移动窗口计算,解决这个差异。通过将自注意计算机制限制在非重叠的本地窗口,允许跨窗口连接,移动的窗口方法带来了更高的效率。层次结构具有在不同尺度上建模的灵活性,具有相对于图像的线性计算复杂度。分层设计和移动窗口方法被证明对所有mlp体系结构有益。
图一:a.提出的SwinT通过合并更深层次的图像patch构建分层特征映射,只在每个局部窗口内进行自注意力计算,因此具有关于输入图像大小线性计算复杂度,因此可以作为图像分类和密集识别任务的通用主干。b.以往的visionT产生单一低分辨率的特征映射,由于全局自注意力计算,输入图像大小的计算复杂度为2次方。
1.介绍:
本文试图扩展transformer的适用性,使得它可以作为视觉的通用骨干,就像在NLP的作用一样。用到视觉领域限制主要是语言和视觉两种模式的差异。
一:涉及规模,语言方面的基本处理元素就是单词标记,单词token规模都是固定的,但是视觉元素的规模可以有很大的差异;
二:图像像素分辨率比文本的分辨率高很多。(自注意力的计算复杂度是图像大小的二次方) 。
为克服这个问题提出SwinT,构造分层特征映射,并具有与图像大小成线性的计算复杂度。SwinT从小的patch开始逐步在更深的transformer层中逐渐合并相邻的patch,构建分层表示。有了分层特征映射,SwinT模型可以方便的利用高级技术进行密集预测。线性计算复杂度是通过在分割图像的非重叠窗口内部计算自我注意来实现。每个窗口的patch数量固定,因此复杂度和图像大小呈线性关系。
SwinT的关键设计元素是在连续的自注意层之间移动窗口分区,如图二所示。移动的窗口连接上一层的窗口,提供了它们之间的连接,大大增强了建模能力(见表4)。这种策略在实际延迟方面也很有效:一个窗口中的所有patch共享set1,促进了硬件中的内存访问。移窗方法比滑动窗方法有更低的延迟,但在建模能力上是相似的(见表5和表6)。移窗方法也被证明对所有mlp体系结构有利。
图2。Swin Transformer体系结构中用于计算自我注意的移位窗口方法的说明。l层(左)采用常规窗口分区方案,在每个窗口内计算自注意。在下一层l + 1(右)中,窗口分区被移动,产生新的窗口。新窗口中的自我注意计算跨越了前一层窗口的边界,提供了它们之间的连接。
2.相关工作:
基于自注意力机制的骨干结构:
使用自注意力层来代替ResNet中的部分或者全部空间卷积。自注意力是计算在局部窗口内每一个像素来加快优化,实现了比对应Resnet结构稍好的精度。但是它访问昂贵,实际延迟大于卷积。本文建议在连续的层之间移动窗口而不是滑动窗口,这允许在更一般硬件中更有效地实现。
使用自我注意力层或transformers来补充卷积体系:
自我注意层可以通过提供编码远程依赖关系或异构交互的能力来补充骨干或头部网络。
基于transformers的视觉骨干架构:
VIT直接在不重叠的patch上运用transformers进行图像分类,但是VIT的特征图的分辨率较低,且计算复杂度随图像大小二次方增长,不适合做密集视觉任务或输入图像分辨率较高的通用骨干网络。SwinT是通用骨干网络,不专门针对分类,另一个并行的工作是探索在transformers上构建多分辨率特征映射的类似思路。
3.方法
总体架构:
首先通过patch分割模块将输入RGB图像分割成不重叠的patch(和VIT一致)。每个patch看作一个token,patch的特征被设置为原始像素RGB值的拼接。实验中使用4*4的patch大小,因此每个patch的特征维数是4*4*3=48。在原始特征值上应用一个线性嵌入层,以将其投影到任意维度(表示为C)。
在这些patch上应用几个SwinT(具有修正自我注意力计算的transformers块)。Transformer块维持token的数量(H/4*W/4),和线性嵌入层一起称为阶段一。
为产生分层特征表示,随着网络的深入,通过patch合并层减少token的数量。第一个patch合并层连接2*2相邻的patch特征,并在4C维连续特征上应用线性层。 这将token的数量下采样(2x),设置输出维度为2C。之后使用SwinT,分辨率保持在H/8 * W/8。第一个patch合并层和特征变换(SwinT Block)表示阶段2。阶段3、4是阶段2的复制输出分辨率分别是是H/16 * W/16 、H/32*W/32。这些阶段端共同产生分成表示,具有与典型卷积网络相同的特征图分辨率。因此所提出的方法可以方便的替代现有方法中用于视觉任务主干。
图3。(a) Swin变压器(Swin- t)的结构;(b)两个连续的Swin变压器块(用公式(3)表示)。W-MSA和SW-MSA分别是具有规则和移位窗口结构的多头自注意模块。
SwinT block:SwinT 是通过将标准的多头自注意力模块(MSA)替换为基于移动窗口的模块而构建,其他保持不变。SwinT由一个基于移动窗口的MSA模块组成随后是一个2层MLP(中间带有GELU非线性激活),在每个MSA模块和每个MLP之前应用层规范(LN层),每个模块后应用残差连接。
基于移动窗口的自注意力:
标准transformer架构和分类的适应都要进行全局自注意力(计算一个token和其他所有的token的关系)。全局计算导致token数量的平方复杂度。
非重叠窗口的自注意力机制:为了有效建模,建议在局部窗口内进行计算自注意力。非重叠的方式均匀的分割图像。假设每个窗口有M*M个patch,则全局MSA模块和基于h*w的patch图像的窗口计算复杂度:
前者是patch数量h*w的平方时,当M时固定的时候后者是线性的。全局自关注计算通常是无法负担的,而基于窗口的自关注是可扩展的。
连续块中的移动窗口分区:基于窗口的自注意力机制缺乏跨窗口的连接,这限制了它的建模能力。为了保持非重叠窗口的有效计算的同时引入跨窗口连接,我们提出一种移动窗口划分方法,该方法在连续的SwinT块中的两个划分配置之间
交替。
如图2所示,第一个模块使用从左上角像素开始的常规窗口划分,8*8特征图被均匀分为2*2个大小为4*4(M=4)的窗口。下一个模块采用和前一层的窗口配置不同的窗口配置,通过将窗口从规则划分的窗口移位(M/2,M/2 [这里是下取整])个像素。
使用移位窗口分割方法,连续的SwinT块被计算为:
其中ˆzl和zl表示块l的(S)WMSA模块和MLP模块的输出特征。W-MSA和SW-MSA分别表示使用规则和移位窗口划分配置的基于窗口的多头自注意力。移位窗口分割方法引入了前一层中相邻非重叠窗口之间的连接,并被发现在图像分类、对象检测和语义分割中有效,如表4所示。
图4.移位窗口分区中用于自我关注的高效批计算方法的说明。
移位配置的高效批处理计算:移动窗口的一个问题就是它导致产生更多的窗口,在移位的配置里窗口数由()变成(
),并且一些窗口小于
。
一个简单的解决方法是将较小的窗口填充到的大小,并在计算注意力时屏蔽填充的值。如果窗口数量非常小的话,这种方法增加的计算量非常大(由2*2->3*3,计算量是原本的2.25倍)。因此提出一种更有效地方法,通过向左上方向循环移位,如图4所示。这种移位之后,一个批处理窗口可能由几个在特征图中不相邻的子窗口组成,因此采用一种掩蔽机制来将自关注计算限制在每个子窗口内。通过循环移位,批处理的数量与常规窗口分区的数量相同,因此也是有效的。
相对位置偏差:
计算自注意力时,在每个头计算相似度时引入相对位置偏差B():
- K、V(
)是查询、键、值矩阵;d是它们的维度,
是窗口的patch的数量。每个轴的相对位置位于
,参数
- 大小
,
取值于B。
表4表明,与没有偏置项或使用绝对位置嵌入的有明显改善。进一步向输入添加绝对位置嵌入会略微降低性能,因此本文未使用该项。
体系结构变体:
构建一个称为Swin-B的基础模型,模型大小和计算复杂性与VITB,还介绍一个SWin-T、Swin-S和Swin-L,他们分别是模型大小和计算复杂度的0.25,0.5和2倍。Swin-T和Swin-S复杂度和ResNet50和ResNet 101的复杂性相似。默认情况下,窗口大小设置为
M= 7,每个头部的查询维度为d=32,每个MLP的扩展为α=4:
C是第一级的隐藏层的信道号。图像分类模型变量的模型大小、理论计算复杂性和吞吐量列于表中1.
5.结论
提出的SwinT能产生分层的特征表示,具有与输入图像大小的线性计算复杂度。SwinT的关键元素,基于移动窗口的自我注意被证明在视觉问题上是有效和高效的。期待用于NLP。
本文来自博客园,作者:键盘侠牧师,转载请注明原文链接:https://www.cnblogs.com/wangzhe52xia/p/17699864.html