第6章

第6章:视频理解模型

构建驾驶视频理解模型,掌握 3D Conv/TimeSformer 视频编码、时序池化、Video-LLM 架构与流式处理。

TimeSformerVideoMAEVideo-LLM时序池化驾驶视频QA

TimeSformer, Video-LLM — 理解驾驶视频


第一部分:3D Patch Embedding

1.1 从图像到视频

第2章的 ViT 将图像分割为空间 patches。视频的挑战在于增加了时间维度:


图像: (C, H, W) → Patch: (patch_size, patch_size) → N = (H/P) × (W/P) tokens
视频: (C, T, H, W) → Patch: (patch_size_t, patch_size, patch_size) → N = (T/Pt) × (H/P) × (W/P) tokens

例如 16帧 224×224 视频,patch_size=16, patch_size_t=2:

- T' = 16/2 = 8 时间块

- H' = W' = 14 空间块

- 共计 8×14×14 = 1568 个时空 tokens

1.2 3D 卷积实现


self.proj = nn.Conv3d(
    3, hidden_dim,
    kernel_size=(patch_size_t, patch_size, patch_size),
    stride=(patch_size_t, patch_size, patch_size),
)

第二部分:Divided Space-Time Attention

2.1 核心创新

全时空 attention 复杂度为 O((T×N)²),对于视频完全不可行。

TimeSformer 将注意力分解为:

- 空间注意力 (S-Attn): 每帧内 patch 之间的 attention → O(T × N²)

- 时间注意力 (T-Attn): 每个空间位置跨帧的 attention → O(N × T²)

2.2 直观理解

- S-Attn: "这一帧里,哪些区域是相关的?"

- T-Attn: "这个位置上的物体,在不同帧间如何变化?"

- 两者交替执行,信息逐步融合

2.3 复杂度对比

方案 复杂度 T=8, N=196
Joint O(T²N²) ~2.5M ops
Divided O(TN² + NT²) ~320K ops
加速比 ~8x

第三部分:时序池化

3.1 为什么需要池化?

1568 个时空 tokens + LLM 的文本 tokens = 序列太长。需要压缩。

3.2 池化策略

策略 输出长度 适用场景
Mean Pool 1 简单场景分类
Max Pool 1 关键帧检测
Token Merge N/r 需要保留部分时序信息
Q-Former K (learned) 自适应关键信息提取
Last Frame 64 取最后帧(最近信息)

第四部分:驾驶视频应用

4.1 行为识别

- 变道、转弯、刹车、加速、停车

4.2 时序定位

- "变道发生在第30-70帧"

4.3 驾驶视频问答

- "What happened between frame 30 and 70?"

- "Is the driver changing lanes safely?"

4.4 实时流处理

- 滑动窗口(8-16帧 buffer)

- 逐帧/逐片段增量处理

- 适合车载部署


总结

1. ✅ 3D Patch Embedding: 时空 tokenization

2. ✅ Divided Attention: O(TN²+NT²) 高效时空注意力

3. ✅ 时序池化: 5种策略压缩时序 token

4. ✅ Video-LLM: 视频+语言的完整 pipeline

5. ✅ Temporal Grounding: 定位行为起止帧

6. ✅ 实时流处理: 滑动窗口车载部署


下一章:BEV 感知 — 多相机融合的 3D 空间理解