基本信息

项目 内容
论文标题
作者
作者单位 微软亚洲研究院(MSRA)
时间 2021
发表会议/期刊
论文别名 Shifted WindowTransformer

方法概览

特点 文章性质
输入
输出
所属领域

创新点

  1. 对于高分辨率图像,patch序列会非常长,导致计算量和内存消耗巨大,难以应用于目标检测、分割等需要处理高分辨率输入的任务。解决早期视觉Transformer(如ViT)在处理高分辨率图像时计算复杂度极高的问题

  2. Swin Transformer = 分层Patch划分 + 窗口内自注意力 + 移位窗口连接 + Patch Merging下采样

  3. 分层(Hierarchical)结构通过逐步合并patch来构建一个类似CNN的金字塔结构,从而生成多尺度的特征图。

    1. Patch Partition:输入图像首先被分割成不重叠的 4x4 patch(或其他大小),每个 4x4 patch 被视为一个“token”,并通过一个线性层映射到一个高维嵌入向量。这一步大大降低了序列长度(例如,224x224图像变成56x57个token)。
    2. Stage-by-Stage Down-sampling:网络分为多个Stage(通常4个)。在每个Stage内部,进行若干次Swin Transformer Block操作。在Stage之间,通过一个Patch Merging层进行下采样:
      • 将相邻的 2x2 个patch(即 8x8 像素)合并为一个更大的patch。
      • 将这 4 个patch的嵌入向量拼接起来,然后通过一个线性层将其映射到 2C 维(C是当前Stage的通道数),再映射回 C/2 维(下一个Stage的通道数)。
      • 结果是:特征图的空间分辨率减半(H/2, W/2),而通道数加倍(2C)。这形成了一个从高分辨率低通道到低分辨率高通道的层次化特征表示。
  4. 移位窗口机制(Shifted Windows)

      • 常规窗口自注意力 (W-MSA - Window-based Multi-head Self-Attention)
      • 在每个Stage内部,不是在整个特征图上计算全局自注意力,而是将特征图均匀地划分成多个不重叠的 MxM 小窗口(例如 M=7)。
      • 自注意力计算仅在每个小窗口内部进行。这使得计算复杂度从O((H_W)²) 降低到 O((M²)_(H_W/M²)) = O(M² * H * W),即与图像大小H_W成线性关系,极大地提高了效率。
      • 缺点:信息被限制在窗口内,不同窗口之间没有交互,无法捕捉跨窗口的依赖关系。
    1. 移位窗口自注意力 (SW-MSA - Shifted Window-based Multi-head Self-Attention)
      • 为了解决W-MSA的缺点,Swin Transformer在相邻的Swin Transformer Block之间交替使用W-MSA和SW-MSA
      • 在第一个Block使用W-MSA(规则窗口划分)。
      • 在下一个Block,将窗口整体向右下方移动 (M/2, M/2) 个位置(例如,M=7时移动3个位置),然后进行自注意力计算。这会产生一些不规则的、跨越原始窗口边界的“shifted windows”。
      • 效果:通过这种交替的移位操作,不同窗口的token有机会在shifted window阶段进行交互,从而实现了跨窗口的信息流动,恢复了长距离依赖建模能力。经过两个Block(一个W-MSA + 一个SW-MSA),所有token都能间接地与其他token建立连接。
  5. Swin Transformer Block。一个标准的Swin Transformer Block包含以下组件:

    1. Layer Normalization (LN):对输入进行归一化。
    2. Window-based MSA (W-MSA 或 SW-MSA):根据Block的位置选择使用规则窗口或移位窗口的自注意力机制。
    3. 残差连接 (Residual Connection):将MSA的输出加到输入上。
    4. Layer Normalization (LN):再次归一化。
    5. MLP (Multi-Layer Perceptron):通常是一个两层的全连接网络,中间有GELU激活函数,有时包含DropPath进行正则化。
    6. 残差连接 (Residual Connection):将MLP的输出加到上一步的结果上。