当前位置:网站首页>Swin Transformer 论文精读,并解析其模型结构
Swin Transformer 论文精读,并解析其模型结构
2022-08-02 20:43:00 【Flying Bulldog】
计算机视觉的建模从AlexNet在ImageNet分类挑战的良好表现开始,然后到目标检测的SSD、RCNN、YOLO等模型,一直由CNN主导。直到NLP领域中Transformer的崛起,并经ViT应用到视觉领域后,我们感受到了Transformer全局建模的强大之处。如摘要所述,相对于NLP,图像喂入Transformer 的计算复杂度很高,故 Swin Transformer 诞生了,接下来通过精读此论文来揭晓 Swin 的创新思想。
目录
(4)相对位置偏差:Relative position bias
一、摘要
本文提出了一种新的 vision Transformer,称为 Swin Transformer,它可以作为计算机视觉的通用支柱。将 Transformer 从语言转换为视觉的挑战来自于两个域之间的差异,例如视觉实体的尺度差异大,以及图像中像素相对于文本中单词的高分辨率。为了解决这些差异,我们提出了一个分层(hierarchical )Transformer,其表示是用移动窗口( Shifted windows )计算的。移动窗口方案通过将自注意力计算限制到非重叠的局部窗口,同时允许跨窗口连接,从而带来更高的效率。这种分层体系结构具有在各种尺度上建模的灵活性,并且具有与图像大小相关的线性计算复杂度。Swin Trans former 的这些特性使其可以兼容广泛的视觉任务,包括图像分类( ImageNet - 1K的top - 1准确率为87.3 %)和密集预测任务,如目标检测( 在COCO test-dev上实现了58.7 box AP和51.1 mask AP )和语义分割( 53.5 mIoU )。2021年,其性能在COCO上以 + 2.7 box AP 和 + 2.6 mask AP 的大幅优势超越了先前的先进水平,在ADE20K上以+ 3.2 mIoU的优势超越了先前的先进水平,显示了基于 Transformer 的模型作为视觉中枢的潜力。分层设计和移位窗口方法也被证明对 full-MLP 体系结构有利。
论文链接:https://arxiv.org/abs/2103.14030
源码和模型链接:https://github.com/microsoft/Swin-Transformer
二、结论

表6 Swin Transformer在三个 benchmarks 测试集上使用不同方法进行自注意力计算的准确性
本文提出了一种新的 vision Transformer:Swin Transformer,它产生一个分层的特征表示,并且具有与输入图像大小有关的线性计算复杂度。2021年,Swin Transformer在COCO目标检测和ADE20K语义分割上取得了最先进的性能,大大超过了以前最好的方法。我们希望Swin Transformer在各种视觉问题上的强大性能将鼓励视觉和语言信号的统一建模。
作为 Swin Transformer 的关键元素,基于移动窗口的自注意力机制被证明在视觉问题上是有效和高效的,我们也期待着研究其在自然语言处理中的应用。
三、凉菜:简单分析两个窗口

图1 Swin 的分层特征结构图
- ( a )所提议的 Swin Transformer 通过在更深的层中合并图像块( merging image patches )来构建分层特征图,由于仅在每个局部窗口内计算自注意力,因此其计算复杂度与输入图像大小呈线性关系。因此,它可以作为图像分类和密集识别任务的通用骨干。
- ( b )相比之下,先前的 vision Transformer《ViT》产生单一低分辨率的特征图,由于全局自注意力的计算,其计算复杂度是输入图像大小的二次方。

图2 Swin 的移动窗口概念图
- 在第 l 层(左),采用常规的窗口划分方案,并在每个窗口内计算自注意力。
- 在下一层 l + 1 (右) 中,窗口分区被移动,重新生成新的窗口。新窗口中的自注意力计算跨越了层 l 中前几个窗口的边界,提供了它们之间的联系。
四、主菜:Swin Transformer 模型结构
(1)Swin Transformer
Swin Transformer体系结构的概述如图3 所示,其中说明了 tiny version ( Swin-T )。它首先通过 patch 分割模块( 如ViT )将输入的RGB图像分割成不重叠的 patch 。每个 patch 被当作一个 "token" ( 相当于NLP中的词源 )处理,它的特征被设置为原始像素RGB值的 concatenation。在我们的实现中,我们使用了 4 × 4 的 patch 大小,因此每个 patch 的特征维度为 4 × 4 × 3 = 48。在这个原始值特征上应用一个线性嵌入层,将其投影到任意维度( 记为C )。

图3 Swin Transformer 体系结构及其模块细节图
- ( a )Swin Transformer ( Swin-T )的结构;
- ( b )连续 2 个Swin Transformer 块( 见公式( 3 ) )。
- 注意:W-MSA和SW-MSA分别是常规窗口和移动窗口配置的多头自注意力模块。

