张芷铭的个人博客

C3D 首次将 3D 卷积成功应用于视频理解,通过时空三维卷积核同时捕捉空间外观和时序运动特征。

核心原理

3D 卷积数学表达

$$O(t,x,y) = \sum_{i,j,k} W(i,j,k) \cdot V(t+i, x+j, y+k) + b$$

与 2D 卷积的关键区别:时间维度 $k_t$ 的滑动。

网络架构

1
2
3
4
5
6
7
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

性能对比

ModelUCF101 Top-1参数量FLOPs
C3D82.3%78M38.5G
2D-CNN+LSTM76.4%65M29.7G
IDT85.9%--

应用

1
2
3
4
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)

代码:https://github.com/facebookresearch/C3D

Comments