Vision Transformer(ViT)将图像分割为 Patch 序列,通过自注意力机制实现全局建模,颠覆了 CNN 主导的视觉处理范式。
核心原理
工作流程
1. 图像分块与嵌入
输入图像($H \times W \times C$)分割为 $N$ 个 $P \times P$ 的块,序列长度 $N = (H \times W)/P^2$。每个块展平后线性投影到 $D$ 维:
$$z_0 = [x_{\text{class}}; x_p^1 \mathbf{E}; \cdots; x_p^N \mathbf{E}] + \mathbf{E}_{\text{pos}}$$
2. 位置编码
可学习的位置编码注入块的空间位置信息。
3. Transformer 编码器
$L$ 层堆叠,每层包含:
- 多头自注意力(MSA):$\text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$
- 前馈网络(MLP):两层全连接 + GELU
- 残差连接与层归一化
4. 分类头
提取 [CLS] 标记输出,通过 MLP 分类。
与 CNN 对比
| 特性 | ViT | CNN |
|---|---|---|
| 感受野 | 全局 | 局部(需堆叠扩大) |
| 归纳偏置 | 弱 | 强(平移不变性+局部性) |
| 数据需求 | 需大规模预训练 | 小数据友好 |
| 计算复杂度 | $O(N^2)$ | 适合高分辨率 |
ViT 数据充足时超越 CNN,小数据场景易过拟合。
优势与挑战
优势
- 全局上下文建模,捕捉长距离依赖
- 多任务统一框架
- 无归纳偏置约束,数据驱动特征学习
挑战
- 高分辨率图像序列过长,显存爆炸
- 块内部缺乏交互,局部细节丢失
- 单一尺度特征,多尺度适应性差
变体模型
Swin Transformer(2021)
- 滑动窗口注意力:窗口内计算,降低计算量
- 层级金字塔结构:生成多尺度特征
ViT-CoMer(CVPR 2024)
双分支架构针对密集预测任务:
- ViT 分支:全局上下文
- CNN 分支:多尺度特征
- CTI 模块:双向特征交互,COCO 检测 +5.6% AP
轻量化变体
EdgeViT-XXS:1.6M 参数,0.3G FLOPs,适用于移动端。
应用场景
| 场景 | 模型 | 效果 |
|---|---|---|
| 医学影像 | LVM-Med | 糖尿病视网膜病变分类超 CNN 11% |
| 自动驾驶 | HM-ViT | 遮挡场景检测精度 2.1%→53.2% |
| 3D 视觉 | 3D-VisTA | 统一处理点云与文本 |
PyTorch 实现
| |
未来方向
- 高效注意力:线性注意力降至 $O(N)$
- 多模态融合:统一视觉、语言、音频编码器
- 动态计算:按区域复杂度分配资源
张芷铭的个人博客
Comments