核心思想与定义
Vision Transformer(ViT) 是2020年由Google提出的突破性架构[[An Image is Worth 16x16 Words Transformers for Image Recognition at Scale]],首次将自然语言处理中的Transformer模型成功迁移到计算机视觉领域。它摒弃了传统卷积神经网络(CNN)的局部卷积操作,将图像分割为固定大小的图像块(Patches)(如16×16像素),将其视为序列数据输入Transformer编码器,通过自注意力机制(Self-Attention) 建模全局依赖关系。这一设计颠覆了CNN主导的视觉处理范式,实现了从局部感知到全局建模的转变。
技术原理与架构拆解
核心工作流程
图像分块与嵌入(Patch Embedding)
输入图像($H \times W \times C$)被分割为$N$个$P \times P$的块(序列长度$N = (H \times W)/P^2$)。每个块展平后通过线性投影映射到$D$维空间(如$P=16$时,$16^2 \times 3=768 \rightarrow D=768$),生成块嵌入向量(Patch Embeddings):
$$z_0 = [x_{\text{class}}; , x_p^1 \mathbf{E}; , x_p^2 \mathbf{E}; \cdots; , x_p^N \mathbf{E}] + \mathbf{E}{\text{pos}}$$
其中$\mathbf{E}$为投影矩阵,$\mathbf{E}{\text{pos}}$为位置编码。位置编码(Position Encoding)
由于Transformer本身不具备空间感知能力,需通过可学习的位置编码(ViT)或固定正弦编码注入块的空间位置信息,防止序列顺序混乱。Transformer编码器
由$L$层相同的模块堆叠而成,每层包含:- 多头自注意力(MSA):并行计算$h$个注意力头,学习不同子空间关系(如形状、纹理)。
$$\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$ - 前馈网络(MLP):两层全连接层(隐层维度扩展4倍)加GELU激活。
- 残差连接与层归一化:确保梯度稳定,公式为$y = x + \text{MSA}(\text{LayerNorm}(x))$。
- 多头自注意力(MSA):并行计算$h$个注意力头,学习不同子空间关系(如形状、纹理)。
分类头
提取序列首位的可学习[CLS]标记的输出,通过MLP输出分类结果。
与传统CNN的对比
| 特性 | ViT | CNN | |
|---|---|---|---|
| 感受野 | 全局(自注意力覆盖全图) | 局部(需堆叠层扩大) | |
| 归纳偏置 | 弱(无局部性假设) | 强(平移不变性+局部性) | |
| 数据需求 | 需大规模数据(如JFT-300M)预训练 | 小数据友好 | |
| 计算效率 | 序列长度$N$的$O(N^2)$复杂度 | 适合高分辨率图像 | |
| ViT在数据充足时超越CNN,但小数据场景易过拟合。 |
关键优势与挑战
✅ 优势
- 全局上下文建模:自注意力机制捕捉长距离依赖,适用于医学影像(如跨区域肿瘤关联)。
- 多任务统一框架:同一架构支持分类、检测、生成任务(如视频生成模型MAGVIT)。
- 无归纳偏置约束:数据驱动特征学习,避免CNN的局部性先验限制。
❌ 挑战
- 高计算复杂度:高分辨率图像(如$1024\times1024$)序列过长,注意力矩阵显存爆炸。
- 局部细节丢失:块内部缺乏交互,细粒度任务(如边缘检测)表现受限。
- 多尺度适应性差:单一尺度特征难以处理不同大小目标。
创新演进:解决瓶颈的变体模型
1. Swin Transformer(2021)
- 滑动窗口注意力:将特征图划分为非重叠窗口,窗口内计算注意力,降低计算量。
- 层级金字塔结构:通过合并块实现下采样,生成多尺度特征($1/4, 1/8, 1/16$分辨率),适配目标检测等任务。
2. ViT-CoMer(CVPR 2024)
针对密集预测任务(目标检测、语义分割)的双分支架构:
- ViT分支:保持预训练权重,提供全局上下文。
- CNN分支:输出多尺度特征(C3, C4, C5)。
- CTI模块(核心创新):通过双向特征交互融合局部与全局信息,在COCO目标检测任务上提升**+5.6% AP**,ADE20K分割任务达62.1% mIoU。
3. 轻量化变体(EdgeViT, MobileViTv2)
- 参数量压缩至1.6M(EdgeViT-XXS),计算量仅0.3G FLOPs,适用于移动端部署。
应用场景与实战案例
1. 医学影像分析
- LVM-Med框架:ViT在130万张医学图像上预训练,糖尿病视网膜病变分类准确率超越CNN 11%(小数据集场景)。
2. 自动驾驶
- HM-ViT模型:融合激光雷达与摄像头数据,通过异构3D图注意力建模跨传感器依赖,在遮挡场景下将摄像头车辆检测精度(AP@0.7)从2.1%提升至53.2%。
3. 3D视觉与文本对齐
- 3D-VisTA模型:统一Transformer处理3D点云与文本,在ScanScribe数据集上预训练,支持视觉问答、场景描述等多任务。
代码实践:PyTorch实现ViT分类
| |
完整代码见https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification。
最新进展与未来方向
- 高效注意力机制:
- 线性注意力(Efficient-ViT):近似注意力矩阵,复杂度降至$O(N)$。
- 多模态融合:
- VILA架构:统一视觉、语言、音频的Transformer编码器,支持跨模态生成(如DALL·E 3)。
- 动态计算优化:
- 自适应计算:根据图像区域复杂度动态分配计算资源(如Skip Tokens)。
学习资源推荐
- 论文:
- 开源库:
💬 评论