引言
Vision Transformer (ViT) 和卷积神经网络 (CNN) 是计算机视觉领域的两大主流架构。ViT将Transformer架构引入视觉领域,在大规模数据上展现出卓越性能;CNN则凭借局部感受野和层次化特征提取,在各类视觉任务中保持竞争力。
本文系统分析两种架构的理论特性,提供实践选择指南。
架构差异理论分析
卷积神经网络 (CNN)
核心机制
CNN通过局部感受野和权重共享提取特征:
yi,j(l)=a=−k/2∑k/2b=−k/2∑k/2wa,b(l)⋅xi+a,j+b(l−1)
归纳偏置
| 归纳偏置 | 描述 | 优势 |
|---|
| 局部性 | 只关注局部邻域 | 参数效率高 |
| 平移不变性 | 权重在空间共享 | 鲁棒性好 |
| 层次结构 | 逐层抽象 | 符合视觉认知 |
特点
- ✅ 参数效率高(小数据集)
- ✅ 计算效率高
- ✅ 对局部特征敏感
- ✅ 易于硬件优化
- ❌ 感受野受限于卷积核大小
- ❌ 难以捕获全局依赖
核心机制
ViT将图像划分为patch,然后应用标准Transformer:
┌─────┬─────┬─────┐
│ P₁₁ │ P₁₂ │ P₁₃ │
├─────┼─────┼─────┤
│ P₂₁ │ P₂₂ │ P₂₃ │
├─────┼─────┼─────┤
│ P₃₁ │ P₃₂ │ P₃₃ │
└─────┴─────┴─────┘
↓ flatten + linear projection
[x₁, x₂, ..., x₉] + [CLS] → Transformer
自注意力机制
Attention(Q,K,V)=softmax(dQK⊤)V
每个patch可以与所有其他patch交互,实现全局建模。
特点
- ✅ 全局感受野
- ✅ 灵活建模token间依赖
- ✅ 架构统一性(NLP→CV)
- ✅ 更好的长距离建模
- ❌ 需要大量数据
- ❌ 计算复杂度高
核心特性对比
理论对比表
| 特性 | CNN | ViT |
|---|
| 感受野 | 局部→全局(逐层扩展) | 全局(从第一层) |
| 权重共享 | 空间维度共享 | Query/Key/Value投影 |
| 平移不变性 | 显式(卷积) | 隐式(需学习) |
| 参数效率 | 高(局部连接) | 低(全局连接) |
| 数据效率 | 高(归纳偏置) | 低(需大规模数据) |
| 计算复杂度 | O(n⋅k2) | O(n2⋅d) |
| 长距离建模 | 需要大核或多层 | 自带全局建模 |
表达能力对比
CNN的表达能力
CNN的表达能力受限于局部感受野的组合:
Receptive Field(l)=1+l⋅(k−1)
其中 l 为层数,k 为卷积核大小。
理论上,深层CNN可以覆盖整个图像,但:
- 需要大量层
- 信息可能逐层稀释
- 路径长度随距离指数增长
ViT的表达能力
ViT的自注意力提供直接的全局交互:
Path Length(i→j)=O(1)
不受token间距离影响,但:
- 需要足够深度来建模复杂关系
- 可能缺乏局部结构的先验
数据效率对比
数据量需求
性能
↑
│ ╭──────────────────────────
│ ╱ ╲ ViT
│ ╱ ╲
│ ╱ ╲
│╱ ╲
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━→ 数据量
小 中 大
| 数据规模 | 推荐架构 | 理由 |
|---|
| < 1M | CNN | 归纳偏置弥补数据不足 |
| 1M - 14M | 两者接近,CNN略优 | ViT需要更多数据 |
| > 14M | ViT优 | 大规模数据发挥ViT优势 |
数据增强的影响
研究发现,数据增强对两种架构的效果不同:
| 增强策略 | CNN效果 | ViT效果 |
|---|
| 随机裁剪 | 提升明显 | 效果有限 |
| Mixup/CutMix | 有效 | 需要调整 |
| 自监督预训练 | - | 显著提升 |
任务适应性对比
图像分类
| 场景 | 推荐 | 说明 |
|---|
| 小数据集 | CNN | ResNet、EfficientNet |
| 大规模标准任务 | ViT | ImageNet-21K+ |
| 细粒度分类 | CNN+Attention | 两者结合 |
目标检测
| 方法 | Backbone | 特点 |
|---|
| YOLO | CNN | 实时性好 |
| DETR | ViT | 端到端,无需NMS |
| Swin Transformer | 层次ViT | 结合两者优点 |
语义分割
| 方法 | Backbone | 优势 |
|---|
| U-Net | CNN | 医学图像 |
| SegFormer | ViT | 全局上下文 |
| SETR | ViT | 长距离依赖 |
视频处理
| 任务 | 推荐架构 | 理由 |
|---|
| 动作识别 | 3D CNN / SlowFast | 时序局部性 |
| 视频分类 | Video Transformer | 全局时序建模 |
| 时空建模 | 混合架构 | 两者结合 |
部署效率对比
计算需求
| 指标 | CNN | ViT |
|---|
| FLOPs (ImageNet Top-1) | 较低 | 较高 |
| 参数量 | 较少 | 较多 |
| 推理延迟 | 较低 | 较高 |
| 内存占用 | 较低 | 较高 |
硬件适配性
| 硬件平台 | 推荐架构 | 优化策略 |
|---|
| CPU | CNN | 剪枝、量化 |
| GPU (A100/H100) | 两者均可 | FlashAttention |
| 移动端 | CNN | MobileNet、EfficientNet |
| 专用加速器 | CNN | 稀疏化 |
优化技术
CNN优化
# 常见CNN优化技术
- 深度可分离卷积 (MobileNet)
- 残差连接 (ResNet)
- 通道剪枝
- INT8量化
ViT优化
# 常见ViT优化技术
- Flash Attention
- 稀疏注意力
- KV Cache
- FP16/BF16混合精度
选择决策树
开始
│
├─ 数据量 < 1M?
│ │
│ ├─ 是 → 使用 CNN (ResNet50/EfficientNet)
│ │
│ └─ 否 → 继续判断
│
├─ 实时性要求高?
│ │
│ ├─ 是 → 使用 CNN 或 轻量ViT (DeiT-Tiny)
│ │
│ └─ 否 → 继续判断
│
├─ 需要全局建模?
│ │
│ ├─ 是 → 使用 ViT 或 Swin Transformer
│ │
│ └─ 否 → 使用 CNN
│
└─ 部署平台?
│
├─ 移动端/边缘 → CNN (MobileNet)
├─ 服务器 → 两者均可
└─ 专用硬件 → 根据优化成熟度选择
混合架构趋势
最新的融合方向
| 架构 | 融合策略 | 代表模型 |
|---|
| ConViT | CNN + ViT | ConViT, CVT |
| Swin Transformer | 层次化 + 局部注意力 | Swin, MViT |
| ConvMixer | 混合表示 | ConvMixer |
| MaxViT | 多尺度混合 | MaxViT |
设计原则
- 局部+全局:用卷积捕获局部特征,用注意力捕获全局依赖
- 层次化设计:借鉴CNN的层次结构改进ViT
- 计算效率:平衡局部和全局计算开销
总结
选择指南
| 因素 | CNN | ViT |
|---|
| 数据量少 | ✅ 优势 | ❌ |
| 计算资源有限 | ✅ 优势 | ❌ |
| 长距离依赖重要 | ❌ | ✅ 优势 |
| 实时性要求高 | ✅ 优势 | ❌ |
| 需要可解释性 | 局部特征 | 注意力可视化 |
| 大规模训练 | ❌ | ✅ 优势 |
未来趋势
- 统一架构:NLP和CV的Transformer统一
- 高效变体:越来越多高效的ViT设计
- 混合架构:CNN和ViT的深度融合
- 自适应计算:根据输入动态选择计算路径
参考