MARC: Memory-Augmented RL Token Compression for Efficient Video Understanding
Authors: Peiran Wu, Zhuorui Yu, Yunze Liu, Chi-Hao Wu, Enmin Zhou, Junxiao Shen Affiliations: University of Bristol, Memories.ai Research Venue: ICLR 2026 Code: 论文提及有 Project Web / Code / Model 链接,但截至 2026-03 未找到公开 GitHub 仓库
1. Motivation (研究动机)
1.1 问题背景
视觉语言模型 (VLM) 在视频理解任务中面临严重的计算瓶颈:
- Token 爆炸:单张图片可能产生数千个 visual token;扩展到高帧率、长时视频后,token 数量急剧膨胀
- 现有压缩方法的不足:training-free 的 token merging/pruning 方法(如 TokenPacker、MovieChat、VidCom)虽降低了计算开销,但由于缺乏训练适配,在激进压缩下性能显著下降
- 核心矛盾:如何在 95%+ token 压缩率下保持接近无压缩的推理能力?
1.2 核心贡献
- MARC 框架:首个将结构化视觉检索(retrieve)与 RL 蒸馏压缩(compress)深度结合的视频 token 压缩方案
- C-GRPO (Compression Group Relative Policy Optimization):首个专为视频 token 压缩设计的 post-training RL 策略,将 64 帧 Teacher 的推理能力蒸馏到 1 帧 Student
- 极致效率:在 6 个视频基准上实现 95% token 压缩 (2589.93 → 122.69)、72% GPU 显存降低 (41.63GB → 11.48GB)、23.9% 生成延迟降低,mean accuracy 仅从 42.21 降至 42.20
2. Idea (核心思想)
2.1 整体架构:Retrieve-then-Compress
Figure 1 (Left) 解读:Visual Memory Compression 流程。原始视频先经 Visual Memory Retriever 进行事件分割和检索,筛选出与 query 最相关的视频片段;然后通过 Visual Encoder 编码为 token 矩阵,再经基于余弦相似度的帧合并压缩,最终生成压缩后的 Visual Token Matrix。整个流程是一个两阶段的 retrieve-then-compress 策略。
Figure 1 (Right) 解读:C-GRPO 蒸馏框架。Policy Model 接收压缩后的视觉 token,生成 G 组输出 ;Ref Model(即无压缩 Teacher)提供参考奖励;Reward Function 结合正确性奖励 和压缩奖励 计算总奖励 ;通过 Group Compute 得到归一化 advantage ,最终优化 clipped PPO 目标函数。
2.2 Visual Memory Retriever (VMR)
VMR 受认知科学中情景记忆(episodic memory)的启发,分两步完成:
Stage 1: Event-Based Video Segmentation
- 使用 TransNet v2 深度事件检测网络,在场景切换、话题转移、新动作开始等语义边界处切分视频
- 生成语义连贯的短片段(visual memory fragments),而非固定长度窗口
- 优势:每个片段是完整事件,减少检索搜索空间
Stage 2: Memory Retrieval
- 使用 Perception Encoder (Bolya et al., 2025) 将 query 和视觉片段映射到共享高维潜在空间
- 基于对比学习框架训练 embedding,确保语义相似的 query-fragment 对在空间中靠近
- 通过预索引 embeddings 上的最近邻搜索,输出 top-k 最相关片段(实验中 k=3)
2.3 Memory-Aware Temporal Compression Layer
对 VMR 检索到的 top-k 片段进行时序压缩:
Step 1: 帧编码
从 k 个片段中以 1fps 均匀采样得到 N 帧,经 ViT 编码为 patch-level hidden states:
其中 , 为每帧 patch 数。
Step 2: 短期记忆窗口分割
沿时间轴将 划分为长度为 的短期记忆窗口(对应同一事件内的连续帧):
Step 3: 基于余弦相似度的帧合并
在每个窗口 内,迭代合并最相似的相邻帧对:
合并方式为取均值:
每个窗口的压缩目标帧数为:
其中 为压缩率。
Step 4: 跨片段全局合并(可选)
拼接所有压缩窗口 ;若 ,则进行轻量级跨片段合并(同样使用均值合并),确保局部事件结构优先保留。
2.4 C-GRPO: Compression Group Relative Policy Optimization
C-GRPO 将压缩问题建模为蒸馏问题:64 帧 Teacher 提供参考行为,1 帧 Student 学习在极端压缩下匹配 Teacher 的推理质量。
Retention Ratio(保留率):
其中 为压缩输入的奖励, 为 64 帧完整输入的平均奖励。
Compression Reward(压缩奖励):
- 为最低可接受保留率阈值(实验取 )
- 为缩放因子
- 直觉: 太低则激励不足, 太高则过于保守
Gated Total Reward(门控总奖励):
仅在回答正确时才给予压缩奖励,防止 reward hacking。
Normalized Advantage:
C-GRPO 目标函数:
2.5 算法伪代码
# MARC training and inference
for video in dataset:
fragments = TransNetV2.segment(video)
embeddings = perception_encoder.encode(fragments)
vmr_index.add(video.id, embeddings)
policy = init_policy("Qwen2.5-VL-3B")
reference_policy = freeze_copy(policy)
teacher = init_teacher("Qwen2.5-VL-3B-64f")
for step in range(num_training_steps):
video, query, answer = sample_batch(video_r1_subset)
top_k_clips = vmr_retrieve(vmr_index, query, video, k=3)
frames = uniform_sample(top_k_clips, fps=1)
patch_tokens = vit_encode(frames)
compressed_tokens = memory_aware_compress(patch_tokens, ratio=rho)
teacher_reward = mean(teacher.reward(video_64frames=video, query=query))
outputs = []
total_rewards = []
for _ in range(G):
output = policy.generate(compressed_tokens, query)
reward = answer_reward(output, answer)
retain_ratio = reward / max(teacher_reward, 1e-6)
compression_bonus = alpha * max(0.0, retain_ratio - tau)
total_reward = reward + is_correct(output, answer) * compression_bonus
outputs.append(output)
total_rewards.append(total_reward)
advantages = normalize(total_rewards)
loss = clipped_ppo_loss(policy, reference_policy, outputs, advantages, beta=0.04)
optimize(loss, params=policy)
top_k_clips = vmr_retrieve(vmr_index, query, video, k=3)
frames = uniform_sample(top_k_clips, fps=1)
compressed_tokens = memory_aware_compress(vit_encode(frames), ratio=rho)
answer = policy.generate(compressed_tokens, query)3. Method (方法)
3.1 训练细节与代码映射
3.1.1 训练超参数
| 超参数 | 值 |
|---|---|
| Backbone | Qwen2.5-VL-3B |
| 训练数据 | Video-R1-260K (5K subset: 3920 video + 1080 image) |
| Optimizer | Adam, lr = , weight decay = 0.01 |
| 帧分辨率上限 | pixels |
| 最大输出长度 | 768 tokens |
| Group size | 8 |
| KL 权重 | 0.04 |
| 保留率阈值 | 0.6 |
| 分布式训练 | DeepSpeed ZeRO-3 |
| 推理设置 | top_p=0.001, temperature=0.01, Flash Attention 2 |
| 评测硬件 | NVIDIA A6000 (48GB) |
| VMR top-k | 3 |
3.1.2 Prompt Template
QUESTION_TEMPLATE = (
"{Question}\n"
"Please think about this question as if you were a human pondering deeply. "
"Engage in an internal dialogue using expressions such as "
"'let me think', 'wait', 'Hmm', 'oh, I see', 'let's break it down', etc., "
"or other natural language thought expressions. It's encouraged to include "
"self-reflection or verification in the reasoning process. "
"Provide your detailed reasoning between the <think> and </think> tags, "
"and then give your final answer between the <answer> and </answer> tags."
)3.1.3 代码映射表(基于论文方法推测的实现结构)
| 论文模块 | 推测代码模块 | 功能 |
|---|---|---|
| Event-Based Video Segmentation (Sec 3.1.1) | vmr/segmentation.py | 调用 TransNet v2 进行镜头切换检测 |
| Memory Retrieval (Sec 3.1.2) | vmr/retrieval.py | Perception Encoder 编码 + FAISS 最近邻搜索 |
| Memory-Aware Temporal Compression (Sec 3.2.1) | compression/temporal_merge.py | 窗口内余弦相似度帧合并 + 跨片段全局合并 |
| C-GRPO Training (Sec 3.2.2) | training/c_grpo.py | 基于 GRPO 的 RL 训练循环,含压缩奖励 |
| Reward Function | training/rewards.py | 正确性奖励 + 门控压缩奖励 |
| Teacher Model | models/teacher.py | 64 帧 Qwen2.5-VL-3B(冻结) |
| Student/Policy Model | models/student.py | 1 帧压缩输入的 Qwen2.5-VL-3B |
| SFT Baseline | training/sft.py | Video-R1-COT-165K 上的监督微调 |
注:截至 2026-03-12,作者尚未公开代码仓库。上表为基于论文描述的推测性映射。
3.2 方法小结
MARC 的方法核心可以概括为两点:先用 VMR 做相关片段检索,再对检索结果进行 memory-aware temporal compression,并用 C-GRPO 让压缩后的 student 尽量接近 teacher 的回答质量。
4. Experimental Setup (实验设置)
4.1 数据与评测设置
- 训练数据:Video-R1-260K 的 5K 子集(3920 video + 1080 image)
- 评测基准:VSI-Bench、VideoMMMU、MMVU(mc)、MVBench、TempCompass、VideoMME(w/o sub)
- 对照模型:Qwen2.5-VL-3B、InternVL3.5-2B、InternVL3.5-4B、Gemma-3-4B、ByteVideoLLM-3B、MovieChat-3B、VidCom²-3B
- 压缩预算:主要报告 1 frame 等效输入,也对 8 frames / 16 frames / 64 frames 做对比
- 硬件环境:NVIDIA A6000 (48GB)
4.2 评测与图表说明
Figure 2 解读:评测数据集的 QA 样本分布饼图。VideoMME 占比最大(约 34%),其次是 VSI-Bench(24%)、MVBench(20%)等。MARC 在 VideoMME(长视频为主,平均 515-2466 秒)上表现最差(保留率仅 74%),因为 top-3 检索在长视频中不可避免地丢弃了关键时间链信息。
Figure 3 解读:训练数据集 (Video-R1-260K 5K 子集) 的 QA 样本类别分布饼图。涵盖 Knowledge (20.4%)、Math (14.5%)、Chart (14.0%)、Spatial (8.2%)、OCR (6.0%)、General (5.7%) 等类别,以及来自 LLAVA-Video-178K (30.4%) 和 STAR (3.2%) 等视频数据集。
4.3 论文未详细说明
论文未详细说明:不同数据划分的精确采样策略、检索库构建的完整工程细节、以及 VMR 额外耗时在训练/推理中的逐项拆分。
5. Experimental Results (实验结果)
5.1 主实验:6 个基准上的性能对比
Figure 4 解读:各 benchmark 的 vision token 数量与 benchmark score 的对比柱状图。蓝色柱为 64 帧 baseline 的 token 数(VSI-Bench 约 3918、VideoMME 约 3734),绿色柱为 1 帧压缩后的 token 数(均约 120-130)。红色折线为 baseline score,橙色折线为 MARC score。可以看到在 token 数减少约 95% 的情况下,MARC 在 MMVU、MVBench、TempCompass 上甚至超过 baseline。
| 模型 | Frames | VSI-Bench | VideoMMMU | MMVU(mc) | MVBench | TempCompass | VideoMME(w/o sub) | mean |
|---|---|---|---|---|---|---|---|---|
| Qwen2.5-VL-3B | 64 | 32.93 | 35.33 | 48.64 | 44.77 | 38.05 | 53.55 | 42.21 |
| Qwen2.5-VL-3B | 16 | 27.63 | 30.78 | 45.28 | 43.89 | 37.95 | 44.37 | 38.32 |
| InternVL3.5-2B | 64 | 14.65 | 15.56 | 22.88 | 14.71 | 23.63 | 4.26 | 15.95 |
| InternVL3.5-4B | 64 | 28.96 | 33.33 | 47.51 | 44.71 | 58.34 | 39.15 | 42.00 |
| Gemma-3-4B | 64 | 26.83 | 26.78 | 41.76 | 36.82 | 55.04 | 46 | 38.87 |
| ByteVideoLLM-3B | 64 | 21.33 | 22.33 | 28.63 | 22.56 | 35.55 | 22.7 | 25.52 |
| MovieChat-3B | 1 | 25.14 | 25.78 | 39.35 | 37.1 | 38.79 | 26.41 | 32.10 |
| VidCom²-3B | 64 | 25.5 | 23.89 | 31.08 | 29.88 | 35.23 | 21.48 | 27.84 |
| MARC-3B | 1 | 27.55 | 33.11 | 51.99 | 45.82 | 55.34 | 39.44 | 42.20 |
关键发现:
- MARC-3B 仅用 1 帧等效 token(~122 tokens)即达到 64 帧 baseline 的同等 mean accuracy(42.20 vs 42.21)
- 相比同类压缩方法,MARC 在 mean accuracy 上分别超过 ByteVideoLLM 65%、MovieChat 31%、VidCom 52%
- 在 MMVU (+3.35)、MVBench (+1.05)、TempCompass (+17.29) 上甚至超过 64 帧 baseline
- MARC-3B 超过更大的 InternVL3.5-4B 和 Gemma-3-4B
5.2 效率对比
Figure 5 解读:GPU Peak Memory 和 Latency 的对比图。左侧柱状图显示 Qwen-3B-64f baseline 的 GPU 峰值显存为 41.63 GB(batch=15),而 MARC-3B-1f 仅需 11.48 GB,降低 72.4%。右侧折线图显示 LLM Latency 从 3.77s 降至 2.87s(23.9% 降低),Total Latency 从 3.35s 降至 2.11s(15.9% 降低)。
| 指标 | Qwen-3B-64f | MARC-3B-1f | 降幅 |
|---|---|---|---|
| GPU Peak Memory (batch=15) | 41.63 GB | 11.48 GB | 72.4% |
| LLM Generation Latency | 3.77s | 2.87s | 23.9% |
| Model Latency | 3.35s | 2.11s | 15.9% |
| End-to-end Latency/sample | - | - | 11.1% |
| Visual Tokens (mean) | 2589.93 | 122.69 | 95.3% |
延迟随 token 规模的缩放关系 (Table 6):
| Frame Config | Before Latency | Compressed Latency | 加速比 | Before Tokens | Compressed Tokens |
|---|---|---|---|---|---|
| 512 frames, 256x28x28 | 18.36s | 7.65s | 58.3% | 64,512 | 1,008 |
| 256 frames, 256x28x28 | 8.26s | 4.55s | 44.9% | 32,256 | 504 |
| 128 frames, 128x28x28 | 2.80s | 2.29s | 18.2% | 7,689 | 120 |
| 64 frames, 128x28x28 | 2.51s | 2.11s | 15.9% | 3,840 | 120 |
关键洞察:token 数越多,压缩带来的加速越显著(512 帧下 58.3% vs 64 帧下 15.9%),适合长视频场景。
5.3 消融实验
VMR 与 C-GRPO 的分别贡献 (Table 2):
| 模型 | Frames | VSI-Bench | VideoMMMU | MMVU | MVBench | TempCompass | VideoMME | mean |
|---|---|---|---|---|---|---|---|---|
| Qwen2.5-VL-3B (baseline) | 64 | 32.93 | 35.33 | 48.64 | 44.77 | 38.05 | 53.55 | 42.21 |
| Qwen2.5-VL-3B (VMR) | 64 | 34.02 | 34.33 | 55.52 | 57.24 | 40.38 | 51.85 | 45.56 |
| Qwen2.5-VL-3B (SFT+VMR) | 1 | 26.71 | 31.00 | 47.83 | 43.91 | 53.76 | 37.77 | 40.16 |
| Qwen2.5-VL-3B (SFT) | 1 | 25.70 | 28.33 | 45.76 | 39.48 | 54.05 | 37.72 | 38.50 |
| MARC-3B (VMR+C-GRPO) | 1 | 27.55 | 33.11 | 51.99 | 45.82 | 55.34 | 39.44 | 42.20 |
- VMR alone(无压缩,64帧):mean 42.21 → 45.56(+3.35),说明 top-3 检索筛选掉了无关帧,反而提升性能
- SFT baseline(1帧压缩):mean 38.50;加 VMR 后 40.16(+1.66)
- MARC (C-GRPO):mean 42.20,比 SFT+VMR 高 +2.04,比纯 SFT 高 +9.6% 相对提升
阈值消融 (Table 3):
| VSI-Bench | VideoMMMU | MMVU | MVBench | TempCompass | VideoMME | mean | |
|---|---|---|---|---|---|---|---|
| 0.4 | 28.27 | 31.66 | 49.12 | 45.21 | 54.72 | 39.07 | 41.34 |
| 0.6 | 27.55 | 33.11 | 51.99 | 45.82 | 55.34 | 39.44 | 42.20 |
| 0.8 | 28.23 | 31.78 | 49.34 | 45.89 | 54.12 | 39.03 | 41.40 |
最优 :过低(0.4)激励不足,过高(0.8)约束过严导致学习信号受限。
VideoMME 上不同压缩预算 (Table 5):
| Method | MARC (1 frame) | MARC (8 frames) | Qwen (16 frames) | Qwen (64 frames) |
|---|---|---|---|---|
| VideoMME | 39.44 | 45.33 | 44.37 | 53.55 |
8 帧等效压缩的 MARC (45.33) 已超过原生 16 帧 Qwen (44.37)。
5.4 失败案例分析
Figure 2 解读:评测数据集的 QA 样本分布饼图。VideoMME 占比最大(约 34%),其次是 VSI-Bench(24%)、MVBench(20%)等。MARC 在 VideoMME(长视频为主,平均 515-2466 秒)上表现最差(保留率仅 74%),因为 top-3 检索在长视频中不可避免地丢弃了关键时间链信息。
Figure 3 解读:训练数据集 (Video-R1-260K 5K 子集) 的 QA 样本类别分布饼图。涵盖 Knowledge (20.4%)、Math (14.5%)、Chart (14.0%)、Spatial (8.2%)、OCR (6.0%)、General (5.7%) 等类别,以及来自 LLAVA-Video-178K (30.4%) 和 STAR (3.2%) 等视频数据集。
5.5 个人思考与总结
5.5.1 方法亮点
- Retrieve-then-Compress 范式的优雅性:先用 VMR 过滤无关片段(粗粒度),再用时序压缩合并冗余帧(细粒度),两阶段互补。VMR 单独使用就能提升 3.35 mean score,说明”选对帧比看更多帧更重要”
- C-GRPO 的设计巧妙:
- 门控奖励(仅正确时给予压缩 bonus)避免了模型”压缩很好但回答错误”的 reward hacking
- 保留率 将压缩质量与 teacher 性能显式对齐,而非简单 token 数量惩罚
- 实用性强:95% 压缩率 + 72% 显存降低,直接解锁边缘设备部署(自动驾驶、监控等场景)
5.5.2 局限性
- 长视频性能下降明显:VideoMME 上仅保留 74% baseline 性能(39.44 vs 53.55)。top-k=3 的固定检索预算在平均 2466 秒的长视频中损失过多时间链信息
- Teacher 依赖:C-GRPO 的压缩奖励 依赖 teacher 的 ,若 teacher 本身在某任务上表现差,学生难以超越
- 训练数据仅 5K:虽然结果不错,但更大规模训练数据是否能进一步提升?论文未探讨
- VMR 的额外延迟:TransNet v2 分割 + Perception Encoder 检索的额外开销未在 end-to-end latency 中充分量化
5.5.3 未来方向
- 自适应 token 预算:根据视频长度/复杂度动态调整压缩率和 top-k 值,而非固定 和 k=3
- Temporal Q-Former:论文在失败案例分析中提到,引入可学习的时序查询模块自适应选择关键帧,可能缓解长视频问题
- 扩展到更大模型:当前仅在 3B 模型上验证,7B/72B 模型上的效果值得探索
- 与 KV Cache 压缩结合:MARC 压缩的是输入 visual tokens,可与 KV cache 压缩方法正交结合
5.5.4 一句话总结
MARC 通过”先检索再压缩”的两阶段策略 + C-GRPO 强化学习蒸馏,首次实现 95% visual token 压缩下几乎无损的视频理解性能,是 VLM 高效部署的实用方案。