C3D 首次将 3D 卷积成功应用于视频理解,通过时空三维卷积核同时捕捉空间外观和时序运动特征。
核心原理
3D 卷积数学表达:
与 2D 卷积的关键区别:时间维度 的滑动。
网络架构
Input(3×16×112×112)
├── Conv3D(64, 3×3×3) → MaxPool(1×2×2)
├── Conv3D(128, 3×3×3) → MaxPool(2×2×2)
├── Conv3D(256, 3×3×3) ×2 → MaxPool(2×2×2)
├── Conv3D(512, 3×3×3) ×2 → MaxPool(2×2×2)
├── FC(4096) ×2
└── Softmax训练配置
| 超参数 | 设置 |
|---|---|
| 帧采样 | 均匀采样 16 帧 |
| 空间裁剪 | 112×112 |
| 优化器 | SGD + Momentum(0.9) |
| 学习率 | 0.003,每 150k 迭代 ×0.1 |
性能对比
| Model | UCF101 Top-1 | 参数量 | FLOPs |
|---|---|---|---|
| C3D | 82.3% | 78M | 38.5G |
| 2D-CNN+LSTM | 76.4% | 65M | 29.7G |
| IDT | 85.9% | - | - |
应用
import torch
model = torch.hub.load('facebookresearch/pytorchvideo', 'c3d', pretrained=True)
inputs = torch.randn(1, 3, 16, 112, 112) # (B,C,T,H,W)
outputs = model(inputs)局限与改进
局限:
- 16 帧限制难以建模长时序
- 3D 卷积高显存占用
改进方案:
- P3D:分解为 2D 空间 + 1D 时间卷积
- SlowFast:双路径分别处理空间和运动信息,计算量减少 40%
最佳实践
- 轻量场景:C3D 基础版
- 高性能需求:SlowFast/R(2+1)D
- 长视频理解:结合 Transformer(TimeSformer)