InternVideo2.5: Empowering Video MLLMs with Long and Rich Context Modeling
Authors: Yi Wang, Xinhao Li, Ziang Yan, Yinan He, Jiashuo Yu 等 (Shanghai AI Lab, Nanjing University, Shanghai Innovation Institute) GitHub: OpenGVLab/InternVideo, OpenGVLab/VideoChat-Flash
1. Motivation (研究动机)
当前视频多模态大语言模型 (Video MLLM) 面临两个核心瓶颈:
- 上下文长度不足 (Memory): 现有 MLLM 处理视频帧数有限, InternVL2.5-8B 甚至在 500 帧内就难以准确召回信息, 超过 1000 帧直接 OOM. 这严重限制了对长视频 (分钟级/小时级) 的理解能力.
- 上下文精细度不够 (Focus): MLLM 在基础视觉任务 (目标定位、跟踪、分割) 上表现不佳, 难以感知细粒度的时空细节, 如物体运动轨迹、精确时间边界等.
核心洞察: 提升多模态上下文的长度 (length) 和精细度 (fineness) 是增强视频 MLLM 能力的关键方向, 而非简单地增大模型规模或数据量.
Figure 1 解读: 左图展示了 InternVideo2.5 在 MVBench (短视频) 和 VideoMME (长视频) 上的性能对比. 相比 InternVL2.5 基座模型, InternVideo2.5 实现了全面提升, 并且能记忆 6 倍以上长度的视频输入. 右图展示了模型追踪指定行人并分析运动轨迹的能力, 体现了细粒度时空感知.
2. Idea (核心思想)
InternVideo2.5 提出 Long and Rich Context (LRC) Modeling, 通过两个正交且互补的技术增强视频 MLLM:
| 组件 | 目标 | 技术 |
|---|---|---|
| HiCo (Hierarchical Token Compression) | 增长上下文长度 (Memory) | 自适应分层 token 压缩: ToMe + TDrop |
| TPO (Task Preference Optimization) | 增强上下文精细度 (Focus) | 多任务偏好学习: 时序定位头 + 分割头 |
关键思想:
- HiCo: 利用视频时空冗余, 在 vision encoding 阶段通过 ToMe 进行 clip 级压缩, 在 LLM 处理阶段通过 TDrop 进行 video 级压缩, 实现约 1/50 的极端压缩比且几乎无性能损失
- TPO: 将专家级视觉感知能力 (时序定位、实例分割) 通过 DPO 思路注入 MLLM, 使其在保持通用对话能力的同时获得精确的视觉分析能力
3. Method (方法)
Figure 2 解读: InternVideo2.5 的整体框架. 视频被分为多个 clip, 经 Vision Encoder 编码后通过 Connector (含 ToMe 压缩) 映射到 LLM 空间. 在 LLM 的 Transformer Block 中, TDrop 进一步减少 token 数量. 同时, Task Preference Model 包含 Temporal Head 和 Mask Head, 通过可学习的 task embedding 与 LLM 交互, 实现时序定位和分割任务.
3.1 HiCo: 分层 Token 压缩
HiCo 包含三个非学习性的组件:
(a) Adaptive Temporal Sampling (自适应时序采样)
根据视频时长动态调整采样帧率:
- 短视频 (需要运动细粒度): 15 FPS 密采样
- 长视频 (分钟/小时级, 事件级理解): 1 FPS 稀疏采样
- 帧数范围: 128-512 帧
伪代码: Adaptive Temporal Sampling
─────────────────────────────────
输入: video, duration
输出: sampled_frames
local_num_frames = 4 # 每个 clip 的帧数
num_segments = duration // local_num_frames
num_frames = local_num_frames * num_segments
num_frames = clip(num_frames, min=128, max=512)
frame_indices = uniform_sample(0, total_frames, num_frames)
return video[frame_indices](b) Spatiotemporal Token Merging (时空 Token 合并)
在 Vision Encoder 输出后, 使用 ToMe (Token Merging) 对每个 clip 的 token 进行语义级压缩:
其中 个时序片段, 每个片段由 vision encoder 生成 个初始 token, 经 token connector 压缩为 个 token ().
ToMe 的核心是基于语义相似度的 bipartite soft matching:
- 将 token 分为偶数/奇数两组
- 计算两组间的余弦相似度矩阵
- 选择相似度最高的 token 对进行加权平均合并
- 迭代减半直到达到目标 token 数
伪代码: ToMe Token Merging
─────────────────────────
输入: tokens [B, M, D], target_count N
输出: merged_tokens [B, N, D]
while tokens.shape[1] > N:
r = tokens.shape[1] // 2 # 每次减半
# 分为两组
even_tokens = tokens[:, 0::2]
odd_tokens = tokens[:, 1::2]
# 计算余弦相似度
similarity = cosine_sim(even_tokens, odd_tokens)
# 找到最大匹配
matched_pairs = argmax(similarity, dim=-1)
# 加权平均合并
merged = weighted_average(even_tokens, odd_tokens[matched_pairs])
tokens = concat(unmerged, merged)
return tokens # [B, N, D]- 每帧 448x448 图像经 InternViT 产生 1024 个 token
- 8 帧一个 clip, 经 pixel shuffle (2x downsample) 后为 256 token/帧
- ToMe 压缩到约 16 token/帧 (压缩比约 16x)
(c) Multimodal Token Dropout (多模态 Token 丢弃, TDrop)
在 LLM 处理过程中进一步减少视觉 token:
两阶段策略:
- 浅层: 均匀随机丢弃, 保持结构完整性, 降低计算量
- 深层: 基于 attention 权重的引导式 token 选择, 保留与任务相关的关键信息
伪代码: Token Dropout (TDrop)
────────────────────────────
输入: visual_tokens [B, NT, D], layer_id l
输出: pruned_tokens
if l < shallow_threshold:
# 均匀随机丢弃
mask = Bernoulli(p) for each token
pruned_tokens = tokens[mask]
else:
# Attention-guided 选择
attn_scores = compute_attention(query_tokens, visual_tokens)
top_k_indices = topk(attn_scores, k=keep_count)
pruned_tokens = tokens[top_k_indices]
return pruned_tokens3.2 TPO: 任务偏好优化
TPO 通过 Multi-task Preference Learning (MPL) 增强 MLLM 的精确视觉感知能力.
架构设计
整体框架包含:
- 核心 MLLM : Vision Encoder + Cross-modal Connector + LLM
- Visual Perception Module : 个 task-specific head , 通过可学习的 task embedding 与 MLLM 交互
Temporal Head (时序定位头):
- 基于 CG-DETR 架构
- 输入: 视频特征 + 文本 query + task-specific temporal embedding
- 输出: 时间边界 + 相关性分数
- 用于 moment retrieval、temporal grounding
Mask Head (分割头):
- 基于 SAM2 预训练权重
- 包含: image encoder + mask decoder + adaptive projection layer
- 输入: MLLM embedding + 图像特征
- 输出: 像素级分割掩码
- 用于 referring segmentation
联合训练损失
其中:
- : 标准语言建模损失
- : 多任务对话损失, 为输入 query, 为任务标签
- : 专项视觉任务损失, 为 task-specific 标注
3.3 渐进式三阶段训练
| 阶段 | 目标 | 数据 | 帧数 | 训练参数 |
|---|---|---|---|---|
| Stage 1: Foundation Learning | 任务识别 + 视觉-语言对齐 | 0.5M 图文 + 0.5M 短视频文本 | 4帧 | Compressor + MLP (冻结 ViT 和 LLM) |
| Stage 2: Fine-grained Perception | 精细视觉感知 | 3.5M 图像 + 2.5M 短视频 + 任务数据 | 8帧 | Task tokens + Region head + Temporal head + Mask adapter + LLM (LoRA) |
| Stage 3: Integrated Long-form | 多任务联合 + 长视频 | 1.1M 图像 + 1.7M 短视频 + 0.7M 长视频 = 3.5M | 64-512帧 | 全模型 (ViT + Connector + Task tokens + Heads + LLM with LoRA) |
3.4 模型配置
| 组件 | 具体实现 |
|---|---|
| Vision Encoder | InternViT |
| LLM | InternLM2.5-7B |
| Connector | MLP-based Token Merging |
| Temporal Head | CG-DETR |
| Mask Head | SAM2 |
| 视频特征提取 | InternVideo2 |
| 位置编码 | 两层 MLP (时间 + 空间) |
| Token/帧 | ~16 tokens |
| 最大帧数 | 512 |
| 每 clip 帧数 | 8 |
3.5 分布式训练系统
- 基于 XTuner 的多模态序列并行系统
- 结合 DeepSpeed-Ulysses 的 All-to-All (A2A) 通信 + Ring-Attention 的 P2P 通信
- 采用 2D-Attention 策略: A2A 用于节点间, P2P 用于节点内
- 动态数据打包 (Dynamic Packing): 按序列长度动态拼接, 最大化 GPU 利用率
4. Experimental Setup (实验设置)
评测基准
短视频理解:
- MVBench (平均时长 16s)
- PerceptionTest (23s)
长视频理解:
- EgoSchema (180s)
- LongVideoBench (473s)
- MLVU (651s)
- VideoMME (1010s)
- LVBench (4101s)
专项视觉任务:
- Charades-STA, Highlight Detection (时序定位)
- Ref-YouTube-VOS, MeViS (视频分割)
- LaSOT, GOT-10k (目标跟踪)
长视频记忆能力:
- Single-hop Needle-In-A-Haystack (NIAH), 最多 5000 帧, 16 张 A100 (80G)
对比方法
- 商业模型: GPT4-V, GPT4-o, Gemini-1.5-Pro
- 开源 MLLM: InternVL2, LLaVA-OneVision, VideoLLaMA2, QwenVL2, InternVL2.5 等
- 开源长视频 MLLM: LLaMA-VID, LongVA, LongLaVA, LongVU, VideoChat-Flash 等
- 专项视觉模型: UniVTG, ReferFormer, SiamFC, ATOM, SiamRPN++ 等
训练数据规模
| 阶段 | Segmentation | Temporal Grounding | Spatial Grounding | Visual Concept / 其他 |
|---|---|---|---|---|
| Stage 1 | 50K | 50K | 50K | 1M alignment |
| Stage 2 | 114.6K | 116.5K | 540.0K | 6M visual concept |
| Stage 3 | 116.5K | 7.5K + 40K | 400K | 3.5M conversation |
长视频数据: LongVid 数据集 (114,228 长视频, 3.4M QA 对, 5种任务类型)
5. Experimental Results (实验结果)
5.1 视频理解性能 (Table 2)
InternVideo2.5 在 7B 量级开源模型中几乎全面领先:
| 模型 | Size | Tokens | MVBench | PerceptionTest | EgoSchema | LongVideoBench | MLVU | VideoMME | LVBench |
|---|---|---|---|---|---|---|---|---|---|
| InternVL2.5 | 8B | 256 | 72.0 | 68.2 | 51.5 | 60.0 | 68.9 | 64.2 | 38.4 |
| InternVideo2.5 | 7B | 16 | 75.7 (+3.7) | 74.9 (+6.7) | 63.9 (+12.4) | 60.6 (+0.6) | 72.8 (+3.9) | 65.1 (+0.9) | 46.4 (+8.0) |
| GPT4-o | - | - | 64.6 | - | 72.2 | 66.7 | 64.6 | 71.9 | 30.8 |
| Gemini-1.5-Pro | - | - | 60.5 | - | 71.2 | 64.0 | - | 75.0 | 33.1 |
关键发现:
- 相比基座 InternVL2.5, MVBench +3.7, PerceptionTest +6.7, EgoSchema +12.4, LVBench +8.0
- 在短视频时空理解上超越 GPT4-o 和 Gemini-1.5-Pro
- 长视频基准仍落后于商业模型, 说明视觉-语言融合和长上下文建模仍有提升空间
- 仅用 16 tokens/帧 (对比 InternVL2.5 的 256 tokens/帧), 大幅降低计算量
5.2 NIAH 长视频记忆测试 (Figure 3)
Figure 3 解读: Single-hop Needle-in-a-Haystack 测试结果. InternVL2.5 (上) 在 500 帧内就难以保持 95% 召回率, 超过 1000 帧 OOM. InternVL2.5-HiCo (中) 在 3000 帧内保持高召回 (0.94-0.98), 可处理 5000+ 帧. 完整的 InternVideo2.5 (下) 在 3000 帧内接近完美 (0.92-0.99), 但超过 3000 帧后性能下降, 可能因训练数据以短视频为主.
5.3 专项视觉任务 (Table 3)
InternVideo2.5 在多个传统视觉任务上达到专家模型级别:
| 任务 | 指标 | InternVideo2.5 | 最佳专家模型 |
|---|---|---|---|
| Charades-STA 时序定位 | R@0.5 / mIoU | 43.3 / 41.7 | VideoChat-TPO: 40.2 / 38.1 |
| Highlight Detection | mAP / HIT@1 | 34.7 / 60.3 | VideoChat-TPO: 38.8 / 66.2 |
| Ref-YouTube-VOS 视频分割 | J&F | 34.2 | VideoLISA: 63.7 |
| MeViS 运动分割 | J&F | 32.0 | VideoLISA: 44.4 |
| LaSOT 跟踪 | Success / P_norm | 82.1 / 72.4 | SiamFC+++: 59.5 / 69.5 |
| GOT-10k 跟踪 | Overlap / SR_0.5 | 79.8 / 83.0 | SiamRPN++: 51.8 / 61.8 |
关键发现: 在目标跟踪 (LaSOT, GOT-10k) 上大幅超越传统专家模型, 体现了 MLLM + TPO 的强大潜力.
5.4 Ablation Studies
Token 数量对性能的影响 (Table 4)
| Tokens/帧 | MVBench | PerceptionTest | EgoSchema | LongVideoBench | MLVU | VideoMME |
|---|---|---|---|---|---|---|
| 64 | 74.4 | 71.9 | 65.7 | 62.7 | 72.6 | 66.4 |
| 16 | 74.0 | 71.4 | 62.9 | 59.6 | 71.5 | 64.9 |
- 短视频基准降幅较小 (~0.5 points)
- 长视频基准降幅更明显 (1-3 points)
- 说明长上下文建模中 token 信息密度仍有优化空间
HiCo 与 TPO 的兼容性和互补性 (Table 5)
| HiCo | TPO | MVBench | PerceptionTest | EgoSchema | LongVideoBench | MLVU | VideoMME |
|---|---|---|---|---|---|---|---|
| - | - | 72.0 | 68.2 | 51.5 | 60.0 | 68.9 | 64.2 |
| Yes | - | 74.0 | 71.4 | 62.9 | 59.6 | 71.5 | 64.9 |
| Yes | Yes | 75.7 | 74.9 | 63.9 | 60.6 | 72.8 | 65.1 |
- HiCo 单独使用即可带来显著提升 (MVBench +2.0, EgoSchema +11.4)
- TPO 在 HiCo 基础上进一步提升 (MVBench +1.7, PerceptionTest +3.5)
- 两者正交互补, 联合训练简化了整体流程
5.5 定性分析
Figure 4 解读: InternVideo2.5 能够以精确的时间戳描述视频中女性的瑜伽动作序列 (如 “00:00:02-00:00:04 过渡到下犬式”), 而对比模型只能给出模糊的整体描述, 缺乏时间锚点.
Figure 5 解读: 目标跟踪与推理示例. 用户指定 “突然出现的行人”, 模型不仅能追踪目标, 还能描述行为 (“一个人在跑, 跳过一辆车, 落在另一辆车引擎盖上”) 并返回带标注的帧序列.
Figure 6a 解读: 长视频监控场景. 模型能在长时间监控视频中精确定位特定人物出现时间 (“约 1409.5 秒”), 并进行 moment retrieval, 展示了长视频理解和时序定位能力.
Figure 6b 解读: 监控视频异常检测. 面对 “是否存在犯罪行为” 的问题, 对比模型 (VideoChat2) 给出错误的否定回答, 而 InternVideo2.5 正确识别出可疑行为 (有人走进房屋, 可能涉及入室盗窃), 并返回相关帧序列, 体现了长视频细粒度事件理解能力.
代码-论文映射
| 论文组件 | 代码位置 | 说明 |
|---|---|---|
| ToMe Token Merging (Eq. 1) | VideoChat-Flash/llava-train_videochat/llava/model/multimodal_projector/tome16_mlp_hd64.py | bipartite_soft_matching() 实现二部图匹配, merge_wavg() 实现加权平均合并, merge_tokens() 迭代减半 |
| Token Dropout TDrop (Eq. 2) | VideoChat-Flash/xtuner-eval_niah/longva/model/multimodal_resampler/masked_drop.py | MaskedDrop 类, random_masking() 实现 Bernoulli 采样 |
| InternVL Chat Model (整体架构) | VideoChat-Flash/xtuner-train_internvideo2_5/xtuner/_lite/internvl/v1_5/modeling_internvl_chat.py | InternVLChatModel 类, extract_feature() + pixel_shuffle() 实现视觉特征提取 |
| 训练配置 (Stage 3) | VideoChat-Flash/xtuner-train_internvideo2_5/unify_internvl2_train_r16.py | LazyInternVL2Dataset 数据集, AdamW 优化器, lr=4e-5, max_length=131072 |
| 训练脚本 | VideoChat-Flash/xtuner-train_internvideo2_5/ft_internvideo_2_5_datapacking.sh | 带 dynamic packing 的训练启动脚本 |
| 自适应帧采样 | HuggingFace 推理代码 get_num_frames_by_duration() | local_num_frames=4, clip(128, 512) |
| NIAH 评测 | VideoChat-Flash/xtuner-eval_niah/ | Needle-in-a-Haystack 评测脚本 |
| 视频问答评测 | VideoChat-Flash/lmms-eval_videochat/ | 基于 lmms-eval 的评测框架 |
注意: TPO 的 Temporal Head (CG-DETR) 和 Mask Head (SAM2) 的具体集成代码暂未在开源仓库中找到, 训练代码主要覆盖了 HiCo + 标准 SFT 流程.