图像中的 Transformer:ViT 与 Swin 的原理和对比
前言
Transformer 最初是为自然语言处理(NLP)设计的,代表作如 BERT 和 GPT 系列。但这个经典模型架构其实也能“看图”——甚至在图像识别、检测和分割等任务中表现得比卷积神经网络(CNN)还要好。
本文将带你从 Transformer 的基本原理出发,逐步深入了解 ViT 和 Swin Transformer 的核心结构与思想演进,并穿插作者本人的学习思考和个人理解。
一、什么是 Transformer?
Transformer 最初由 Google 在 2017 年提出,出现在论文《Attention is All You Need》中。
其核心思想是:
抛弃传统的循环结构(如 RNN、LSTM),通过自注意力机制(Self-Attention)一次性处理整个序列。
Transformer 的核心模块
- Embedding:把词变成向量
- Self-Attention:建模序列中任意两个词之间的联系
- 多头注意力机制(Multi-Head Attention) :增强模型对不同语义特征的捕捉能力
- 前馈网络(Feed Forward) :非线性特征变换
- 残差连接 + 层归一化:帮助训练更深层网络
个人理解
Transformer 更像是一种“信息加权聚合机制”,它根据每个词的重要性来自适应提取和融合上下文信息。在 NLP 中,它完美解决了长距离依赖问题。那么,它能否迁移到图像领域?于是,就有了——Vision Transformer。
二、ViT:把图像变成“句子”的视觉 Transformer
背景
CNN 长期统治视觉领域,因为卷积天然能提取局部特征。但它缺乏全局建模能力。而 Transformer 反过来:它天生能抓住全局信息,但没有空间结构的先验。
ViT 的提出者正是 Google,他们在 2020 年提出了 ViT(Vision Transformer)并用论文标题《An Image is Worth 16x16 Words》作出经典比喻。
ViT 架构
原始图像(如224x224x3)
↓
切分成 Patch(如16x16)
↓
展平每个 Patch + 线性嵌入(如768维)
↓
加上位置编码
↓
输入标准 Transformer Encoder
↓
输出分类结果(使用 [CLS] Token)
设计细节
- 将图像划分为固定大小的小块 patch,每块看成一个“词”
- 加入可学习的位置编码,弥补 Transformer 没有位置信息的缺陷
- 引入
[CLS]Token 表示整个图像,最后用它来分类 - 整个模型就是一个“纯Transformer”,没有卷积!
优点
- 全局感知能力强
- 架构简单统一,易于迁移和扩展
- 易于和语言模型融合(如 CLIP)
缺点
- 对数据量非常敏感(ImageNet-1k 训练不稳定)
- 缺乏局部归纳偏置,难以捕捉细粒度特征
- 不具备金字塔结构,不适合多尺度任务如检测/分割
个人思考
深度学习模型其实并不是非要“卷积”不可。只要我们找到合适的表达方式,即使把图像变成“词”处理也能奏效。但这种做法对数据要求极高,不能像CNN那样“即插即用”。
三、Swin Transformer:把 Transformer 做成“像卷积一样”的视觉模型
如果说 ViT 是“语言模型的视觉版”,那 Swin Transformer 就是“视觉友好的 Transformer”。
它由微软亚洲研究院在 2021 年提出,名字中的 “Swin” 是 “Shifted Window”的缩写,主打窗口式注意力机制。
Swin 的核心创新
1. 层次结构(Pyramid)
- 类似 CNN 的 stage1~4:分辨率逐步下降,通道数逐步增加
- 更适合多尺度任务,比如目标检测、分割等
2. 局部注意力(Window Attention)
- 将特征图划分成局部窗口(如 7x7)
- 在每个窗口内做自注意力(避免全图注意力的高计算量)
3. 滑动窗口机制(Shifted Window)
- 每隔一层把窗口“错开一点”,让不同区域的信息能融合
- 实现跨窗口的信息传播
4. 高效可扩展
- 参数少,计算量低,速度快
- 可直接接入如Faster-RCNN、UPerNet等框架
架构概览
输入图像 → Patch划分 → Swin Stage1 → Stage2 → Stage3 → Stage4 → 分类/检测/分割任务头
优点
- 比ViT更高效,收敛更快
- 引入空间先验,更适合视觉任务
- 灵活扩展,多任务适配强
个人理解
Swin 就像 Transformer 界的“ResNet”:它兼顾了模型的表达能力与工程效率,真正把 Transformer 做成了可以落地的视觉工具。
四、三者横向对比总结
| 特性 | Transformer | ViT | Swin Transformer |
|---|---|---|---|
| 初始领域 | NLP | 视觉分类 | 视觉分类、检测、分割等 |
| 建模方式 | 全局自注意力 | Patch+全局自注意力 | 滑窗局部注意力 + 分层结构 |
| 先验结构 | 无 | 无 | 有(局部+层次) |
| 对小数据敏感性 | 高 | 高 | 低 |
| 多任务适应性 | 差 | 一般 | 强 |
| 是否保留CNN思路 | 否 | 否 | 是(仿CNN结构) |
个人的思考与感悟
作为刚接触CV Transformer的学习者,我最大的体会是:
模型结构不是在“卷炫技”,而是在不断寻找数据的本质表示方式。
- Transformer 代表了一种“全局建模”的思维方式;
- ViT 是跨模态的勇敢尝试,虽然有缺陷,但证明了可能性;
- Swin Transformer 是工程与理论的平衡,让 Transformer 真正走入工业界。
我们不必急于掌握 Transformer 所有细节,但一定要理解其核心思想——建模依赖关系的注意力机制。