Swin-Transformer论文笔记

2021 ICCV最佳论文:Swin Transformer: Hierarchical Vision Transformer using Shift Windows

arxiv

swin transformer结构图

摘要:

本文介绍了一种新的视觉 Transformer,称为 Swin Transformer,它可以作为计算机视觉的通用主干。将 Transformer 从语言应用到视觉的挑战来自两个领域之间的差异,例如视觉实体规模的巨大变化以及与文本中的文字相比图像中像素的高分辨率。为了解决这些差异,我们提出了一种分层 Transformer,其表示是使用 Shifted 窗口计算的。移位窗口方案通过将自注意力计算限制在非重叠的本地窗口同时还允许跨窗口连接来提高效率。这种分层架构可以灵活地在各种比例下进行建模,并且相对于图像大小具有线性计算复杂度。 Swin Transformer 的这些品质使其能够兼容广泛的视觉任务,包括图像分类(ImageNet-1K 上的 87.3 top-1 精度)和密集预测任务,例如对象检测(COCO testdev 上的 58.7 box AP 和 51.1 mask AP)和语义分割(ADE20K val 上的 53.5 mIoU)。它的性能在 COCO 上大大超过了之前的 state-of-the-+2.7 box AP 和 +2.6 mask AP,在 ADE20K 上超过了 +3.2 mIoU,展示了基于 Transformer 的模型作为视觉主干的潜力。分层设计和移位窗口方法也证明对全 MLP 架构有益。

swin transformer与vit的多尺度感知和计算复杂度

在这里插入图片描述

图中(b)中的16表示的是patch size的大小是16*16,也就是vit中的“补丁”块的大小。vit在进行整张图片的patch后是可以学习到图片的全局特征,但是无法学习到图片的多尺度特征,且vit是在整张图片上进行自注意力机制,所以计算复杂度与图片的大小成平方倍。图(a)中swin transformer在patch内部进行自注意力机制计算,然后通过合并patch来构建分层特征映射。由于其仅在每个局部窗口(以红色显示)内部计算自注意力,模型具有与输入图像大小的线性计算复杂度。

Swin Transformer 整体结构

swin transformer结构图
假设输入图片的H,W,C为224 x 224 x 3。patch的大小使用的是4 x 4,所以每个patch的特征维度为4 x 4 x 3=48。patch partition是将原图像打成一个个的小patch,输出为56 x 56 x 48,共56 x 56个patch。然后将特征向量输入到Linear embedding层将其投影到任意维度C。然后作者将3136 x C的特征向量输入到swin transformer block中进行窗口自注意力计算和滑动窗口自注意力计算。输出为56 x 56 x C。为了产生类似卷积神经网络分层表示,随着网络变深,作者使用patch merging减少patch的数量。在stage 2中作者合并连接每组2x2相邻patch的特征(类似2倍的下采样),即每隔一个patch取一个patch。由此产生了四组大小是原特征图1/4倍的小特征图,作者在channel上将这四组特征图进行拼接,产生了4C的通道数,为了和卷积神经网络保持一致,每次下采样卷积通道数翻倍的特点,作者又将其通道数降为2C大小。这过程被重复了两次(stage 3,4),每次的输出特征图大小分别为输入的1/2倍,通道数为原来的2倍。

Swin Transformer block

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

窗口自注意力计算复杂度(W-MAS)

为了高效建模,作者建议在局部窗口中计算自我注意力。 窗口被布置成以非重叠方式均匀地划分图像。 假设每个窗口包含M × M个patch,在一张h * w的图片上,全局MSA模块和基于窗口的MSA模块的计算复杂度如下所示:
在这里插入图片描述
假设输入的特征向量大小为hw * C,自注意力机制首先要经过C * C大小的线性投影产生大小为hw * C的Q,K,V。这里的计算复杂度为 3 * (hwC^2) 。 然后Q和K的转置做矩阵乘法产生hw * hw大小的权重矩阵,计算复杂度为 (hw)^2 * C。接下来就是权重矩阵和V相乘,计算复杂度还是(hw)^2 * C。所以总的复杂度如上式 (1) 所示。W-MSA计算复杂度的计算与MSA类似,只不过其实在一个大小为M * M的窗口内计算的,一共有h/M * w/M个窗口,所以W-MSA的计算复杂度如上式 (2)所示。作者在计算复杂度时忽略了softmax的计算量。通常来说M * M一般是比较小的(如7 * 7),但是h * w就非常大了。所以W-MSA可以大大减少计算的复杂度。

移动窗口分区的注意力计算

基于窗口的自注意模块缺乏跨窗口的连接,这限制了其建模能力。 为了引入跨窗口连接,同时保持非重叠窗口的高效计算,我们提出了一种移动窗口分区方法,该方法在连续的 Swin Transformer 块中在两个分区配置之间交替。
在这里插入图片描述
如图所示,swin transformer block中第一个模块使用从左上角像素开始的常规窗口分区策略,而8×8特征映射均匀分区为2×2个大小4×4(M=4)的窗口。 然后,下一个模块采用从前一层转移的窗口配置,该图是将窗口向右下移动M/2向下取整,产生了9个新的小窗口,每个小窗口中的patch(类似于NLP中的token)不全相同。

移位配置的高效批量计算

在这里插入图片描述
移动窗口产生的问题:使用移动窗口会产生更多的窗口,而且一些窗口将小于M * M的窗口大小。于是作者提出的解决方案是先使用循环位移,将左上角A,B,C小窗口分别填充到右下角相应位置形成大小为M * M的窗口,批处理的窗口可能由几个在特征图中不相邻的子窗口组成,如图中cyclic shift后的图,新形成的四个窗口中有三个窗口存在不相邻的子窗口(C A B),然后在计算注意力时使用掩码模板将自主意力计算限制在各自的窗口中(即不存在自注意力关系的值屏蔽掉)。在自主意力计算后为了保证原有特征图的相对位置信息,我们需要将循环移位后的子窗口移回去,即图中 Reverse Cyclic shift操作。

总结

作者为了让应用于视觉的Transformer也能产生分层特征,同时减少模型的计算复杂度,提出了基于滑动窗口的Transformer — Swin-Transformer。它使用W-MSA模块降低计算复杂度,使用SW-MSA模块使不同窗口之间产生关联,在SW-MSA模块计算中使用循环移位和掩码模板对来加快计算速度和保证模型只在子窗口内进行自主意力计算。为产生分层特征,作者使用patch-merging模块来减少patch的数量(类似于卷积网络中的下采样)。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡比兽-Carpe_diem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值