图3 ( a )中Swin-T的详细结构图(具体描述见文章末尾)
在这些 patch tokens 上应用了几个被修改的 self-attention Computing ( Swin Transformer blocks )的 Transformer 块。Transformer 块保持 tokens 的数量( H/4 × W/4 ),与线性嵌入一起称为"阶段1 "。
为了产生层次化的表示,随着网络的深入,通过 patch 合并层来减少 token 的数量。第一个面片合并层将每组 2 × 2 相邻面片的特征进行拼接,并在4C维的拼接特征上添加一个线性层。这将令牌的数量减少2 × 2 = 4( 2 ×分辨率下采样)的倍数,并且输出维度设置为2C。之后应用Swin Transformer块进行特征转换,分辨率保持在H/8 × W/8。这第一个块的块合并和特征变换被记为 '阶段2 '。该过程重复两次,作为"阶段3 "和"阶段4 ",输出分辨率分别为H/16 × W/16和H/32 × W/32。这些阶段共同产生一个分层表示,具有与典型卷积网络相同的特征图分辨率,如VGG和ResNet。因此,所提出的架构可以方便地替换现有方法中的主干网络,用于各种视觉任务。
(2)Swin Transformer block

图3 ( b )连续的两个 Swin Transformer block
Swin Transformer是将Transformer块中的标准多头自注意力( MSA )模块替换为基于移动窗口的模块,其他层保持不变。如图3 ( b )所示,一个 SwinTransformer 模块由一个基于移动窗口的MSA模块组成,其后是一个2层的MLP,GELU非线性介于两者之间。在每个MSA模块和每个MLP之前施加一个 LayerNorm ( LN )层,在每个模块之后施加一个残差连接。
五、硬菜:基于自注意力机制的移动窗口设计
标准的Transformer架构及其对图像分类的适应性都进行了全局自注意力,即计算一个token和所有其他token之间的关系。全局计算导致了关于token数量的二次复杂度,使其不适用于许多需要token集合进行密集预测或表示高分辨率图像的视觉问题。
(1)非重叠窗口中的自注意力
为了高效建模,我们建议在局部窗口内计算自注意力。窗口被安排以非重叠的方式均匀地分割图像。假设每个窗口包含M × M个patches,全局MSA模块和基于窗口的MSA模块在h×w个patches图像上的计算复杂度分别为:

其中前者是 patches 数量 h×w 的二次方,后者是线性的,当 M 是固定的(默认设置为7)。全局自注意力计算对于较大的 h×w ( 即高分辨率图像 )通常是无法承受的,而基于窗口的自注意力是可扩展的。

图2 Swin 的移动窗口概念图(copy)
(2)连续块内的移动窗口划分
基于窗口的自注意力模块缺少跨窗口的连接,这限制了它的建模能力。为了在引入跨窗连接的同时保持非重叠窗口的高效计算,我们提出了一种在连续 Swin Transformer 块中交替使用两种划分配置的移位窗口划分方法。
如图2 所示,第一个模块采用从左上角像素开始的常规窗口划分策略,将8 × 8的特征图均匀划分为大小为4 × 4 ( M = 4 )的2 × 2窗口。然后,下一个模块采用另一种窗口配置:通过将窗口从常规分区的窗口中移除
像素。

图3 ( b )连续的两个 Swin Transformer block
采用移动窗口划分方法,连续的 Swin Transformer block 计算如下:

其中
分别表示 block l 的 (S)W-MSA 模块和 MLP 模块的输出特征;W-MSA和SW-MSA分别表示使用常规窗口和移动窗口分区配置的基于窗口的多头自注意力。
移位窗口分区方法在前一层中引入了相邻非重叠窗口之间的连接,并且在图像分类、目标检测和语义分割中被发现是有效的,如表4 所示。

表4 Swin-T体系结构在三个基准上对移位窗口方法和不同位置嵌入方法进行了消融研究
- w/o shifting:所有自注意力模块均采用常规的窗口划分,无移动;
- abs. pos:ViT的绝对位置嵌入项;
- rel. pos:带有一个附加的相对位置偏差项的默认设置( 公式( 4 ) );
- app:公式( 4 )中的第一个尺度点积项 .
(3)核心:针对移位配置的高效批处理计算

图4 移位窗口分区中自注意力的高效批处理计算方法的说明
转换窗口分区的问题:
在转换的配置中,它将导致更多的窗口,从
to ![]()
,其中一些窗口将小于M × M。
解决方案:
一个幼稚的解决方案是将较小的窗口裁剪为M × M大小,并在计算注意力时掩盖( mask )填充值。当常规划分的窗口数较少( 如2 × 2 )时,该幼稚的解决方案增加的计算量相当大( 2 × 2 → 3 × 3 , 提高了2.25倍 ),所以此方案被舍弃。
为了高效的解决此问题,作者提出了一种更有效的向左上方循环移位( cyclic-shifting )的批处理计算方法,如图4 所示。在这个移位之后,一个批处理窗口( batched window )可能由几个在特征图中不相邻的子窗口组成,因此使用一个掩码机制将自注意力计算限制在每个子窗口内。通过循环移位,批处理窗口的数量保持与常规窗口分区的数量相同,因此也是有效的。该方法的低延迟( 高效性 )如表5 所示。

