论文:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
代码:https://github.com/microsoft/Swin-Transformer
目录
1 主要贡献
- Transformer架构在NLP领域已成为通行架构,但在CV领域应用尚不广泛,主要有两点原因:
- 语言处理以单词为基本元素,其尺度不变,而视觉中的基本元素可以有明显的尺度变化;
- 图片中像素的分辨率远高于文本中的单词;
- Swin Transformer针对以上问题,借鉴了CNN的经验,构建了具有多层特征图的Transformer骨干网络,其计算复杂度与图片尺寸成线性关系;
- Swin Transformer引入了连续的自注意力层的窗口分割的“移动”机制,解决了滑动窗口的延迟问题;
- Swin Transformer在图像分类、物体检测和语义分割任务中都取得了出色的结果。
2 原理
2.1 总体架构

上图为Swin-T(tiny)的结构。输入的RGB图片先先被分割为不重叠的patches,每个patch大小为4*4,特征维度为48。阶段一经过线性嵌入和两个Swin Transformer block,将每个patch映射到长度为C的向量。阶段二中将阶段一的输出中2*2的相邻patches进行聚合,经过线性层后输出长度为2C的向量,再使用两个Swin Transformer block进行特征处理。阶段三和阶段四的处理方式类似。这样分层可以获得与经典的CNN分辨率相同的特征图。
Swin Transformer block

上图表示两个连续的Swin Transformer blocks,其中W-MSA和SW-MSA分别表示常规的和移动窗口的多头自注意力模块。每个Swin Transformer block是用基于移动窗口的MSA替换标准的MSA得到的。
2.2 基于移动窗口的自注意力
2.2.1 不重叠窗口中的自注意力
全局自注意力的计算复杂度与图片大小成二次关系,因此不适用于密集预测和高分辨率图像问题。因此本文提出,在局部窗口中计算自注意力,每个窗口包含M*M个patches。此时对于大小为h*w的图片,全局和基于窗口的自注意力的计算复杂度分别为:
Ω ( MSA ) = 4 h w C 2 + 2 ( h w ) 2 C Ω ( SW-MSA ) = 4 h w C 2 + 2 M 2 h w C \Omega(\text{MSA})=4hwC^2+2(hw)^2C\\ \Omega(\text{SW-MSA})=4hwC^2+2M^2hwC Ω(MSA)=4hwC2+2(hw)2CΩ(SW-MSA)=4hwC2+2M2hwC
前者与 h w hw hw成二次关系,后者与 h w hw hw成一次关系。
2.2.2 连续block中的窗口划分
不重叠的窗口中的自注意力计算缺乏跨窗口连接