Swin Transformer: Hierarchical Vision Transformer using Shifted Windows论文解读

目前在计算机视觉领域能够通用的Transformer骨干网络,而且在分类,检测,分割上都有着不俗的表现

引言

  • 作者的目的:就网络结构而言,CNN在计算机视觉上处于统治地位,Transformer在NLP上处于统治地位,作者想扩展Transformer在计算机视觉上比肩CNN,使其能够作为计算机视觉各种任务通用的骨干。
  • 两个挑战:
    • 规模(scale):与word token在transformer中作为基本处理元素不同,视觉元素可以在规模上有很大的变化,这是一个在对象检测等任务中需要注意的问题。在现有的基于transformer的视觉模型中,token都是固定规模的,这一属性不适合这些视觉应用。
    • 分辨率(resolution):图像的像素分辨率比文字段落中的文字高得多,目前存在许多视觉任务,如语义分割,需要在像素级进行密集预测,而这在高分辨率图像上对于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]产生的是单一的低分辨率特征图,由于全局自注意计算,输入图像尺寸的计算复杂度为二次。

理解:相比之前的Transformer模型,Swin-Transformer采用了分层提取特征的结构,每层的特征被划分为不同数量的窗口,每个窗口包含相同数量的patch,但是不同层patch的大小是不同的,而计算复杂度我找到一篇分析得很好的博客,我也不知道他是不是原创,也只看了这一个,觉得讲的挺清楚了,链接奉上,在3.1节:https://api.bbs.cvmart.net/articles/4620/vote_count?
为了防止链接失效,此处截图,如果作者看到之后不同意的话,随时联系我删除。在这里插入图片描述

  • Swin Transformer的一个关键设计元素是在连续的自注意层之间移动窗口分区,如图2所示。移位的窗口连接了前一层的窗口,提供了它们之间的连接,显著增强了建模能力(见表4)。这种策略对于真实世界的延迟也是有效的:窗口中的所有查询补丁共享相同的键集,这有利于硬件中的内存访问。(硬件知识,不懂)相比之下,早期基于滑动窗口的自我注意方法[33,50]在一般硬件上的延迟较低,因为不同的查询像素对应不同的键集。作者通过实验证明了移位窗口方法比滑动窗口方法有更低的延迟,但在建模能力方面是相似的(见表5和6)。移位窗口方法也被证明对全mlp架构是有益的[61]。
    在这里插入图片描述
    图2。说明了在提出的Swin Transformer架构中,用于计算自注意的移动窗口方法。在Layer 1(左)中,采用规则的窗口划分方案,在每个窗口内计算自注意。在下一层l + 1(右)中,窗口分区被移位,产生了新的窗口。新窗口的自注意计算跨越了之前l层窗口的边界,提供了它们之间的连接。

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

方法

总体架构

在这里插入图片描述图3。(a) Swin Transformer (Swin- t)的架构;(b)两个连续的Swin Transformer块(符号见式(3))。W-MSA和SW-MSA分别是具有规则窗口构型和移动窗口构型的多头自注意模块

  • 图3展示了Swin Transformer体系结构的概述,它演示了小型版本(SwinT)。它首先通过一个补丁分割模块(如ViT)将输入的RGB图像分割成非重叠的补丁。每个patch都被视为一个标记,其特征被设置为原始像素RGB值的串联。在我们的实现中,我们使用的patch大小为 4 ∗ 4 4 *4 44,因此每个patch的特征维数为 4 ∗ 4 ∗ 3 = 48 4 * 4 * 3 = 48 443=48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维度(记作 C C C)。
  • 在这些补丁标记上应用了几个带有修改的自注意计算的Transformer块(Swin Transformer块)。Transformer块维护tokens的数量 ( H / 4 ∗ W / 4 ) (H/4 * W/4) (H/4W/4),与线性嵌入一起称为阶段1。
  • 为了生成层次表示,随着网络的加深,通过补丁合并层减少令牌的数量。第一个patch merge层将每组 2 ∗ 2 2 * 2 22个相邻patch的feature进行拼接,并对拼接后的 4 C 4C 4C维feature应用线性层。这减少了tokens的数量,其倍数为 2 ∗ 2 = 4 2* 2 = 4 22=4(分辨率的2个向下采样),输出维度设置为 2 C 2C 2C。之后使用Swin Transformer块进行特征变换,分辨率保持在 H / 8 ∗ W / 8 H/8 * W/8 H/8W/8。这个补丁合并和特征转换的第一个块记为阶段2。该过程重复两次,分别为阶段3和阶段4,输出分辨率分别为 H / 16 ∗ W / 16 H/16 * W/16 H/16W/16 H / 32 ∗ W / 32 H/32 * W/32 H/32W/32。这些阶段共同产生具有与典型卷积网络(如VGG[52]和ResNet[30])相同的特征图分辨率的层次表示。因此,该体系结构可以方便地替代现有的各种视觉任务的骨干网。