表5 不同自注意力计算方法的真实速度和在V100 GPU上的实现
总结:
假设把窗口分为2×2个区域,因为自注意力的计算被限制在局部窗口内,这样获取不了全局信息,所以提出了移动窗口,正如先前所述,我们探讨了问题和解决方案,最终高效的解决了该问题。如表5 所示,常规窗口ms=1.5,移动窗口( padding )ms=2.2,移动窗口( cyclic )ms=1.0,对比效果非常明显。
为什么会高效呢?
- 幼稚的解决方案计算量:划分为9个窗口,不移动的前提下,9个窗口的自注意力计算量和4个窗口的计算量比较:3×3 / 2×2 = 2.25,故此方案行不通。
- 移动窗口的计算量:首先通过循环位移去移动窗口,然后通过注意力机制计算2×2个分区窗口的局部注意力,最后在进行反向循环位移,得到原窗体结构,故计算量几乎不变。
- 注:移动的计算量可以忽略不计。
(4)相对位置偏差:Relative position bias
在计算自注意力时,作者通过在计算相似度时给每个注意力头加上一个相对位置偏差
,公式如下:
![]()
其中,
代表查询、键和值矩阵; d 为查询/键维度,M^2 为窗口内的 patch 数量。由于沿各坐标轴的相对位置在范围 [ - M + 1 , M-1] 内,所以我们参数化一个更小的偏差矩阵
,
中的值取自
。

表4 Swin-T体系结构在三个基准上对移位窗口方法和不同位置嵌入方法进行了消融研究
- w/o shifting:所有自注意力模块均采用常规的窗口划分,无移动;
- abs. pos:ViT的绝对位置嵌入项;
- rel. pos:带有一个附加的相对位置偏差项的默认设置( 公式( 4 ) );
- app:公式( 4 )中的第一个尺度点积项 .
我们观察到,rel. pos 相对于不使用这一偏差项或使用绝对位置嵌入的情形,显著改善,如表4 所示。再如《Vision Transformer (ViT)》中对输入增加绝对位置嵌入,性能略有下降,因此在我们的实现中没有采用。
在预训练中学习到的相对位置偏差也可以用于初始化模型,通过双三次插值使用不同的窗口大小进行微调。
六、甜品:结构细节和实验
Swin Transformer 做了很多的实验,这里不做过多的赘述,建议到论文中看看表格和一些实验过程种的参数选取。在这里,主要表述一下 Swin 各类模型的结构和参数设计。
详细的体系结构规范如表7 所示,其中假定所有体系结构的输入图像大小为224 × 224。“Concat n×n” 表示一个 patch 中 n × n 个相邻特征的拼接。该操作导致特征图的下采样速率为 n。“96-d” 表示输出维度为 96 的线性层,“win.sz.7×7” 表示窗口大小为 7 × 7 的多头自注意力模块。

表7 详细的 Swin 架构设计

表8 在 ImageNet - 1K 分类数据集上,不同输入图像大小的不同 Swin 模型的性能
>>> 更多论文精读文章见大纲链接:
计算机视觉论文精度大纲_Flying Bulldog的博客-CSDN博客
https://blog.csdn.net/qq_54185421/article/details/125571690
边栏推荐
猜你喜欢

第七章 噪声
Solve the docker mysql can't write Chinese

2018HBCPC个人题解

The software testing process specification is what?Specific what to do?

"Weekly Translate Go" This time we have something different!-- "How to Code in Go" series launched

模糊查询like用法实例(Bee)

HCIP--路由策略实验

Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键

Common tools and test methods for interface testing (Introduction)

2022年金九银十,Android面试中高频必问的问题汇总
随机推荐
STP生成树协议
软件成分分析:华为云重磅发布开源软件治理服务
第七章 噪声
YARN资源调度系统介绍
【流媒体】推流与拉流简介
vscode如何能将输出从OUTPUT改为TERMINAL或者DebugConsole
用户之声 | 大学生的“课外学堂”
并发与并行
封装和包、访问修饰权限
[C题目]力扣138. 复制带随机指针的链表
Informatics Olympiad All-in-One (1260: [Example 9.4] Intercepting Missiles (Noip1999))
信息学奥赛一本通(1259:【例9.3】求最长不下降序列)
信息学奥赛一本通(1256:献给阿尔吉侬的花束)
Day35 LeetCode
C# Monitor类
2170. 使数组变成交替数组的最少操作数
包管理工具npm- node package management相关知识 、检查包更新、NPM包上传、更换镜像、npm ERR! registry error parsing json
Day12 接口和协议
Solve the docker mysql can't write Chinese
php 单引号 双引号 -> => return echo