15. 视频大模型怎么做时序建模?Video Token 化有哪些主流方案?
整理视频大模型的时序建模方式,以及 Video Token 化的主流方案。
简单回答
视频理解的核心挑战是时序建模和计算效率——视频是图像的时间序列,帧间有强相关性,但如果每帧都完整编码,token 数量会爆炸式增长(30fps × 10s = 300 帧)。主流方案分三类:稀疏帧采样(只取关键帧)、3D Patch 化(把空间+时间一起切分)、以及帧级编码后做时序聚合。帧间时序关系的建模是区分视频理解能力强弱的关键,纯粹的"帧袋"(Bag-of-Frames)方法缺乏真正的时序理解。
详细解答
视频理解的独特挑战
视频和图片的本质差异在于时间维度。一些问题单看单帧就能回答("图中有几个人"),但大量视频理解任务依赖时序信息:
- 动作识别:需要理解连续帧之间的运动趋势
- 因果推理:先发生了什么导致后来什么
- 长视频摘要:需要理解整个视频的叙事结构
- 视频问答:某个事件发生在哪个时间段
另一个独特挑战是计算量。即使一秒钟的视频有 30 帧,每帧如果像普通图片一样处理,产生 256 个 visual token,1 秒就是 7680 个 token。10 分钟视频有 300 万个 token,完全超出了 LLM 的 context window,也超出了显存和计算预算。
方案一:稀疏帧采样(Sparse Frame Sampling)
最简单的做法是从视频里均匀采样若干关键帧(比如每秒 1 帧,或全视频采 8~32 帧),每帧独立用 Vision Encoder 编码成 visual token,然后按时间顺序拼接后送入 LLM。
代表性系统:VideoLLaMA、Video-ChatGPT、Video-LLaVA 等早期方案普遍采用这种方式。
优点是工程实现简单,可以直接复用图片 VLM 的基础架构。缺点是帧与帧之间完全独立编码,没有建模帧间的时序关系——LLM 知道两张图片的内容,但不一定知道它们在时间上的关联,对快速运动、短时动作的识别能力弱。
方案二:3D Patch 化(Spatiotemporal Tokenization)
更原生的视频 token 化是把时间维度和空间维度一起处理——把视频看成一个 3D 体积,沿时间轴切分 temporal patch(比如每 2 帧一组),再在每个 temporal patch 内做 spatial patch 切分,得到 spatiotemporal token。
这相当于把 2D ViT 扩展成 3D ViT,每个 token 对应的不是单帧的一个空间位置,而是多帧同一位置的一段时间片段。建模帧间运动和时序变化是这种 token 化方式的天然优势。
代表性工作:Video-MAE、ViViT、TimeSFormer 等视频理解模型用了 3D patch 化。Sora 的 video patch(Video Diffusion Transformer 的核心)也是类似的 3D token 思路,只不过用在了生成端。
代价是参数量和计算量更大:3D 注意力的计算复杂度是 ,其中 是时间步数, 是空间 patch 数,对长视频不友好。
方案三:帧级编码 + 时序聚合
折中方案:用 2D Vision Encoder 分别对每帧编码,得到帧级 visual token;再用一个专门的时序模块(Temporal Transformer、时序池化、或 Q-Former)聚合帧级特征,大幅压缩 token 数量,再送给 LLM。
这是目前主流视频 LLM 采用的架构。时序聚合模块可以:
- 对时间维度做 pooling(把 T 帧的同一位置 token 取平均),降低 token 数 T 倍
- 用可学习的 Query 去聚合帧序列(Q-Former 风格),固定输出 token 数
- 用 Cross-Attention 让 LLM 的每个输出 token 自适应地关注相关的帧
代表性工作:Video-LLaVA Plus、InternVL-Video、Qwen2-VL(视频版)等。
长视频理解的特殊挑战
短视频(1~3 分钟内)用上述方案通常够用,长视频(10 分钟以上)有额外的挑战:
记忆与压缩:LLM 的 context window 有限,10 分钟视频即使每秒只取 1 帧也有 600 帧,超出限制。需要在时间维度做更激进的压缩,或者用滑动窗口分段处理。
跨时间段推理:"第 3 分钟发生的事件和第 8 分钟的事件有什么关联",这类问题需要模型能在时间上长程推理,现有方案很难处理。
视频 RAG:把长视频切段,每段提取特征存进向量库,根据问题检索相关片段,类似文档 RAG 的思路——这是工程上处理长视频的主流现实方案。
面试时可以这样答
视频理解的核心难点是时序建模加上 token 数量爆炸。30fps 的视频每秒 30 帧,每帧 256 个 token,10 秒就 7 万多 token,LLM 根本吃不下。
主流方案有三类。稀疏帧采样最简单,均匀抽关键帧独立编码,工程实现直接,但帧间没有显式的时序建模,对快速动作识别弱。3D Patch 化把时间和空间一起切,token 本身就包含时序信息,理论上最好,但计算量是 2D 的好几倍,长视频扛不住。折中方案是帧级编码加时序聚合——每帧独立编码完,用时序 Transformer 或 Q-Former 压缩成固定数量的 token 再给 LLM,现在主流视频 LLM 基本都用这个。
长视频(10 分钟以上)还没有特别成熟的方案,工程上最常见的是视频 RAG——切段提特征存向量库,问题来了检索相关片段,类似文档 RAG 的思路,但精度有限。
常见追问
- Qwen2-VL 对视频处理有什么特别设计?Dynamic Resolution 在视频上是怎么用的?
- 视频理解和视频生成(Sora)在 token 化上有什么区别?
- 如果要支持实时视频流(而不是离线视频),推理架构需要做什么改变?