swin_transformer

记录一下 Swin Transformer 的原理。

资料1是文献,资料2是代码。

一、整体架构:四阶段分层处理

Swin Transformer采用类似于卷积神经网络(CNN)的四阶段分层架构,逐步将输入图像下采样为不同分辨率的特征图。

阶段一(Stage 1) - 输入图像(如224×224×3)首先经过 Patch Partition 模块,将图像分割为4×4的不重叠图像块(Patch),每个块的原始像素特征为 4×4×3 = 48 维。 - 随后经过 Linear Embedding 层,将48维特征线性投影到模型维度 C(如96维),得到形状为 56×56×96 的特征图。 - 在此特征图上应用多个 Swin Transformer Block,保持分辨率不变(H/4 × W/4)。 - 注意:这里没有像 VIT 那样加入位置编码信息,而是在注意力计算内部加入相对位置编码信息。

阶段二至四(Stages 2-4) - 每个阶段开始前,通过 Patch Merging 层进行下采样:将2×2邻域的Patch拼接,通道数变为4C,再通过线性层压缩为2C。这使得特征图分辨率减半(下采样2倍),通道数翻倍。 - 随后在该分辨率上继续应用Swin Transformer Block。

最终四个阶段输出的特征图分辨率分别为原图的 1/4、1/8、1/16和1/32,形成类似CNN的特征金字塔。


二、Swin Transformer Block:W-MSA与SW-MSA交替

Swin Transformer的核心计算单元是 Swin Transformer Block。每个Block由两个连续的Transformer层组成:

  • 第一层:使用 窗口多头自注意力(W-MSA),后接MLP和残差连接
  • 第二层:使用 移位窗口多头自注意力(SW-MSA),后接MLP和残差连接

每个子层都包含 LayerNorm(LN) 和残差连接。并且 Swin Transformer Block 严格保持输入和输出的维度(Shape)不变,既不会改变特征图的高宽(分辨率),也不会改变通道数。

2.1 W-MSA:窗口自注意力

W-MSA将自注意力计算限制在互不重叠的局部窗口内(默认窗口大小为7×7,即每个窗口包含49个Patch Token)。

对于窗口内的特征矩阵 $ X {K2 d} \((\) K $为窗口大小),自注意力计算为:

\[ \text{Attention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d}} + B\right)V \]

其中 B 为相对位置偏置(Relative Position Bias),用于编码窗口内Patch之间的相对空间位置关系。

计算复杂度分析: - 全局自注意力:$ () = 4hwC^2 + 2(hw)^2C $ - 窗口自注意力(W-MSA):$ () = 4hwC^2 + 2M^2hwC $

其中 $ h,w $ 为特征图高宽,$ M $ 为窗口大小(默认7)。当 $ M $ 固定时,复杂度与图像尺寸 $ hw $ 成线性关系,而非平方关系。

2.2 SW-MSA:移位窗口自注意力

W-MSA的缺点是窗口之间完全隔绝,信息无法跨窗口流通。SW-MSA通过移动窗口分区来解决这一问题。

具体做法是:在连续的Swin Transformer Block中,交替使用两种窗口划分方式。在SW-MSA层中,窗口相对于上一层偏移了 $ (M/2 , M/2 ) $ 个像素。

移位后会产生更多窗口(从 $ h/M w/M $ 变为 $ (h/M + 1) (w/M + 1) $)。为了高效计算,Swin Transformer采用 cyclic shift(循环移位) 技术:

  1. 将特征图通过 torch.roll 进行循环移位
  2. 在移位后的特征图上执行标准的窗口分区和自注意力计算
  3. 使用注意力掩码(Attention Mask) 屏蔽掉原本不属于相邻位置的无效注意力
  4. 最后通过反向循环移位恢复原始位置

这种方式使得新的窗口能够覆盖上一层窗口的边界区域,从而建立跨窗口的信息连接,同时保持了计算效率。


三、相对位置编码(Relative Position Bias)

与ViT使用绝对位置编码不同,Swin Transformer在每个窗口内使用可学习的相对位置偏置(Relative Position Bias) $ B {M2 M^2} $。

实现方式: 1. 计算窗口内每个Patch之间的成对相对位置坐标(范围在 \([-(M-1), M-1]\) 之间) 2. 将二维相对坐标映射为一维索引 3. 维护一个可学习的参数表 relative_position_bias_table,形状为 \([(2M-1)^2, nH]\)($ nH $为注意力头数) 4. 通过索引从参数表中取出对应的偏置向量,加到注意力分数上

相对位置偏置增强了模型的平移不变性,实验证明其能有效提升模型性能。


四、Patch Merging:下采样细节

Patch Merging是Swin Transformer实现层次化特征的关键操作:

  1. 将特征图 $ X ^{H W C} $ 中2×2邻域的Patch取出
  2. 将这4个Patch在通道维度上拼接,得到 $ ^{H/2 W/2 4C} $
  3. 通过一个线性层将通道数从 $ 4C $ 降为 $ 2C $

这样,每个阶段结束后,特征图分辨率减半,通道数翻倍。


五、与ViT的核心差异

特性 ViT Swin Transformer
特征图 单一分辨率 层次化多尺度(4个阶段)
自注意力 全局 局部窗口(W-MSA)+ 移位窗口(SW-MSA)
计算复杂度 $ O(N^2) $ $ O(N) $(与图像尺寸线性关系)
位置编码 绝对位置编码 窗口内相对位置偏置

六、关键设计总结

  1. 层次化架构:通过Patch Merging逐步下采样,构建4个尺度的特征图,适配目标检测、分割等密集预测任务

  2. 窗口自注意力(W-MSA) :将自注意力限制在局部窗口内,计算复杂度从平方降为线性

  3. 移位窗口(SW-MSA) :通过窗口偏移和cyclic shift实现跨窗口信息交互,兼顾效率与全局建模能力

  4. 相对位置偏置:在窗口内使用可学习的相对位置编码,增强平移不变性

参考文献

  1. Liu Z, Lin Y, Cao Y, et al. Swin transformer: Hierarchical vision transformer using shifted windows[C]//2021 IEEE/CVF international conference on computer vision (ICCV). Ieee, 2021: 9992-10002.
  2. https://github.com/microsoft/Swin-Transformer/tree/main
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信