设计成了带有下采样的四阶段网络结构,结构清晰

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

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

  • 标准的Transformer体系结构[64]及其对图像分类的自适应[20]都进行全局自注意,其中计算一个token与所有其他tokens之间的关系。全局计算导致了令牌数量的二次复杂度,这使得它不适用于许多需要大量tokens进行密集预测或表示高分辨率图像的视觉问题。
  • 为了高效建模,我们提出在局部窗口内计算自注意。通过排列窗口,以不重叠的方式均匀地分割图像。假设每个窗口包含 M ∗ M M * M MM个patch,全局MSA模块和基于 h ∗ w h*w hw patch图像的窗口的计算复杂度为:
    在这里插入图片描述
    其中前者是patch数量hw的二次,后者在M固定时(默认为7)是线性的。全局自注意计算对于大型硬件系统来说通常是负担不起的,而基于窗口的自注意是可伸缩的。
  • 基于窗口的自我注意模块缺乏跨窗口的连接,限制了其建模能力。为了引入跨窗口连接,同时保持非重叠窗口的高效计算,我们提出了一种移位窗口划分方法,它在连续的Swin Transformer块中的两个分区配置之间交替。如图2所示,第一个模块使用常规的窗口分区策略,从左上角的像素开始,将 8 ∗ 8 8 * 8 88的特征图均匀地划分为 2 ∗ 2 2 * 2 22个大小为 4 ∗ 4 4 * 4 44的窗口(M = 4)。然后,下一个模块采用了一个从上一层窗口进行移动的窗口配置,通过从规则分区的窗口移动( ⌊ M 2 ⌋ , ⌊ M 2 ⌋ \lfloor\frac{M}{2}\rfloor, \lfloor\frac{M}{2}\rfloor 2M,2M)像素。
  • 采用移位窗口划分方法,连续的Swin Transformer块计算为:
    在这里插入图片描述
    移位窗口划分方法引入了上一层相邻无重叠窗口之间的连接,发现该方法在图像分类、目标检测和语义分割方面是有效的,如表4所示。
  • 针对移位构型的高效批量计算:移动的窗口分区的一个问题是,它将导致更多的窗口,从 ⌈ h M ⌉ × ⌈ w M ⌉ \lceil \frac{h}{M}\rceil \times \lceil \frac{w}{M}\rceil Mh×Mw ( ⌈ h M ⌉ + 1 ) × ( ⌈ w M ⌉ + 1 ) \left( \lceil \frac{h}{M}\rceil + 1\right) \times \left( \lceil \frac{w}{M}\rceil + 1\right) (Mh+1)×(Mw+1)在移动的配置中,一些窗口将小于 M × M M \times M M×M。一个简单的解决方案是将较小的窗口填充到 M × M M \times M M×M的大小,并在计算注意力时屏蔽填充的值。当规则分区中的窗口数量很小时,例如 2 × 2 2 \times 2 2×2,这种朴素解增加的计算量是相当大的( 2 × 2 → 3 × 3 2 \times 2 \to 3 \times 3 2×23×3,是原来的2.25倍)。在这里,我们提出了一种更有效的批处理计算方法,即向左上角方向循环移动,如图4所示。在此转移之后,一个批处理窗口可能由几个在feature map中不相邻的子窗口组成,因此采用掩蔽机制将自注意计算限制在每个子窗口内。通过循环移位,批处理窗口的数量与常规窗口划分的数量保持一致,因此也是高效的。这种方法的低延迟如表5所示。
    在这里插入图片描述

这部分移位我觉得很精彩,但是讲得太笼统,可能后续需要看代码了解

  • 相对位置偏差在计算自注意时,遵循[49,1,32,33]的方法,在计算相似度时对每个头包含一个相对位置偏差 B ∈ R M 2 × M 2 B \in \mathbb R^{M^2 \times M^2} BRM2×M2
    在这里插入图片描述
    其中 Q , K , V ∈ R M 2 × d Q, K, V \in\mathbb{R}^{M^2 \times d} Q,K,VRM2×d为查询矩阵、键矩阵和值矩阵;d为查询/键的维数, M 2 M^2 M2为一个窗口内补丁的数量。由于每个轴上的相对位置在[-M + 1, M-1]范围内,我们参数化了一个较小尺寸的偏置矩阵 B ^ ∈ R ( 2 M − 1 ) × ( 2 M − 1 ) \hat B\in \mathbb R^{(2M-1) \times (2M-1)} B^R(2M1)×(2M1), B中的值是从 B ^ \hat B B^中取的。我们观察到,与没有这个偏差项或使用绝对位置嵌入的对照相比,有显著的改善,如表4所示。像[20]中那样,进一步向输入中添加绝对位置嵌入会略微降低性能,因此在我们的实现中没有采用它。通过双三次插值,可以将训练前学习到的相对位置偏差用于初始化不同窗口大小的微调模型.

结构变化

  • 我们构建了称为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为第一阶段隐藏层的通道数。ImageNet图像分类的模型尺寸、理论计算复杂度(FLOPs)和模型变量的吞吐量如表1所示。

实验

略过,只需要知道在分类,检测和分割都达到了SOTA的水平

本篇博客参考外部链接

  1. https://api.bbs.cvmart.net/articles/4620/vote_count?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值