Swin Transformer 核心思路与层次化设计


Swin Transformer

Swin Transformer architecture

Shifted window attention示意

Swin Transformer 分层特征


一、背景

  • 在CV领域,近年来有两个主要的趋势:

    • 传统的CNN已经非常成功,但在处理大分辨率图像不同尺度物体检测分割任务时还会有挑战。
    • 受语言模型(例如 Transformer)的成功启发,“视觉 Transformer”(Vision Transformer, ViT)将 Transformer 的思想引入视觉领域:把图像切成patch看成 tokens,用自注意力建模。
  • 但 Vision Transformer 直接应用在视觉上,遇到两个核心问题:

    • 尺度问题:视觉中物体大小差异大,而 ViT 通常将图像切成固定大小的 patch,缺少“多尺度”表示。
    • 计算复杂度问题:典型的 Transformer 自注意力机制是“全局”即每个 token 与所有其他 token 做注意力,时间/内存复杂度随着图像尺寸 (N = patches数) 成二次增长(O(N²))——对于高分辨率的图像,不现实。
  • 因此,Swin Transformer 的出现,正是为了解决在视觉任务中:如何既高效又能表示多尺度、适用于分类/检测/分割的通用骨干网络的问题。


二、核心设计思想

Swin Transformer 的名字“Swin”就是 “Shifted win­dows” 的缩写,体现其两个关键设计:分窗口(window-based)自注意力 + 窗口平移(shifted window)机制。从宏观结构来看,它还有一个 分层设计。我们分步骤来解释。

2.1 分层结构

与 ViT 那种从头到尾用固定大小 patch、输出单一分辨率相比,Swin Transformer 引入了类似 CNN 的特征金字塔结构:

  • 输入图像首先被切成较小 patch。
  • 然后在不同阶段进行patch 合并,即把相邻的 patch/tokens 合并,降分辨率同时提升通道数,从而形成从高分辨率细节到低分辨率粗特征的层次结构。
  • 这种结构让网络能够在浅层看到细节、高分辨率,在深层看到更抽象、低分辨率的特征,非常适合检测、分割这类任务。

简而言之,Swin Transformer 用像 CNN 那样的多尺度特征金字塔结合Transformer 那些强自注意力表达能力。

2.2 窗口化自注意力

为了解决全局注意力计算量大的问题,Swin Transformer 提出:

  • 把整个图像(其实是 patch tokens)按照 固定大小的非重叠窗口 划分。每个窗口内进行自注意力,也就是说:一个窗口内所有 tokens 之间做 attention。这样,注意力的 scope 从“全图”降成“窗口内”,显著降计算成本。
  • 因为窗口大小固定,窗口内 token 数固定,所以随着图像分辨率变大,总窗口数变多,但每窗口计算量不变,从而实现 线性复杂度 (O(N)) 而不是 O(N²) 。

2.3 窗口平移机制

不过,如果我们只用固定窗口且不让窗口间有交互,就可能有窗口边界无法沟通、跨窗口信息难以建模的问题。为了避免这一点,Swin Transformer 的关键创新是:

  • 在一个层采用常规窗口划分(例如每 7×7 patch 为一个窗口)计算自注意力。
  • 在下一个层,将窗口划分向右下平移一定距离(例如窗口大小的一半),这样新的窗口会跨越前一层的窗口边界。于是,前一个层窗口内的信息被新的窗口组合,从而实现 窗口之间的交互
  • 这个shifted window技巧用得非常巧妙:既保留了局部窗口注意力的高效优势,又通过平移让不同窗口之间的 token 能够间接通信

2.4 总结设计

  • 分层结构:支持多尺度、像 CNN 那样做特征金字塔。
  • 窗口化注意力:降低计算成本,使得处理高分辨率图像可行。
  • 窗口平移:解决仅局部窗口带来的窗口边界割裂问题,增强模型表达能力。

三、工作流程

下面以一个输入图像为例。

  1. Patch 切分
    • 输入原始图像(如 H×W 像素,通道 C=3)被切成固定大小的小 patch,比如每 4×4 像素一个 patch。
    • 每个 patch 被展平成一个向量(或用卷积方式嵌入)得到初步的 token 表示。
  2. Embedding & Stage 1
    • 这些 token 经过线性投影(embedding)成为维度 C(如 96).
    • 然后进入 Stage 1,一系列 “Swin Transformer Block”进行处理。每个 block 包含:LayerNorm → 窗口自注意力 (window-MSA) → MLP (多层感知机) → 残差连接。
  3. Patch Merging → Stage 2、Stage 3…
    • 在 Stage 1 处理完后,会执行一次 “patch merging”:将相邻 2×2 token 合并为一个 token(也就是把空间分辨率减半、通道数加倍).
    • 然后进入 Stage 2,用同样的 Swin Block 结构,但窗口可能相对更大、token 数更少。之后再进行 patch merging 到 Stage 3、Stage 4。最终网络输出多个尺度的特征图。
  4. 任务特定头
    • 对于分类任务,最后可以接池化 + 全连接层;对于检测/分割任务,则可把多尺度特征送入 FPN (Feature Pyramid Network) 等结构做定位、分割。Swin Transformer 的输出可作为通用 backbone。

Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC