张芷铭的个人博客

核心思想与定义

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主导的视觉处理范式,实现了从局部感知到全局建模的转变。


技术原理与架构拆解

核心工作流程

  1. 图像分块与嵌入(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}}$为位置编码。

  2. 位置编码(Position Encoding)
    由于Transformer本身不具备空间感知能力,需通过可学习的位置编码(ViT)或固定正弦编码注入块的空间位置信息,防止序列顺序混乱。

  3. 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))$。
  4. 分类头
    提取序列首位的可学习[CLS]标记的输出,通过MLP输出分类结果。


与传统CNN的对比

特性ViTCNN
感受野全局(自注意力覆盖全图)局部(需堆叠层扩大)
归纳偏置弱(无局部性假设)强(平移不变性+局部性)
数据需求需大规模数据(如JFT-300M)预训练小数据友好
计算效率序列长度$N$的$O(N^2)$复杂度适合高分辨率图像
ViT在数据充足时超越CNN,但小数据场景易过拟合

关键优势与挑战

✅ 优势

  1. 全局上下文建模:自注意力机制捕捉长距离依赖,适用于医学影像(如跨区域肿瘤关联)。
  2. 多任务统一框架:同一架构支持分类、检测、生成任务(如视频生成模型MAGVIT)。
  3. 无归纳偏置约束:数据驱动特征学习,避免CNN的局部性先验限制。

❌ 挑战

  1. 高计算复杂度:高分辨率图像(如$1024\times1024$)序列过长,注意力矩阵显存爆炸。
  2. 局部细节丢失:块内部缺乏交互,细粒度任务(如边缘检测)表现受限。
  3. 多尺度适应性差:单一尺度特征难以处理不同大小目标。

创新演进:解决瓶颈的变体模型

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分类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import torch  
from transformers import ViTForImageClassification, ViTConfig  

# 轻量化配置(CIFAR10示例)  
config = ViTConfig(  
    image_size=224,  
    patch_size=16,  
    num_labels=10,  
    hidden_size=256,  # 原始768维,减小规模  
    num_hidden_layers=4,  
    num_attention_heads=4,  
)  
model = ViTForImageClassification(config)  

# 训练关键技巧  
optimizer = torch.optim.AdamW(model.parameters(), lr=3e-5)  
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=10)  
nn.utils.clip_grad_norm_(model.parameters(), 1.0)  # 梯度裁剪  

完整代码见https://github.com/huggingface/transformers/tree/main/examples/pytorch/image-classification


最新进展与未来方向

  1. 高效注意力机制
    • 线性注意力(Efficient-ViT):近似注意力矩阵,复杂度降至$O(N)$。
  2. 多模态融合
    • VILA架构:统一视觉、语言、音频的Transformer编码器,支持跨模态生成(如DALL·E 3)。
  3. 动态计算优化
    • 自适应计算:根据图像区域复杂度动态分配计算资源(如Skip Tokens)。

学习资源推荐

  1. 论文
  2. 开源库

💬 评论