Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
- 摘要
- 当前的检测sota模型
- 网络架构
- swin Transformer和Vision Transformer的不同之处
- 整体架构
- Patch Partition结构
- Linear Embedding结构
- Swin Transformer Block结构
- Patch Merging
- W-MSA
- MSA模块计算量
- W-MSA模块计算量
- SW-MSA
- SW-MSA如何滑动窗口
- SW-MSA如何高效批量计算
- Relative Position Bias
- 实验效果展示
- Relative Position Bias的实现
- 参数配置
论文地址:https://arxiv.org/abs/2103.14030
源码地址:https://github.com/microsoft/Swin-Transformer
摘要
本文介绍了一种名为 Swin Transformer 的新型视觉Transformer,它可以作为计算机视觉的通用骨干。将 Transformer 从语言应用到视觉领域所面临的挑战来自这两个领域的差异,例如视觉实体的尺度变化很大,以及与文本中的文字相比,图像中像素的分辨率较高。为了解决这些差异,我们提出了一种分层Transformer,其表示是通过移位窗口计算的。移位窗口方案将自我关注计算限制在非重叠的局部窗口,同时允许跨窗口连接,从而提高了效率。这种分层结构可以灵活地进行各种规模的建模,其计算复杂度与图像大小成线性关系。Swin Transformer 的这些特质使其能够兼容广泛的视觉任务,包括图像分类(ImageNet-1K 上的 Top-1 准确率为 87.3)和密集预测任务,如物体检测(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 架构。代码和模型可在以下网址公开获取。
当前的检测sota模型
网络架构
swin Transformer和Vision Transformer的不同之处
- swin Transformer构建具体层次性的特征图
- swin Transformer使用窗口将特征图分割开
swin Transformer在窗口内执行Multi Head self attention的计算,窗口和窗口之间不进行信息的传递
Vision Transformer
整体架构
Patch Partition结构
使用4x4大小的窗口对图像分割,并展平。
Linear Embedding结构
调整图像channel,从48到c
在代码中,使用卷积层实现的
Swin Transformer Block结构
的组成为:
关于MSA:MSA
关于W-MSA和SW-MSA,后面详细论述
Patch Merging
特征图高和宽减少一半,特征图channel翻倍
W-MSA
在多头注意力的基础上引入窗口的概念
目的:减少计算量
缺陷:窗口之间无法进行信息交互
MSA:对每一个像素求q,k,v,然后将每一个像素求得的q和其他所有像素求的的k进行计算。
可以理解为在MSA中,每个像素都和所有的像素存在信息的沟通
W-MSA:在每个窗口内部进行MAS操作,但是不同窗口之间是没有通讯的
MSA模块计算量
W-MSA模块计算量
SW-MSA
SW-MSA如何滑动窗口
全称:shifted window -MSA
目的:实现不同窗口之间的信息交互
在拟议的 Swin Transformer 架构中计算自我注意力的移动窗口方法示意图。在第 l 层(左),采用常规窗口划分方案,并在每个窗口内计算自注意力。在下一个第 l + 1 层(右图)中,窗口划分会发生变化,从而产生新的窗口。新窗口中的自我注意力计算跨越了第 l 层中前一个窗口的边界,提供了它们之间的联系。
就是说:第 l 层采用W-MSA机制,第 l+1 层采用SW-MSA机制
移动窗口后:
l+1层通过滑动窗口融合了l层相邻窗口之间的信息,达到了相邻窗口之间融合的目的
SW-MSA如何高效批量计算
移位窗口中自我关注的高效批量计算方法说明
-
第一步
-
第二步
-
第三步
然后将步骤三得到的图像按照4x4的窗口划分区域:
对于4区域,已经完成了融合 l 层中不同窗口的目的
因此对于4,之间进行MSA的计算
但对于右上角的区域,由5和3组成,需要分隔开进行MSA的计算
论文中使用的方式是:mask
具体的实现为:
这样就在一个窗口的MSA计算中,将区域5和区域3分隔开了
全部计算完成后,在将数据挪回原来的位置
Relative Position Bias
这里的Relative Position Bias就是公式中的 B
实验效果展示
可以看到使用绝对位置偏置的效果并不好
使用相对位置偏置达到最好的效果
Relative Position Bias的实现
- 第一步
将其展平,组成最终
- 第二步
偏移从0开始,行列标加M-1
这里M=2.所以M-1=1
- 第三步
行标乘 2M-1
- 第四步
行标列标相加
将二元坐标转换为一元坐标
- 对应相对位置偏置表
网络中训练的是 relative position bias table中的值。