Swin Transformer

Paper:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

传统的 Vision Transformer (如 ViT) 在作为通用视觉 Backbone 时,面临两大痛点 :

  • 尺度不一致性:视觉实体(如目标检测中的物体)大小变化极大。ViT 的 Token 尺寸完全固定,难以适应需要多尺度特征的下游任务(如检测和分割) 。
  • 高分辨率下的计算量爆炸:ViT 采用全局自注意力机制,其计算复杂度与图像的 Token 数量呈二次方关系。当面对高分辨率图像或需要像素级预测的任务时,计算开销巨大,甚至直接显存溢出 。
image.png

创新点一:构建层次化特征图—— 解决多尺度问题

设定初始 Patch 大小是 个像素(足够小),这个时候特征图的分辨率很高,能捕捉到非常精细的局部细节。

然后随着网络层数的加深,模型内部通过 Patch Merging,让特征图的尺寸(高、宽)成倍缩小,而每个 Token 的特征通道数(维度)成倍增加。

比如首先在空间上把相邻的 个 Patch给“打包”并排连在一起,空间分辨率直接减半,变成了 ;但是通道数变成了原来的 4 倍,即

采样拼好后,维度太高了(),计算量不划算 。于是接着用一个线性层将通道数降为

创新点二:基于移位窗口的自注意力

第一步:常规窗口自注意力

为了将计算量降下来,模型将图像均匀划分为不重叠的局部窗口(如每个窗口包含 个 Patch),自注意力只在各自的窗口内部进行

第二步:移位窗口自注意力

只用 W-MSA 会导致一个致命缺陷:各个窗口各玩各的,彼此之间没有任何信息交流,这严重限制了模型的全局建模能力 。因此,在连续的 Transformer 块中,作者提出了移位窗口(Shifted Windows)

  • 做法:在第 层使用常规窗口划分,在接下来的第 层,将整个窗口划分向右下角平移 个像素 。
  • 通俗理解:这就好比把之前的窗口边界打破了。新的窗口刚好横跨了上一层相邻的几个老窗口,让原本死生不相往来的邻居窗口在这一层能够进行信息融合 。
  • 高效批处理优化:移位后会产生更多、更小的碎片窗口。作者没有采用 Padding ,而是创造性地使用了循环移位和掩码机制,把这些碎片拼成和原来一样大的标准窗口进行矩阵并行计算,既引入了跨窗口连接,又没有带来任何额外的计算延迟 。
image.png

Swin Transformer
https://d4wnnn.github.io/2026/06/02/Notion/Swin Transformer/
作者
D4wn
发布于
2026年6月2日
许可协议