前言
到目前为止,我们已经整理了视觉 Transformer 发展中的几个关键模型:
ViT
DeiT
PVT
PVTv2
Swin Transformer
如果单独看每一篇论文,读者可能会觉得每个模型都有自己的结构、公式和训练细节。但是如果把它们放在一条主线上看,会发现它们其实是在连续回答同一个问题:
Transformer 如何从一个图像分类模型,逐步发展成通用视觉骨干网络?
ViT 证明了 Transformer 可以用于图像分类;
DeiT 解决了 ViT 对大规模数据依赖较强的问题;
PVT 和 PVTv2 解决了 ViT 不适合密集预测的问题;
Swin Transformer 进一步通过窗口注意力和层次化结构,让 Transformer 成为分类、检测、分割等任务中的通用 backbone。
ViT 原论文提出将图像切成 patch token 后直接输入 Transformer;
DeiT 则提出在 ImageNet-only 条件下训练高性能无卷积 Transformer,并引入 distillation token;
PVT 和 Swin 都明确面向 dense prediction 和 general-purpose backbone 目标。
1. ViT:视觉 Transformer 的起点
ViT 的全名是:Vision Transformer
对应论文是:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
ViT 的核心思想非常简单:把图像切成固定大小的 patch,把每个 patch 当作 token,然后输入标准 Transformer Encoder。
例如,对于一张 224×224 的图像,如果 patch size 为 16×16,那么图像会被切成:
14 × 14 = 196 个 patch。再加上一个 class token,最终输入 Transformer 的 token 数量是:197
ViT 的结构可以总结为:
Image
↓
Patch Embedding
↓
Class Token + Position Embedding
↓
Transformer Encoder
↓
Classification Head
ViT 的意义在于,它证明了卷积并不是图像识别唯一可行的主干结构。只要有足够大规模的数据预训练,标准 Transformer 也可以在图像分类任务上取得很强的效果。ViT 原论文的核心设定就是将图像拆分为 patch 序列,并尽量保持标准 Transformer 结构不变。
不过,ViT 也留下了明显问题:
对大规模数据依赖较强;
缺少 CNN 那样的局部归纳偏置;
结构偏向图像分类;
不天然输出多尺度特征;
全局 self-attention 在高分辨率下计算开销很大。
因此,ViT 是视觉 Transformer 的起点,但不是终点。
2. DeiT:让 ViT 更容易训练
ViT 提出后,一个现实问题很快出现:如果没有超大规模数据和算力,普通研究者能不能训练出好用的 ViT?DeiT 就是为了解决这个问题提出的。DeiT 的全名是:Data-efficient Image Transformer
对应论文是:
Training data-efficient image transformers & distillation through attention
DeiT 的目标是:
不依赖超大规模外部数据,也能把 ViT 训练好。
DeiT 的关键贡献主要有两个。
第一,它总结了一套更强的 ViT 训练 recipe,包括数据增强、正则化、优化器和训练策略等。
第二,它提出了专门适配 Transformer 的蒸馏方法,也就是:distillation token
标准 ViT 的输入序列是:
[CLS], patch_1, patch_2, ..., patch_196
DeiT distilled model 的输入序列变成:
[CLS], [DIST], patch_1, patch_2, ..., patch_196
其中:
CLS token:学习真实标签监督;
DIST token:学习 teacher model 的蒸馏监督。
DeiT 论文指出,它在只使用 ImageNet 的条件下训练了高性能无卷积 Transformer,并引入了面向 Transformer 的 teacher-student 蒸馏策略;其 reference ViT 在无外部数据条件下达到 83.1% ImageNet top-1 accuracy。
所以,DeiT 的核心意义不是改变 ViT 的基本结构,而是回答:
如何让 ViT 在有限数据和有限资源下训练得更好?
3 PVT:让 Transformer 适合密集预测
ViT 和 DeiT 主要面向图像分类。但是,计算机视觉中还有大量任务不是分类,而是密集预测,例如:目标检测,实例分割,语义分割,关键点检测。这些任务不仅要知道"图像里有什么",还要知道:目标在哪里?每个像素属于什么类别?不同大小的目标如何同时识别?
这就要求模型具备多尺度特征输出。
CNN backbone 天然适合这个任务,因为 CNN 通常会逐阶段下采样,形成类似:
C2, C3, C4, C5
的多尺度特征。
但是原始 ViT 通常是单尺度 token 序列,不适合直接接入 FPN、RetinaNet、Mask R-CNN、Semantic FPN 等密集预测框架。PVT 正是为了解决这个问题提出的。PVT 的全名是:Pyramid Vision Transformer。它的核心思想是:
把 CNN 的金字塔结构引入 Transformer,让 Transformer 也能输出多尺度特征。
PVT 的结构是四阶段金字塔:
Stage 1: H/4 × W/4
Stage 2: H/8 × W/8
Stage 3: H/16 × W/16
Stage 4: H/32 × W/32
因此,它可以输出:F1, F2, F3, F4。
这些特征可以直接接入检测和分割框架。
PVT 论文明确指出,它与专门用于分类的 ViT 不同,目标是克服 Transformer 迁移到密集预测任务时的困难;PVT 通过 progressive shrinking pyramid 获得高分辨率输出并降低大特征图计算,能够作为多种视觉任务中的统一 backbone。
PVT 的另一个核心模块是:Spatial-Reduction Attention,简称 SRA
SRA 的思想是:Q 保持原始 token 数量;K 和 V 先做空间降采样;再计算 attention。
这样可以将 attention matrix 从:N × N,降低为:N × (N / R²),从而缓解高分辨率下的计算压力。所以,PVT 的核心意义是:让 Transformer 从图像分类模型,第一次比较系统地走向密集预测 backbone。
4. PVTv2:让金字塔 Transformer 更高效
PVT 解决了 ViT 不适合密集预测的问题,但 PVTv1 仍然不完美。
主要问题包括:
非重叠 patch embedding 可能破坏局部连续性;
固定 position embedding 对变分辨率输入不够友好;
SRA 在高分辨率下仍然有计算开销;
FFN 中缺少显式局部空间建模。
PVTv2 就是在 PVTv1 基础上的改进版。PVTv2 的核心改进有三个:
Overlapping Patch Embedding
Convolutional Feed-Forward Network
Linear Complexity Attention
PVTv2 论文明确提出,它通过这三个设计改进 PVTv1:线性复杂度注意力、重叠 patch embedding 和卷积前馈网络,从而降低计算复杂度并提升分类、检测、分割等任务性能。
| PVTv1 问题 | PVTv2 改进 |
|---|---|
| patch 之间不重叠,局部连续性弱 | Overlapping Patch Embedding |
| 固定位置编码不适合变分辨率 | Convolutional FFN 引入隐式位置建模 |
| 高分辨率 attention 仍然偏重 | Linear SRA 降低复杂度 |
PVTv2 的意义在于:它说明视觉 Transformer 不能只依赖全局 attention,还需要局部连续性、卷积式位置建模和更高效的 attention 设计。这也是视觉 Transformer 后续发展的一个重要趋势:不是越"纯 Transformer"越好,而是要针对视觉任务引入合适的结构先验。
5. Swin Transformer:窗口注意力与通用视觉骨干
Swin Transformer 是这一阶段中非常重要的模型。它的全名是:
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
Swin 的目标是:
构建一个真正适合分类、检测和分割的通用视觉 Transformer backbone。
Swin 的核心设计有三个:
1. Hierarchical structure 2. Window-based Self-Attention 3. Shifted Window
其中,层次化结构用于形成多尺度特征;窗口注意力用于降低高分辨率下的 attention 复杂度;shifted window 用于解决不同窗口之间信息不能交互的问题。Swin Transformer 的论文摘要中明确指出,它通过 shifted windows 构建层次化 Transformer,使 self-attention 限制在局部窗口内计算以提升效率,同时允许跨窗口连接,并且具有相对于图像尺寸的线性复杂度,可用于分类、检测和分割等任务。Swin 和 PVT 都解决密集预测问题,但路线不同。PVT 的思路是:
压缩 K/V,让 query 看压缩后的全局信息。
Swin 的思路是:
限制 attention 在局部窗口内计算,再通过 shifted window 实现跨窗口交互。
也就是说:
PVT:降低全局 attention 的 K/V 长度;
Swin:直接把 attention 限制在局部窗口内。
Swin 的成功说明:
对视觉任务来说,局部建模、层次结构和高效跨区域交互非常重要。
| 模型 | 核心目标 | 核心模块 | 特征结构 | Attention 方式 | 主要适用任务 |
|---|---|---|---|---|---|
| ViT | 证明 Transformer 可用于图像分类 | Patch Embedding + CLS Token | 单尺度 | 全局 MSA | 分类 |
| DeiT | 提高 ViT 数据效率 | Distillation Token + 蒸馏训练 | 单尺度 | 全局 MSA | 分类 |
| PVT | 让 Transformer 适合密集预测 | 金字塔结构 + SRA | 多尺度 | SRA | 分类、检测、分割 |
| PVTv2 | 提升 PVT 效率和局部建模 | Overlap Patch + CFFN + Linear SRA | 多尺度 | SRA / Linear SRA | 分类、检测、分割 |
| Swin | 构建通用视觉 backbone | Window Attention + Shifted Window + Patch Merging | 多尺度 | W-MSA / SW-MSA | 分类、检测、分割 |
6 .从去卷积到融合卷积的变化
一个有趣的问题是:ViT 最初强调少用卷积,为什么后续模型又不断引入类似 CNN 的设计?
例如:
PVT:金字塔结构
PVTv2:overlapping patch embedding、DWConv、convolutional FFN
Swin:局部窗口、层次化结构、patch merging
这些设计其实都带有 CNN 的影子。
原因很简单:图像不是普通序列,图像有强空间结构。
视觉任务天然需要:
局部连续性
空间邻域关系
多尺度结构
边界信息
平移相关性
高分辨率细节
纯 Transformer 的全局建模能力很强,但如果完全忽略图像空间先验,训练和计算都会变得困难。因此,后续视觉 Transformer 并不是简单坚持"完全无卷积",而是在 Transformer 框架中引入更适合视觉的结构偏置。
可以这样理解:
ViT:证明 Transformer 可以处理图像;
后续模型:证明 Transformer 需要适配图像结构。
这是视觉 Transformer 发展的关键转折。