1. 研究动机与问题背景 (Motivation)
长期以来,CNN(如 ResNet)一直是计算机视觉的绝对骨干(Backbone)。当 ViT(Vision Transformer)首次证明 Transformer 也能做图像分类时,整个 CV 界为之震动。然而,ViT 无法直接取代 CNN 成为通用的视觉骨干网络。
- 单一尺度(Single Scale): ViT 生成的特征图(Feature Maps)是固定分辨率的(如始终是 $16\times$ 下采样),而在目标检测、实例分割任务中,极度依赖类似 FPN(特征金字塔)的多尺度特征来识别不同大小的物体。
- 平方级计算复杂度(Quadratic Complexity): ViT 的全局自注意力机制计算复杂度与图像的 Patch 数量呈平方关系 $O(N^2)$。当处理高分辨率图像(如用于密集预测的语义分割)时,计算量和内存消耗是不可接受的。
本文试图解决的核心问题:如何设计一种具有层级结构(Hierarchical)、且计算复杂度与图像大小呈线性关系的 Transformer,使其能像 ResNet 一样无缝接入各种下游稠密预测(Dense Prediction)任务?
学术意义:Swin Transformer 真正打通了 NLP(Transformer)和 CV(Backbone)的底层架构,让 Transformer 首次具备了成为 CV 通用骨干的硬实力。
2. 数学表示与建模 (Formulation & Modeling)
Swin Transformer 的精妙在于利用局部窗口(Window)来控制计算量,并用滑动(Shift)来弥补局部窗口带来的信息隔离。其核心建模包含以下步骤:
2.1 层级特征映射 (Hierarchical Feature Maps)
为了构建多尺度特征,网络通过 Patch Merging 层在深度增加时逐渐合并相邻的 Patch:
- Stage 1: 输入图像 $H \times W \times 3$,被切分为 $4 \times 4$ 的 Patch,每个 Patch 特征维度为 $4 \times 4 \times 3 = 48$。然后通过 Linear Embedding 映射到维度 $C$。此时分辨率为 $\frac{H}{4} \times \frac{W}{4}$。
- Stage 2 & 3 & 4: 进行 Patch Merging。将相邻 $2 \times 2$ 的 Patch 特征在通道维度拼接(维度变为 $4C$),然后通过一个线性层降维至 $2C$。分辨率变为 $\frac{H}{8} \times \frac{W}{8}$,依此类推至 $\frac{H}{32} \times \frac{W}{32}$。
2.2 基于窗口的自注意力 (Window based Self-Attention, W-MSA)
普通的全局 MSA 复杂度对于大小为 $h \times w$ 个 patch 的图像是平方级的:
$$\Omega(\text{MSA}) = 4hwC^2 + 2(hw)^2C$$Swin Transformer 将图像均匀划分为不重叠的窗口(每个窗口包含 $M \times M$ 个 patch,默认 $M=7$),仅在窗口内部计算注意力。此时复杂度变为关于 $hw$ 的线性关系:
$$\Omega(\text{W-MSA}) = 4hwC^2 + 2M^2hwC$$2.3 滑动窗口注意力 (Shifted Window, SW-MSA)
完全不重叠的窗口会隔绝窗口间的信息交流。作者提出在连续的两个 Swin Transformer Block 中交替使用常规窗口(W-MSA)和滑动窗口(SW-MSA)。
在第 $l$ 层使用常规切分后,在第 $l+1$ 层,窗口向右下角平移 $(\lfloor\frac{M}{2}\rfloor, \lfloor\frac{M}{2}\rfloor)$ 个 patch。这两个连续 Block 的前向传播公式如下:
$$\hat{z}^l = \text{W-MSA}(\text{LN}(z^{l-1})) + z^{l-1}$$ $$z^l = \text{MLP}(\text{LN}(\hat{z}^l)) + \hat{z}^l$$ $$\hat{z}^{l+1} = \text{SW-MSA}(\text{LN}(z^l)) + z^l$$ $$z^{l+1} = \text{MLP}(\text{LN}(\hat{z}^{l+1})) + \hat{z}^{l+1}$$2.4 相对位置偏置 (Relative Position Bias)
在计算自注意力时,论文摒弃了绝对位置编码,而在计算相似度矩阵时加入相对位置偏置 $B \in \mathbb{R}^{M^2 \times M^2}$:
$$\text{Attention}(Q, K, V) = \text{SoftMax}(QK^T/\sqrt{d} + B)V$$由于沿两个坐标轴的相对位置在 $[-M+1, M-1]$ 之间,模型参数化了一个较小的偏置矩阵 $\hat{B} \in \mathbb{R}^{(2M-1) \times (2M-1)}$,而 $B$ 中的值从 $\hat{B}$ 中提取。这一设计大幅提升了下游密集预测任务的性能。
Figure 4:循环移位 (Cyclic Shift) 实现高效批量计算
边缘产生碎片窗口
(2×2 → 3×3 个窗口)
torch.roll 向左上循环移位 ⌊M/2⌋
窗口数恢复为 2×2
softmax 后权重→0
屏蔽非法交互
torch.roll恢复原始位置
比 Padding 快 13-18%
3. 实验设置与复现细节 (Experiments & Reproducibility)
为验证其作为“通用视觉骨干”的定位,论文在三大主流 CV 任务上进行了全面实验。
3.1 架构变体与参数配置
根据基础通道数 $C$ 和各 Stage 的 Block 数量,设定了 4 个规模的模型($M=7$, $d=32$, 扩展比 $\alpha=4$):
- Swin-T (Tiny): $C=96$, 层数={2, 2, 6, 2}, 参数量 $\approx$ 28M (对标 ResNet-50)
- Swin-S (Small): $C=96$, 层数={2, 2, 18, 2}, 参数量 $\approx$ 50M (对标 ResNet-101)
- Swin-B (Base): $C=128$, 层数={2, 2, 18, 2}, 参数量 $\approx$ 88M (对标 ViT-B)
- Swin-L (Large): $C=192$, 层数={2, 2, 18, 2}, 参数量 $\approx$ 197M
3.2 任务一:图像分类 (ImageNet-1K)
- 预处理与增强:基本遵循 DeiT,未使用 repeated augmentation 和 EMA(发现无益)。
- 优化器设定: AdamW 优化器,300 epochs,初始学习率 0.001(Cosine 衰减),Weight Decay 0.05,20 epochs Warm-up,Batch Size 1024。
- 预训练: 大模型(Swin-B/L)在 ImageNet-22K 上预训练 90 epochs。
3.3 任务二:目标检测与实例分割 (COCO 2017)
- 测试框架: 替换了主流框架(Cascade Mask R-CNN, ATSS, RepPoints v2, Sparse R-CNN)中的 ResNet 骨干。
- 优化器设定: AdamW,初始学习率 0.0001,Weight Decay 0.05,多尺度训练,使用 3x schedule(36 epochs)。
3.4 任务三:语义分割 (ADE20K)
- 测试框架: 基于 mmsegmentation 库的 UperNet。
4. 实验结果与核心结论 (Results & Findings)
4.1 ImageNet 分类表现
相比同样参数量和计算量级别(FLOPs)的模型,Swin Transformer 完胜 DeiT 和经过高度 NAS 搜索的 RegNet。不仅是准确率,吞吐量(Throughput)也维持在非常高的水平。
| 模型 | 输入分辨率 | 参数量 | FLOPs | Top-1 准确率 |
|---|---|---|---|---|
| RegNetY-16G | $224^2$ | 84M | 16.0G | 82.9% |
| DeiT-S | $224^2$ | 22M | 4.6G | 79.8% |
| Swin-T (Ours) | $224^2$ | 29M | 4.5G | 81.3% |
| DeiT-B | $384^2$ | 86M | 55.4G | 83.1% |
| Swin-B (Ours) | $384^2$ | 88M | 47.0G | 84.5% |
| --- 下方为 ImageNet-22K 预训练微调结果 --- | ||||
| ViT-L/16 | $384^2$ | 307M | 190.7G | 85.2% |
| Swin-L (Ours) | $384^2$ | 197M | 103.9G | 87.3% |
4.2 COCO 目标检测:历史性的碾压
这是 Swin 震惊 CV 界的战绩。在同等参数和 FLOPs 级别下,用 Cascade Mask R-CNN 框架,Swin-T 比 ResNet-50 的 Box AP 暴涨了 +4.2,Mask AP 暴涨 +3.3。最终融合各项高级策略(HTC++)的 Swin-L 模型拿下了 58.7 Box AP,超越了当时榜单上使用最先进 Copy-paste 数据增强的 SOTA(55.9 AP),实现了对纯 CNN 架构绝对性能的跨代碾压。
4.3 关键消融实验 (Ablation Studies)
- Shifted Window 真的有用吗? 取消 Shift 机制后,ImageNet Top-1 掉了 1.1%,而 COCO 目标检测的 AP 直接暴跌 2.8 个点!这证明,对于缺乏全局感知的局部窗口来说,跨层“拼图偏移”是重建感受野的关键。
- 位置偏置: 加入绝对位置编码(Absolute position)不仅没带来提升,反而使密集任务性能下降。相对位置偏置(Relative position bias)才是关键,比什么位置编码都不加高了 1.2%(ImageNet)。
5. 审稿人视角:犀利评论 (Critical Review)
🔥 高光优点
- 完美的架构对齐 (Alignment with CV tasks): 之前大家都在想尽办法强行把图片切成 Sequence 喂给 ViT,而本文退后一步思考:视觉信号天生就有 2D 先验和尺度金字塔。Swin 巧妙地借用了 CNN “逐渐降采样”的老智慧,完美适配了几乎所有为 CNN 开发的下游检测分割头(如 FPN),工程友好度满分。
- 优雅的复杂度解决路径: $O(N^2)$ 是自注意力的心病。通过 Local Window 控制复杂度为 $O(N)$,再通过 Shift 实现特征交互,设计哲学异常清晰。
- 统治级的霸榜性能: 论文不仅仅在说故事,在目标检测和分割这种极度考验 Backbone 抽取细腻特征能力的任务上,用断层式(margin > 2.0+ AP)的领先证明了架构的优越性。
🤔 局限与探讨
- 局部性妥协: 相比于标准 ViT 在第一层就能建立“左上角与右下角”的全局关联(这往往被视为 Transformer 打败 CNN 的核心红利),Swin Transformer 重新走回了“通过堆叠局部感受野来扩大全局感受野”的老路。这种妥协一定程度上损失了长程依赖(Long-range dependency)的快速建立。
- 手工设计痕迹严重: 窗口大小固定 $M=7$、Shift 位移固定 $\lfloor M/2 \rfloor$、Patch Merging 的 $2 \times 2$ 拼接,这些超参数本质上和 CNN 里的 Kernel Size=3x3 并没有哲学上的区别。Swin 更像是一个“披着 Self-Attention 外衣的强悍 CNN”。
🚀 未来方向
后续研究(如后来的 Swin-V2)必定需要解决它如何扩展到超高分辨率(如超大 Window Size、大尺度预训练下的相对位置编码崩溃),以及进一步统一视觉自监督学习(MAE 架构在 Swin 上其实不如在 Vanilla ViT 上自然)。
6. One More Thing
论文中极容易被读者忽略,但在系统级实现上价值千金的设计,是位于图 4 的 "Cyclic Shift (循环移位) + Masked MSA"。
当采用偏移窗口时,图像边缘的窗口会被切碎(比如原来 $2 \times 2$ 个窗口变成了 $3 \times 3$ 个残缺窗口)。如果在硬件里直接计算,处理不同尺寸的 Tensor 会严重拖慢 GPU 速度(甚至比直接算全局 Attention 更慢)。
微软的科学家做了一个极简的变换:把左上、正上、左边这三个“越界”的区域,直接像贪吃蛇穿墙一样,循环移动补到右下角。这样,窗口数量又变回了原先的标准数量(完美对齐显存),并且在计算时加一个 Masking 告诉模型“其实它们不是真的靠在一起”。
消融实验表5(Table 5)揭示:正是这个小小的技巧,让 Shifted Window 的速度比 Naive Padding 的做法快了 13% 到 18%,才真正将理论上的低复杂度变为了 GPU 上的现实!