TDC: Multimodal Long Video Modeling Based on Temporal Dynamic Context
Paper: arXiv:2504.10443 Code: Hoar012/TDC-Video Code reference:
main@fb8333ec(2025-07-22) Authors: Haoran Hao, Jiaming Han, Yiyuan Zhang, Xiangyu Yue Affiliations: MMLab, The Chinese University of Hong Kong, Nanjing University Year: 2025
1. Motivation (研究动机)
1.1 问题背景
现有视频理解模型面临两大核心挑战:
- 长视频token爆炸问题:LLM上下文长度有限,密集采帧导致token数量过多;稀疏采帧则丢失关键信息
- 多模态融合不足:大多数视频LLM仅处理视觉+文本,忽略音频;少数尝试加入音频的方法(如VideoLLaMA)采用简单拼接,各模态独立编码后直接串联,导致模态间缺乏深度交互
1.2 核心贡献
- Temporal Dynamic Context (TDC):提出基于时间动态上下文的视频表示方法,将静态视觉特征与动态多模态上下文统一在同一表示中,实现高效的视觉-音频联合压缩
- Long Video Chain-of-Thought (LVCoT):免训练的长视频推理策略,将超长视频分段逐步推理后综合回答
- 多阶段训练策略:三阶段渐进式训练,从视觉-语言对齐到视频指令微调再到音视频联合微调
2. Idea (核心思想)
2.1 整体思路
Figure 1 解读:对比了现有方法与TDC方法的区别。(a) 现有方法将图像编码器和音频编码器独立处理,然后简单拼接各模态token送入MLLM,这种方式在处理长视频时导致模态间缺乏关联性且token数量过多。(b) TDC方法则将视频按场景分段,每段保留第一帧的完整静态特征(Visual Token + Audio Token),后续帧通过Temporal Compressor压缩为少量Multimodal Context Token,实现了视觉-音频的统一压缩表示,大幅减少token数量的同时保留了关键信息。
Figure 2 解读:TDC多模态视频编码器的详细架构。视频按1fps采帧,每帧同时通过Visual Encoder(DINOv2 + SigLIP,得到144个token)和Audio Encoder(BEATs,约50个token/秒)提取特征。在每个滑动窗口(场景段)内,第一帧被选为静态帧,保留全部视觉和音频token。后续帧的特征通过Q-Former压缩:首先对静态帧特征做Average Pooling得到K个Query token,然后Q-Former以这些Query为输入,对后续帧的视觉+音频token做交叉注意力,输出K个压缩的Multimodal Video Context token。最终表示由所有静态帧token和压缩后的动态上下文token拼接而成,中间用<Sep>分隔。
2.2 核心设计点
静态 + 动态双表示:保留关键帧完整特征,同时压缩后续帧的动态变化 语义场景分割:用帧间语义一致性替代固定切片,减少错误跨场景关联 文本引导压缩:让压缩过程感知问题,从而更聚焦于相关信息 免训练长视频推理:LVCoT把长视频拆分为可管理片段,再汇总推理
2.3 定性示例与 LVCoT 直观解释
Figure 3 解读:定性示例展示两个能力边界:其一,模型能同时利用画面和声音回答音视频对话问题;其二,在超长视频中,LVCoT 会按时间段生成中间描述,再把这些带时间线的中间结果作为最终回答的推理上下文。这个策略不需要额外训练,但它更像测试时分段记忆汇总,而不是模型内部真正学到的长程推理机制。
3. Method (方法)
3.1 视频场景分割
不同于现有方法将视频均匀切分为固定时长片段,TDC基于帧间语义一致性进行自适应场景分割:
- 使用DINOv2提取每帧的高维embedding
- 计算相邻帧的余弦相似度
- 选取相似度最低的 个点作为分割边界,将视频切分为 个语义一致的场景
默认最大场景数 。
3.2 时间动态上下文编码
静态特征编码
对每个场景段,保留第一帧的完整特征作为静态表示。每秒提取一帧,使用视觉编码器和音频编码器分别处理:
视觉:DINOv2 + SigLIP 144个聚合token/帧 音频:BEATs(16kHz重采样) 约50个token/秒
动态上下文压缩
对场景内除第一帧外的后续帧,通过Q-Former进行压缩:
Step 1: 从静态帧特征生成Query token
其中 为query token数量, 为特征维度。使用Average Pooling而非可学习query,因为实验表明AvgPool能更好地表示静态参考帧并提取动态变化。
Step 2: Q-Former交叉注意力压缩(不含文本指令)
其中 表示token拼接, 和 分别为第 帧的视觉和音频token。
Step 3: 加入文本指令引导压缩
其中 为用户指令文本的token,引导Q-Former关注与问题相关的信息。
Step 4: 拼接最终TDC表示
静态帧保留完整的视觉+音频token,后续帧压缩为K个多模态上下文token。使用可学习的<Sep> token分隔静态token和动态上下文token。
3.3 Long Video Chain-of-Thought (LVCoT)
针对超长视频(如电影),提出免训练的分段推理策略:
def lvcot(video, question: str, mllm, M: int = 3) -> str:
"""Long Video Chain-of-Thought (LVCoT): training-free segmented reasoning."""
# Step 1: Split video into M equal temporal segments
segments = split_temporal(video, M) # V = {V_1, V_2, ..., V_M}
# Step 2: Generate per-segment summaries via MLLM
summaries = []
for i, segment in enumerate(segments):
encoded = encode_video(segment)
prompt = f"Given the question: '{question}', summarize the relevant information in this segment."
summary = mllm.generate(encoded, prompt)
summaries.append(summary)
# Step 3: Concatenate summaries with temporal context
timestamps = get_segment_timestamps(video, M)
context = "; ".join(
f"From {timestamps[i]}s to {timestamps[i+1]}s: {s}"
for i, s in enumerate(summaries)
)
# Step 4: Final answer generation with full context
answer = mllm.generate(context, question)
return answer关键特点: 免训练,可直接应用于任何MLLM 中间摘要作为思维链的一部分,包含时间信息 视频越长效果越明显(在MLVU和VideoMME Long上提升显著)
4. Experimental Setup (实验设置)
4.1 多阶段训练策略
| 阶段 | 目标 | 数据量 | 数据来源 | 训练模式 | 学习率 |
|---|---|---|---|---|---|
| Stage 1: 视觉-语言对齐 | 图文对齐预训练 | 3.2M | LLaVA-OneVision | Full | 1e-5 |
| Stage 2: 视频指令微调 | 视频理解能力 | Qwen2-7B: 2M / LLaMA-3B: 540K | LLaVA-Video, VideoChat2-IT, MovieChat等 | Full | 1e-5 |
| Stage 3: 音视频联合微调 | 音频-视觉联合理解 | Qwen2-7B: 300K / LLaMA-3B: 120K | Music-AVQA, AVQA, AVSD, LongVALE, AVInstruct | LoRA | 2e-5 |
训练细节: 最大序列长度:8192 优化器:AdamW 学习率调度:Cosine Decay,3% warmup 视觉/音频编码器冻结,仅训练Temporal Compressor和LLM Stage 3使用LoRA降低GPU显存消耗 每阶段训练1个epoch Q-Former使用预训练BERT初始化
4.2 代码结构与复现
| 目录/文件 | 功能 | 对应论文部分 |
|---|---|---|
tdc/ | 核心模型实现 | Section 3 (Methodology) |
tdc/ (Q-Former部分) | Temporal Dynamic Context压缩器 | Section 3.2 (TDC编码) |
scripts/ | 三阶段训练脚本 | Section 3.3 (训练策略) |
eval/ | 各benchmark评估脚本 | Section 4 (实验) |
checkpoints/audio_encoder/ | BEATs预训练权重 | Section 3.1 (音频编码) |
main.py | 推理入口 | 推理/Demo |
examples/ | 示例文件 | - |
Backbone LLM: Qwen2-7B / LLaMA3.2-3B 视觉编码器: DINOv2 + SigLIP (冻结),144 token/帧 音频编码器: BEATs (冻结),16kHz,~50 token/秒 Q-Former: 基于BERT初始化,16个query token 可用模型: TDC-Qwen2-7B, TDC-Llama3_2-3B (HuggingFace)
5. Experimental Results (实验结果)
5.1 通用视频理解(7B模型)
| 模型 | 大小 | 帧 | 帧 | MVBench | PerceptionTest | EgoSchema | MLVU | VideoMME |
|---|---|---|---|---|---|---|---|---|
| GPT4-o | - | 1fps | - | 64.6 | - | 72.2 | 64.6 | 71.9 |
| LLaVA-OneVision | 7B | 32 | 196 | 56.7 | 57.1 | 60.1 | 64.7 | 58.2 |
| InternVL2.5 | 7B | 12 | 256 | 72.0 | 68.2 | 51.5 | 68.9 | 64.2 |
| LongVU | 7B | 1fps | 144/64 | 66.9 | - | 67.6 | 65.4 | - |
| MAmmoTH-VL | 8B | 5 | 729 | 59.1 | 59.3 | 58.5 | 64.7 | 58.8 |
| VideoLLaMA2 (7B) | 7B | 16 | 72 | 54.6 | 51.4 | 51.7 | 48.5 | 47.9 |
| TDC (Ours) | 7B | 1fps | 16 | 68.3 | 67.5 | 65.7 | 64.1 | 57.8 |
关键发现: TDC在音视频MLLM中全面最优,在MLVU上超越VideoLLaMA2达 15.6%,VideoMME超出 9.9% 每帧仅16个压缩token(后续帧),远低于其他方法的72-256个token 对比纯视觉MLLM也具有竞争力,且额外具备音频理解能力
5.2 小模型结果(3B)
| 模型 | LLM | 大小 | 帧 | MVBench | EgoSchema | MLVU | VideoMME |
|---|---|---|---|---|---|---|---|
| LongVU | LLaMA3.2 | 3B | 1fps | 60.9 | 59.1 | 51.5 | 55.9 |
| TDC (Ours) | LLaMA3.2 | 3B | 1fps | 62.7 | 61.0 | 58.9 | 59.5 |
在3B-4B参数量级中全面最优 在MLVU上超越LongVU达 7.4%
5.3 音视频联合理解
| 模型 | 大小 | 帧 | Token | AVSD | Music-AVQA |
|---|---|---|---|---|---|
| VideoLLaMA2 | 7B | 16 | 72 | 57.2 | 79.2 |
| VideoLLaMA2.1 | 7B | 16 | 72 | 57.2 | 80.9 |
| LongVALE | 7B | 100 | 256 | 54.8 | 49.4 |
| TDC (Ours) | 7B | 1fps | 16 | 57.6 | 78.7 |
AVSD最优(57.6),Music-AVQA与VideoLLaMA2系列接近
5.4 VideoMME详细结果
| 模型 | 大小 | 帧 | S(短) | M(中) | L(长) | Overall |
|---|---|---|---|---|---|---|
| LLaVA-OneVision | 7B | 32 | 69.1 | 53.3 | 46.7 | 58.2 |
| LongVU | 7B | 1fps | 64.7 | 58.2 | 59.5 | 60.9 |
| TDC (Ours) | 7B | 1fps | 70.0 | 66.2 | 61.3 | 65.9 |
短/中/长视频全面最优,证明了方法在不同时长视频上的泛化性
5.5 消融实验
| 消融项 | 设置 | MVBench | MLVU | VideoMME (Overall/Long) |
|---|---|---|---|---|
| (a) 场景分段数 | ||||
| 1 (无分段) | 53.5 (-9.2) | 58.7 (+0.9) | 53.2 (+0.5) | |
| 24 (默认) | 62.7 | 59.6 | 52.7 | |
| 48 | 62.2 (-0.5) | 58.5 (-1.1) | 51.0 (-1.7) | |
| (b) Query类型 | ||||
| Learned Query | 61.7 (-1.0) | 59.5 (+0.1) | 52.1 (-0.6) | |
| AvgPooling (默认) | 62.7 | 59.6 | 52.7 | |
| (c) 上下文token数 | ||||
| 32 | 61.7 (-1.0) | 58.4 (-1.2) | 52.1 (-0.6) | |
| 16 (默认) | 62.7 | 59.6 | 52.7 | |
| (d) 文本指令 | ||||
| 无文本输入 | 62.3 (-0.4) | 58.0 (-1.6) | 51.5 (-1.2) | |
| 有文本输入 (默认) | 62.7 | 59.6 | 52.7 | |
| (e) LVCoT效果 | ||||
| 3B 无LVCoT | 62.7 | 59.6 | 52.7 | |
| 3B + LVCoT | 62.7 | 58.9 (+0.6*) | 52.7 | |
| 7B 无LVCoT | 68.3 | 65.9 | 61.3 | |
| 7B + LVCoT | 68.3 | 66.2 (+0.3) | 61.8 (+0.5) |
消融结论: 场景分段至关重要:无分段时MVBench下降9.2%,因为非连续帧间建立了错误关联 AvgPooling优于Learned Query:能更好表示参考帧并提取动态变化,且无额外计算开销 16个context token为最优平衡点:增加到32反而下降,因为token数增加限制了可处理帧数 文本指令对长视频帮助更大(MLVU +1.6%, VideoMME +1.2%) LVCoT在长视频上效果更明显,7B模型上VideoMME Long +0.5%
6. 个人思考与总结
6.1 创新点评价
优势:
- 统一多模态压缩:将视觉和音频token通过Q-Former联合压缩而非简单拼接,是该工作最核心的贡献。每帧仅16个token的压缩率非常高效
- 语义场景分割:基于DINOv2帧间相似度的自适应分割比固定切分更合理,保证了场景内语义一致性
- 静态+动态双表示:保留关键帧完整特征+压缩后续帧动态变化的设计很直觉,类似人类”先看全局再关注变化”的认知模式
- 文本引导压缩:将用户指令注入Q-Former,使压缩过程具有问题感知能力
局限性:
- LVCoT提升有限:仅+0.3~0.6%的提升,作者也承认这是因为模型未针对该任务训练。这说明免训练的CoT策略在视频理解上效果有限
- 计算开销:LVCoT需要多次处理视频段,引入额外推理开销但提升微弱
- 对比不够公平:TDC用1fps密集采帧+16 token压缩,vs其他方法的稀疏采帧+更多token,total token数可能相近但方式不同,很难说哪种更优
6.2 方法细节补充:为什么“动态上下文”不是普通 pooling
TDC 的压缩目标不是把若干帧平均成一个短向量,而是在场景内部建立“参考帧—后续变化”的关系: 静态首帧保留较完整的视觉内容,承担场景锚点作用。 后续帧不再完整输入 LLM,而是以动态上下文 token 表达相对于首帧的变化。 音频 token 与视觉 token 一起进入压缩器,让声音事件能影响最终视频表示。 用户指令作为文本输入参与压缩,使 Q-Former 不只是做无条件摘要,而是偏向与问题相关的信息。 这种设计的实际意义是:长视频理解常常不是“每一帧都重要”,而是“场景是否变化、变化发生在哪里、声音和画面是否互相解释”。TDC 把这类信息前置到 encoder 侧压缩,避免 LLM 端直接面对大量冗余 frame tokens。
6.3 与相邻工作的差异
和 LongVU、LongVA 这类长视频视觉模型相比,TDC 的关键区别在于它不是只优化视觉 token 预算,而是显式把音频也纳入动态上下文。 和 VideoLLaMA2/VideoLLaMA2.1 这类音视频 MLLM 相比,TDC 的关键区别在于音频不是简单附加模态,而是在场景内与视觉 token 一起被压缩。 和训练视频 CoT 的工作相比,LVCoT 是训练-free 的测试时策略,因此更容易叠加到现有模型,但提升也更有限。 这意味着 TDC 的主要贡献应定位为“长视频音视频表示压缩 + 轻量测试时分段推理”,而不是单纯的视频问答 benchmark 刷分。
6.4 结果解读补充
主表中 TDC-7B 在 audio-visual MLLM 组里表现稳定: MVBench:68.3,高于 VideoLLaMA2.1-7B 的 57.3。PerceptionTest:67.5,高于 VideoLLaMA2.1-7B 的 54.9。EgoSchema:65.7,高于 VideoLLaMA2.1-7B 的 53.1。MLVU:64.1,高于 VideoLLaMA2-7B 的 48.5。VideoMME:57.8,高于 VideoLLaMA2.1-7B 的 54.9。但与纯视觉或闭源系统相比要更谨慎: GPT-4o、Gemini-1.5-Pro 在部分 benchmark 上仍更强。
PVC-8B 在 MVBench/MLVU/VideoMME 上也有强竞争力。TDC 的优势更集中在“1fps 长视频覆盖 + 音频能力 + 低 per-frame token”这一组合上。3B 结果更能说明结构有效性:TDC-Llama3.2-3B 在 MVBench/EgoSchema/MLVU/VideoMME 分别为 62.7/61.0/58.9/59.5,而 LongVU-Llama3.2-3B 为 60.9/59.1/51.5/55.9;这说明 TDC 的设计不只依赖 7B 参数规模。音视频评测中,TDC 在 AVSD 上 57.6,略高于 VideoLLaMA2/2.1 的 57.2;
在 Music-AVQA 上 78.7,低于 VideoLLaMA2.1 的 80.9,也低于 VideoLLaMA2 的 79.2。因此论文声称“best on AVSD and compatible on Music-AVQA”比“全面优于音视频模型”更准确。
6.5 消融实验的可复现含义
默认设置是最大 24 个 scene segments、AvgPooling query、每帧 16 个 context tokens、带 text instruction。 无分段时 MVBench 从 62.7 降到 53.5,说明把整段视频当作一个场景会让 Q-Former 在不连续帧之间建立错误关系。 48 个 segment 的性能没有继续提升,说明过细切分会破坏上下文聚合或带来额外 token/调度成本。 Learned Query 与 AvgPooling 的分数接近,但 learned query 有额外计算开销;论文因此选择 AvgPooling 作为默认 query。 去掉 text instruction 后 VideoMME 从 52.7 降到 51.5,MLVU 从 59.6 降到 58.0,说明问题感知压缩对长视频更重要。 LVCoT 对 7B 的 VideoMME overall 从 65.9 到 66.2,Long split 从 61.3 到 61.8;增益不大,但符合“超长视频更需要分段记忆”的直觉。
6.6 代码核对与 paper-vs-code gap audit
本次核对使用 GitHub 默认分支:
Code reference:
main@fb8333ec(2025-07-22)
| 论文概念 | 代码位置 | 核对结论 |
|---|---|---|
| Q-Former / temporal context compression | tdc/Qformer.py | 代码包含 BertLMHeadModel、cross-attention、query_length 等 Q-Former/BERT 结构,和论文“query-based Transformer”一致。 |
| 静态视觉 token + 动态上下文 token | tdc/cambrian_arch.py | 代码中出现 VisionTokenSampler、query_num_list、image_token_len、max_num_segments 等控制项,对应论文的 token 压缩和场景段处理。 |
| 音频编码 | tdc/audio_models/audio_encoder.py | 代码加载 BEATs/Whisper 相关模块,并在 stage3 脚本中开启 audio_input=True,对应论文音视频联合建模。 |
| Stage 2 视频指令微调 | scripts/stage2/train_video_qwen.sh | video_fps=1、max_num_segments=24、query_num_list="[144]"、audio_input=False、学习率 5e-6。 |
| Stage 3 音视频 LoRA 微调 | scripts/stage3/train_video_audio_qwen_lora.sh | audio_input=True、max_num_segments=24、query_num_list="[144]"、学习率 2e-5、lora_enable=True。 |
paper-vs-code gap audit:未发现论文“1fps、最多 24 个场景段、音视频 stage3、Q-Former 压缩”与公开代码中对应训练脚本/模型结构存在明显冲突。
需要注意的实现差异:论文表述每帧默认 16 个 context tokens,而公开训练脚本里 query_num_list="[144]" 与 image_token_len=144 同时出现;代码命名更接近内部 sampler/query grid 配置,不宜直接把脚本里的 144 解释成论文表格中的 per-frame context token 数。
6.7 复现风险与阅读建议
复现 TDC 不能只运行 README 的评测命令,还需要补齐三类外部资产: 基座 LLM:Qwen2-7B 或 Llama3.2-3B 系列。 视觉/音频 encoder:DINOv2/SigLIP 视觉塔、BEATs 与 Whisper 相关权重。 分阶段训练数据:Stage1 图文对齐、Stage2 视频指令、Stage3 音视频指令数据。 若只想验证方法有效性,优先复现实验应是:
- 用 Stage2 脚本跑无音频视频指令微调,验证 TDC 对 MLVU/VideoMME 的收益。
- 再加入 Stage3 音频 LoRA,验证 AVSD/Music-AVQA 的变化。
- 单独改
max_num_segments、text instruction、query 类型,复查消融是否重现。
6.8 References
Paper: Multimodal Long Video Modeling Based on Temporal Dynamic Context PDF: arXiv PDF 2504.10443 Project page: TDC-Video Code: Hoar012/TDC-Video Models: Hoar012/TDC-Qwen2-7B, Hoar012/TDC-Llama3_2-3B