Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 论文翻译 + 网络详解

目录

1 3 4 5 是论文的翻译,如果看过论文也可以直接看关于网络的结构详解

Abstract

1. Introduction

3. Method

3.1 Overall Architicture

3.2. Shifted Window based Self-Attention 

3.3 Architecture Variants

网络结构讲解

Patch Partition + Linear Embedding 详解

Patch Merging 详解

Swin Transformer Block 详解

W-MSA 详解

SW-MSA 详解

Relative Position 详解

4. Experiments

不同版本的 Swin Transformer 

5. Conclusion


         Swin Transformer 真的是非常火爆,各大榜单上都有它的身影,所以让我们来看一下这篇论文究竟有什么“魔力”可以取得如此好的效果。

        从文章标题就可以看出,Hierarchical 分层式,Shifted Windows 移位窗口。所以 Swin Transformer 应该就是使用的级联的 多层次的 Transformer,每个层次里应该使用的移位窗口(不清楚,再看看!)下面就深入论文,看一下 Swin 到底是什么。

论文原文:https://arxiv.org/abs/2103.14030

论文源码:https://github.com/microsoft/Swin-Transformer

Abstract

        本文介绍了一种名为 Swin Transformer 的新版 vision Transformer,它能够作为计算机视觉任务的的通用主干网络。将 Transformer 从语言领域应用到视觉领域的挑战来自两个领域之间的差异,例如视觉中不同实体的规模变化很大,与文本中的单词相比;图像中像素的高分辨率。为了解决这些差异,我们提出了一种分层 Transformer,其表示是用 Shifted windows 计算的。移位窗口方案通过将自注意力计算限制在不重叠的本地窗口上,同时还允许跨窗口连接,从而提高了效率。这种分层架构具有在各种尺度上建模的灵活性,并且具有相对于图像大小的线性计算复杂性。 Swin Transformer 的这些改进使其与广泛的视觉任务兼容,包括图像分类(ImageNet-1K 上 87.3 的 top-1 准确度)和密集预测任务 例如对象检测(COCO testdev 上 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 架构有益。

        总的来看,swin 最主要的贡献就是可以作为通用的计算机视觉任务的主干网络(Transformer 只是证明了在分类问题上有效),另外可以大致对于 swin 有一个了解:移位窗口,分层架构,窗口间允许跨窗口连接,从而导致模型复杂度小。

1. Introduction

其实下面两幅图就解释清楚了 swin 的主要贡献:

  • (a) 所提出的 Swin Transformer 通过在更深层中合并图像块(以灰色显示)来构建分层特征图,并且由于仅在每个局部窗口内计算自注意力(以红色显示),因此对输入图像大小具有线性计算复杂性。因此,它可以作为图像分类和密集识别任务的通用主干。 (b) 相比之下,以前的视觉 Transformer [20] 生成单个低分辨率的特征图,并且由于全局自注意力的计算,输入图像大小具有二次计算复杂度。 在做更精细复杂的目标检测或者语义分割过的任务,都需要考虑多尺度问题,所以传统的 CNN 架构中采用 FPN 或者 U-Net 结构。而 swin 采用的分层架构,每一层的关注区域(local window)是不同的 4x 、8x 、16x 的 patch 。这样就实现了多尺度。另外还有一个要关注的就是, swin 不再采用全局的 Self-Attention ,而是对于每一个窗口使用。这样就可以把注意力机制的计算的复杂度从与图像尺寸成平方关系变成了线性关系。
  • 在提议的 Swin Transformer 架构中计算自注意力的移位窗口方法的图示。在第 l 层(左),采用常规的窗口划分方案,并在每个窗口内计算自注意力。在下一层 l 1 (右)中,窗口分区被移动,产生新的窗口。新窗口中的自注意力计算跨越了第 l 层中先前窗口的边界,提供了它们之间的连接。因为 Transformer 计算的是全局的自注意力,如果 swin 仅仅关注每一个窗口里面的注意力,那么语意信息就回丢失很多,所以作者就想利用移动窗口去融合更多窗口的信息。

        长期以来,计算机视觉建模一直由卷积神经网络 (CNN) 主导。从 AlexNet [39] 及其在 ImageNet 图像分类挑战中的革命性表现开始,CNN 架构已经演变为通过以下方式变得越来越强大,可以有更大的尺度 [30, 76],更广泛的连接 [34],以及更复杂的卷积形式 [70, 18, 84]。随着 CNN 作为各种视觉任务的骨干网络,这些架构上的进步带来了性能改进,从而广泛提升了整个领域。

        另一方面,自然语言处理 (NLP) 中网络架构的演变采取了不同的路径,如今流行的架构是 Transformer [64]。 Transformer 专为序列建模和转导任务而设计,以使用注意力来建模数据中的长期依赖关系而著称。它在语言领域的巨大成功促使研究人员研究它对计算机视觉的适应性,最近它在某些任务上展示了有希望的结果,特别是图像分类 [20] 和联合视觉语言建模 [47]。

        在本文中,我们寻求扩展 Transformer 的适用性,使其可以作为通用的计算机视觉的骨干,就像它对 NLP 和 CNN 在视觉中所做的那样。我们观察到,将其在语言领域的高性能转移到视觉领域的重大挑战可以通过两种模式之间的差异来解释。这些差异之一就是尺度问题。与作为语言转换器中处理的基本元素的单词标记不同,视觉元素的规模可以有很大的不同,这是在对象检测等任务中受到关注的问题 [42,53,54]。在现有的基于 Transformer 的模型 [64, 20] 中,token 都是固定规模的,不适合这些视觉应用的属性。另一个区别是与文本段落中的单词相比,图像中像素的分辨率要高得多。存在许多视觉任务,例如语义分割,需要在像素级别进行密集预测,这对于 Transformer 在高分辨率图像上来说是难以处理的,因为其自注意力的计算复杂度是图像大小的二次方。为了克服这些问题,我们提出了一个通用的 Transformer 主干,称为 Swin Transformer,它构建分层特征图,并且对图像大小具有线性计算复杂度。如图 1(a) 所示,Swin Transformer 通过从小尺寸的补丁(灰色轮廓)开始并逐渐合并更深的 Transformer 层中的相邻补丁来构建分层表示。借助这些分层特征图,Swin Transformer 模型可以方便地利用高级技术进行密集预测,例如特征金字塔网络 (FPN) [42] 或 U-Net [51]。线性计算复杂度是通过在分割图像的非重叠窗口中本地计算自注意力来实现的(红色轮廓)。每个窗口中的补丁数量是固定的,因此复杂度与图像大小成线性关系。这些优点使 Swin Transformer 适合作为各种视觉任务的通用主干,相比之下之前基于 Transformer 的架构 [20] 产生单一分辨率的特征图并具有二次复杂度。 

        Swin Transformer 的一个关键设计元素是它在连续的 self-attention 层之间移动窗口分区,如图 2 所示。移动的窗口桥接前一层的窗口,提供它们之间的连接,从而显着增强建模能力(见表4)。这种策略对于现实世界的延迟也很有效:一个窗口内的所有 quary 补丁共享相同的 key  ,这有助于硬件中的内存访问。相比之下,早期基于滑动窗口的自注意力方法 [33, 50] 由于不同 quary 像素的不同 key 而在通用硬件上存在低延迟。我们的实验表明,所提出的移位窗口方法的延迟比滑动窗口方法低得多,但建模能力相似(见表 5 和表 6)。移位窗口方法也被证明对全 MLP 架构有益[61]。

        所提出的 Swin Transformer 在图像分类、目标检测和语义分割的识别任务上取得了强大的性能。它显着优于 ViT / DeiT [20, 63] 和 ResNe(X)t 模型 [30, 70],在三个任务上具有相似的延迟。它在 COCO 测试开发集上的 58.7 盒 AP 和 51.1 掩码 AP 超过了以前的最先进结果 2.7 盒 AP(没有外部数据的复制粘贴 [26])和 2.6 掩码 AP(DetectoRS [46] )。在 ADE20K 语义分割上,它在 val 集上获得了 53.5 mIoU,比之前的最新技术(SETR [81])提高了 3.2 mIoU。它还在 ImageNet-1K 图像分类上实现了 87.3% 的 top-1 准确率。

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

3. Method

3.1 Overall Architicture

        图 3 展示了 Swin Transformer 架构的概述,该图说明了微型版本 (SwinT)。它首先通过像 ViT 这样的 Patch Partition 将输入的 RGB 图像分割成不重叠的补丁。每个补丁都被视为一个 token ,其特征被设置为原始像素 RGB 值的串联。在我们的实现中,我们使用 4 × 4 的补丁大小,因此每个补丁的特征维度为 4 × 4 × 3 = 48。线性嵌入层应用于这个原始值特征,以将其投影到任意维度(记为 C)。

        这些 patch token 上应用了一些改进过的自注意块(SWIN Ttamsformer blocks)。 Transformer 块保持 token 的数量(H/4 × W/4),并与线性嵌入层一起被称为“Stage 1”。

        为了产生分层表示,随着网络变得更深,通过补丁合并层(patch merging)减少token 的数量。第一个 patch merging 将每组 2×2 相邻 patch 的特征串联,并在 4C 维串联特征上应用线性层。这将 token 数量减少了 2×2 = 4 的倍数(2× 分辨率下采样),并且输出维度设置为 2C。之后应用 Swin Transformer 块进行特征转换,分辨率保持在 H/8 × W/8 。patch merging 和特征转换的第一个块表示为“Stage 2”。该过程重复两次,为“Stage 3”和“Stage 4”,输出分辨率分别为 H/16 × W/16 和 H/32 x W/32 这些阶段共同产生层次表示,具有与典型卷积网络相同的特征图分辨率,例如 VGG [52] 和 ResNet [30]。因此,所提出的架构可以方便地替换现有方法中用于各种视觉任务的骨干网络。

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

3.2. Shifted Window based Self-Attention 

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

        作为 Swin Transformer 的一个关键元素,基于移位窗口的自注意在视觉问题上被证明是有效和高效的,我们也期待研究其在自然语言处理中的应用。非重叠窗口中的自注意力为了有效建模,我们建议在局部窗口内计算自注意力。窗口被布置成以不重叠的方式均匀地划分图像。假设每个窗口包含 M × M 个 patch ,一个全局 MSA 模块和一个基于窗口的模块的计算复杂度在 h × w 块的图像上是 :

其中,前者是 patch 大小为 hw 的二次方,后者在 M 固定时是线性的(默认设置为 7)。全局自注意力计算通常对于大的 hw 来说是负担不起的,而基于窗口的自注意力是可扩展的。

        连续块中的移位窗口分区。基于窗口的自注意模块缺乏跨窗口的连接,这限制了其建模能力。为了在保持非重叠窗口的有效计算的同时引入跨窗口连接,我们提出了一种移位窗口分区方法,该方法在连续 Swin Transformer 块中的两个分区配置之间交替。

        如图 2 所示,第一个模块使用从左上角像素开始的常规窗口划分策略,8 × 8 特征图被均匀划分为大小为 4 × 4 (M = 4) 的 2 × 2 窗口。然后,下一个模块采用与前一层不同的窗口配置,通过将窗口从规则的分区的窗口中移动 (⌊ M/2 ⌋ , ⌊ M/2 ⌋ ) 个像素。

        使用移位窗口分割方法,连续的 Swin Transformer 块计算为:

        其中 \hat{z}^{l} 和 \hat{z} 分别表示块 l 的 (S)W-MSA 模块和 MLP 模块的输出特征;W-MSA 和 SW-MSA 分别表示使用常规和移位窗口分区配置的基于窗口的多头自注意。

        移位窗口分割方法在前一层中引入了相邻非重叠窗口之间的连接,并被发现在图像分类、对象检测和语义分割中是有效的,如表 4 所示。

        移位配置的高效批量计算。移位窗口分区的一个问题是它会导致更多的窗口,从         ⌈ h/M ⌉ × ⌈ w/M ⌉ 到 ⌈ h/M ⌉+1 × ⌈ w/M ⌉+1 ,并且一些窗口将小于 M × M  。一个简单的解决方案是将较小的窗口填充到 M × M 的大小,并在计算注意力时屏蔽掉填充的值。当常规分区中的窗口数量较少时,例如 2 × 2,使用这种简单的解决方案增加的计算量是相当大的(2 × 2 → 3 × 3,是 2.25 倍)。在这里,我们通过向左上方向循环移位提出了一种更有效的批处理计算方法,如图 4 所示。在这种移位之后,批处理窗口可能由几个在特征图中不相邻的子窗口组成,因此采用掩蔽机制将自注意力计算限制在每个子窗口内。通过循环移位,批处理窗口的数量保持不变 与常规窗口分区相同,因此也是有效的。这种方法的低延迟如表 5 所示。 

        相对位置偏差。在计算 self-attention 时,我们遵循 [49, 1, 32, 33],在计算相似度时包括每个头部的相对位置偏差 B\in \mathbb{R}^{M^{2}\times M^{2}}  :

其中 Q, K, V \in \mathbb{R}^{M^{2}\times d}  是 query 矩阵、key 矩阵和 value 矩阵; d 是query 和 key 维度,M^{2} 是窗口中的补丁数。由于沿每个轴的相对位置位于 [−M+1, M −1] 范围内,我们将较小尺寸的偏置矩阵 B\in \mathbb{R}^{2M-1 \times 2M-1}  参数化,取 B 中的值来自 \hat{B}

        我们观察到与没有此偏差项或使用绝对位置嵌入的对应物相比有显着改进,如表 4 所示。如 [20] 中进一步向输入添加绝对位置嵌入会略微降低性能,因此在我们的实现中未采用它。

        在预训练中学习到的相对位置偏差也可用于通过双三次插值 [20, 63] 初始化模型以使用不同的窗口大小进行微调。

3.3 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。这些模型变体的架构超参数是:

其中 C 是第一阶段隐藏层的通道数。表 1 列出了 ImageNet 图像分类模型变体的模型大小、理论计算复杂度 (FLOP) 和吞吐量。


网络结构讲解

        通过网络结构图我们可以看到, swin 分成了不同的 stage ,每个 stage 都是由 Patch Merging + Swin Transformer Block 组成(除了第一个 stage )

        可以看到输入的图像是 H \times W \times 3 ,经过 Patch Partition 对原始图像进行分块,每个 patch 大小是 4 \times 4 \times 3,我们把所有的 patch 在通道维度上展平,输出的通道数就变成了4 \times 4 = 16, \ 16 \times 3=48。所以输出的 sahpe 变成了 \frac{H}{4}\times \frac{W}{4} \times 48 。

        由于 Transformer 的输入与输出其实是保持一致的,所以在 Linear Embedding 只是线性变换。将通道数变为 C ,而 Patch Merging 实现了高宽减半,维度翻倍的操作。所以图像尺寸变为:  \frac{H}{4}\times \frac{W}{4} \times C \rightarrow \frac{H}{8}\times \frac{W}{8} \times 2C\rightarrow \frac{H}{16}\times \frac{W}{16} \times 4C\to \frac{H}{32}\times \frac{W}{32} \times 8C 。

        注意这里的 Swin Transformer Block 的数量都是 2 的倍数 [2, 2, 6, 2] ,因为 block 有两种结构 (b) ,这两个结构都是对 Transformer 中的 Multi-Head Self-Attention 进行改进,第一个是 W-MSA (window),第二个使用 SW-MSA (shifted window)。

Patch Partition + Linear Embedding 详解

        在前面网络结构里我们就提到了这两个模块,这一部分和 Transformer 中的 Embedding 层一模一样,使用一个卷积核大小为 4 ,步长为 4 的卷积操作就实现了这部分功能。然后 Flatten 展平就可以输入到 Swin Transformer Block 啦。

Patch Merging 详解

        有结构图我们可以看出来,Patch Merging 主要做的还是一个下采样的操作使得高宽减半,维度翻倍,但并不是一个简单的卷积或者是 pooling 操作

Patch Merging 对于输入的图像按照 2 x 2 大小划分为不同的 patch ,然后对每一个 patch 中相对位置一样的进行组合拼接,然后经过 LayerNorm 和 Linear 层得到输出。

Swin Transformer Block 详解

W-MSA 详解

        W-MSA 是 Window-Multi-Head Self-Attention 模块,之前的 Transformer 也好,ViT 也好都是通过全局的自注意力机制计算的。但是 swin 不再采用全局的自注意力,而是对每一个 window 采取自注意力计算,这样的操作大大的降低了计算复杂度。论文里面也明确的提出来关于两种方式的计算复杂度公式:

\Omega(MSA)=4hwC^{2}+2(hw)^{2}C​​​​​​​

\Omega(W-MSA)=4hwC^{2}+2M^{2}hwC

        我们看一下这个公式是怎么来的?在看具体计算之前我们首先要知道,当两个矩阵相乘时,如果两个矩阵 A 和 B , A\in \mathbb{R}^{n\times m},\ B\in \mathbb{R}^{m\times k}\rightarrow A\times B\in \mathbb{R}^{n\times k} ,那么计算复杂度为: n \times m\times k 。

可能看起来仅仅是 M^{2} 和 hw 的差距,但是这个差距在实际运算中有很大的差距。

SW-MSA 详解

        前面的 W-MSA 极大的减小了 Transformer 输入的 token 数量,使得计算复杂度降低很多。但是这也导致了原本是全局都可以计算注意力,但现在却被限制到 window 的范围内,窗口之间无法进行“交流”。为了改善这一问题,作者提出了移位窗口的方法。

因为 W-MSA 和 SW-MSA 是成对出现的,所以当特征图被划分成 M x M 大小的 window 后(称为第 L 层),那送入到 SW-MSA 会将这个窗口从左上角向右下角方向移动 \left \lfloor \frac{M}{2} , \frac{M}{2}\right \rfloor 个单位,得到新的窗口划分(称为第 L + 1 层),然后对新的 window 计算 Self-Attention 。

        由于使用的是 Transformer 架构,输入应该保持统一 都是 M x M 个 token,但是如果这样划分,不仅窗口变多,连窗口的尺寸都发生了变化。 所以,作者提出新的方案,现对特征图进行相应的平移,再进行窗口划分,然后再还原平移。

我们先看一下 cyclic shift 部分:

        由于移动 \left \lfloor \frac{M}{2} , \frac{M}{2}\right \rfloor 个单位,所以特征图的四边都存在不规则的矩形。所以作者采取 从特征图上方 \left \lfloor \frac{M}{2} \right \rfloor 行平移到底部,再将左侧 \left \lfloor \frac{M}{2} \right \rfloor 列平移到右侧,进行互补。

        我们取了一个比较极端的例子作说明,h = w = 6 , M = 3 ,\left \lfloor \frac{M}{2} \right \rfloor = 1 。我们先把从上面数 1 行( \left \lfloor \frac{M}{2} \right \rfloor )平移到最下面,然后将左侧 1 列( \left \lfloor \frac{M}{2} \right \rfloor )平移到左侧,得到我们图中最右边的样子。因为我们选择的窗口是 M x M 大小,所以我们得到新的 window:

        这样就保证了每一次计算的大小还是 M x M 。但是,如果是这样去计算窗口内的 Self-Attention 好像没什么道理,毕竟如果图中最上面是天空,最下面是土地,那我把天空移到最下面去和土地拼接计算注意力,感觉怪怪的。所以作者为了防止这个问题,提出了利用 mask 来解决不同区域之间不再进行计算。

        以右下角的 window 为例:

        我们把相乘后颜色相同的区域设为 0 ,不同颜色的区域设为 -100 ,那么就可以得到一个 mask 矩阵。由于有颜色的区域的值本身就很小,当 -100 以后,再经过 softmax 函数,就会让该区域的值趋于 0 。

计算完 Attention 以后,我们还需要将图像还原回 shifted 之前的形状。

Relative Position 详解

        在本文中,作者并没有添加绝对位置信息,而是加入相对位置偏移,B 

Attention(Q,K,V)=SoftMax(\frac{QK^T}{\sqrt{d_{k}}}+B)V

        作者观察到与没有此偏差项或使用绝对位置嵌入的对应物相比有显着改进,向输入添加绝对位置嵌入会略微降低性能,因此在作者的实现中未采用它。

我们看一下 B 是怎么实现的,以 2 x 2 为例:

当我们得到最后的相对位置偏索引,然后根据索引寻找对应的参数,这参数是可以学习的,长度为 (2M-1) \times (2M-1) 。然后就可以得到相对位置偏移矩阵。


4. Experiments

 

不同版本的 Swin Transformer 

表中就是不同版本 swin 的各个参数。可以根据实际任务去挑选不同的模型。 

5. Conclusion

        本文介绍了 Swin Transformer,这是一种新的视觉 Transformer,可产生分层特征表示

并且相对于输入图像大小具有线性计算复杂度。 Swin Transformer 在 COCO 对象检测和 ADE20K 语义分割方面实现了最先进的性能,显着超越了以前的最佳方法。我们希望 Swin Transformer 在各种视觉问题上的强大表现将鼓励视觉和语言信号的统一建模。

        作为 Swin Transformer 的一个关键元素,基于移位窗口的自注意在视觉问题上被证明是有效和高效的,我们也期待研究其在自然语言处理中的应用。

猜你喜欢

转载自blog.csdn.net/like_jmo/article/details/126379595