note
- VideoJev:Qwen3.5 + Scoring Head + 两阶段多任务 SFT + 视频 KV Cache 复用
- VideoJev 把传统视频大模型的「生成式问答」,改成了「直接对候选答案或视频时间位置打分」,并通过视频缓存和多 Query 联合推理降低时延。它比一般的 Yes/No Decision 模型更值得关注的一点是:把视频时间定位(Temporal Grounding)和视频多选问答(Video QA)统一成同一种候选评分机制。
- 三个贡献:
- 任务统一:用共享 Scoring Head 同时处理时间定位和视频多选问答,而不只是普通分类。
- 视频计算复用:通过 Cached / Joint Inference 解决同一视频被反复提问的计算浪费。
- 针对视频时序定位的训练设计:BCE + SoftIoU,兼顾逐时间位置判断与完整事件区间。
- 研究动机: 传统 Video-LLM 依赖自回归生成答案,存在推理时延高、重复处理视频等问题。
- 核心方法:
- 统一决策架构: 基于 Qwen3.5 增加 PointerHead(两个 Linear + QK 点积),将视频时间定位和多选问答统一为 Query-Candidate 匹配打分。
- 两阶段训练: 先冻结 Backbone 训练 Head,再联合微调语言 Backbone;时间定位采用 BCE + SoftIoU,多选问答采用 CE。
- 高效推理: 支持视频 KV Cache 复用及多 Query 联合推理,避免重复编码与自回归生成。
- 实验结果: 相同训练数据下,相比 Qwen3.5 AR SFT,视频问答准确率由 72.8% 提升至 74.7%,时间定位 mIoU 由 64.1 提升至 65.4。
文章目录
- note
- 一、研究动机
- 二、论文核心
- 1. 统一架构:共享打分头
- 2. 时序定位:从"选区间"到"拼片段"
- 3. 消除位置偏见
- 4. 可复用的视觉计算(本文效率核心)
- 5. 训练方案
- 三、实验结果
- 时序定位(3 个 benchmark)
- 多选视频问答(4 个 benchmark)
- 与自回归微调的受控对比(相同数据 + 相同设置)
- 四、分析
一、研究动机
VideoJev: System One Model for Video Understanding and Interaction
⚡️首个视频理解Jev模型,大幅度提高精度的同时提速3-100倍
🔗https://huggingface.co/papers/2610.18615
🌟https://github.com/MCG-NJU/VideoJEV
概括:VideoJev 把"看视频做决策"这件事,从"逐字生成答案"改成了"直接给选项打分",让视觉智能体既能理解语义,又能毫秒级响应。
视觉智能体的核心痛点不是"看不懂",而是"反应慢"。
现有方案存在一条难以弥合的鸿沟:
| 路线 | 优势 | 致命短板 |
|---|---|---|
| 判别式视觉模型 | 预测高效 | 依赖任务特定的模型设计、标签空间固定 |
| 视频多模态大模型(MLLM) | 语义理解广、语言接口灵活 | 决策必须靠逐 token 自回归生成——生成时间戳或答案文本,哪怕最终输出只是一个紧凑的结构化选择 |
而智能体交互的真实场景是:同一个视频,连续追问。一个做饭助手要先确认"盐加了没",再决定"下一步加什么"。每一次追问都重新编码视频、重新生成一遍,计算浪费极其严重。
这正是 System One 范式的用武之地——Jev 已经证明,可以输出"类型化的概率判断"供软件直接使用,无需逐 token 生成。但 Jev 面向的是图像,视频还多了一层要求:时间结构,以及跨查询共享昂贵的视觉上下文。
核心洞察:把视频理解统一成"结构化判断"(structured judgment),就能在不牺牲语义灵活性的前提下,获得高效、可复用的决策接口。
二、论文核心
VideoJev 围绕两条原则构建:直接候选打分+可复用的视觉计算。
1. 统一架构:共享打分头
关键改造(对预训练 MLLM 动刀):
- 删掉最后的 MLP 层和语言模型输出头
- 新增两个特殊 token:
<|option_end|>(候选读出)和<|decide|>(查询级决策读出),初始化自<|im_end|> - 两个线性投影把隐状态映射到 512 维并归一化,用余弦相似度算 logit:
s i = 10 u ⊤ v i + b s_i = 10 \, u^\top v_i + bsi=10u⊤vi+b
固定缩放系数 10 + 可学习偏置 b,控制输出 logit 的量级。
一个头,两种任务,靠候选与输出规则区分:
| 任务 | 候选 | 监督方式 | 输出 |
|---|---|---|---|
| 时序定位(Temporal Grounding) | 时间戳文本区间 | 多标签二分类 BCE + 软 IoU 损失 | 解码出连续事件片段 |
| 多选视频问答(Video QA) | 答案文本选项 | 交叉熵(softmax) | 最高概率选项 |
对应头的代码:
classPointerHead(nn.Module):"""One query/key similarity per native two-frame temporal group."""def__init__(self,hidden,dimension=256,head_norm='none',*,similarity='dot_product',logit_scale=10.0):super().__init__()ifhead_normnotin('none','layernorm'):raiseValueError('Unknown pointer head normalization')ifsimilaritynotin('dot_product','cosine'):raiseValueError('Unknown pointer head similarity')ifnotmath.isfinite(logit_scale)orlogit_scale<=0:raiseValueError('Pointer head logit scale must be finite and positive')self.similarity=similarity self.head_norm=head_norm self.q=nn.Linear(hidden,dimension)self.k=nn.Linear(hidden,dimension)self.bias=nn.Parameter(torch.zeros(()))self.dimension=dimension self.scale=dimension**-.5ifsimilarity=='dot_product'elsefloat(logit_scale)nn.init.normal_(self.q.weight,std=.005)nn.init.normal_(self.k.weight,std=.005)nn.init.zeros_(self.q.bias)nn.init.zeros_(self.k.bias)# Keep the historical initialization/RNG order and state keys unchanged# when disabled. Each branch has its own learnable affine parameters.ifhead_norm=='layernorm':self.q_norm=nn.LayerNorm(hidden,eps=1e-5,elementwise_affine=True)self.k_norm=nn.LayerNorm(hidden,eps=1e-5,elementwise_affine=True)defforward(self,pairs,query):# FP32 scoring, including under AMP.ifself.head_norm=='layernorm':keys=self.k(self.k_norm(pairs.float()))q=self.q(self.q_norm(query.float()))else:keys=self.k(pairs.float())q=self.q(query.float())ifself.similarity=='cosine':# Normalize the projected vectors, not the incoming LLM features.# The scale is fixed; the existing scalar bias remains trainable.keys=nn.functional.normalize(keys,dim=-1,eps=1e-6)q=nn.functional.normalize(q,dim=-1,eps=1e-6)returntorch.einsum('bgd,bd->bg',keys,q)*self.scale+self.bias2. 时序定位:从"选区间"到"拼片段"
- 骨干网络对时间做 2 倍压缩,每两帧一组,得到 K 个候选区间
- BCE 损失监督每个区间是否落在标注事件内(多标签,允许多个区间同属一个事件)
- 软 IoU 损失(按区间时长加权)显式奖励"覆盖完整事件",弥补 BCE 只看局部不看病程整体的缺陷
- 解码:用固定阈值 τ=0.25 调整 logit,Kadane 算法 O(K) 时间找出和最大的连续非空区间
3. 消除位置偏见
训练时对不依赖选项位置的题目做可复现、与答案无关的排列打乱并更新正确项索引;涉及选项位置或前序轮次的题目保留原顺序。推理时按给定顺序,取最高p i p_ipi。
4. 可复用的视觉计算(本文效率核心)
因果语言模型天然让视频前缀独立于后续查询,因此:
- Cached 推理:视频编码 + prefill 一次,后续查询从缓存分支,只需跑查询/候选/读出 token
- Joint 推理:多个查询及其候选列表共用一个视频前缀,各带独立
<|decide|>,一次前向拿全部分数 - 训练同款布局:同视频的多查询拼接,共享视频计算
5. 训练方案
- 骨干:Qwen3.5-4B(稠密)与 Qwen3.6-35B-A3B(MoE)
- 数据:
- 时序定位:TimeLens-100K + TimeLens2-93K,区间转候选级标签
- 多选 QA:约24 万题 / 1.9 万视频的自建语料,涵盖游戏、体育、烹饪、音乐舞蹈、户外、手工,视频 4 分钟至近 2 小时
- 两阶段训练:先冻结骨干、训新打分头(让打分头在稳定表征空间里起步,类比 MLLM 的 projector 对齐),再微调语言骨干
Video-LLM 时间定位训练流程
| 阶段 | 训练参数 | Loss |
|---|---|---|
| Stage 1:Head Warmup | 只训练新增 Scoring Head,冻结 Backbone | Grounding:BCE;QA:CE |
| Stage 2:Joint Training | 训练语言 Backbone、标记 Embedding 和 Head,视觉编码器保持冻结 | Grounding:BCE + 2×SoftIoU;QA:CE |
训练数据包括:
- TimeLens-100K
- TimeLens2-93K
- 团队整理的约19K 视频、240K 道多选问题
这里最有意义的是SoftIoU Loss:除了判断每个时间位置是否属于事件,还直接优化预测时间段与 GT 时间段的整体重合程度。论文消融显示,加入 SoftIoU 后:
- Grounding 平均 mIoU:60.7 → 65.3
- 提升 4.6 个百分点
三、实验结果
时序定位(3 个 benchmark)
相对各自骨干的Instruct 模式,VideoJev-4B 与 VideoJev-35B-A3B 的平均 mIoU 分别提升 6.7 / 10.8 点,实测推理加速2.8–3.1×。
多选视频问答(4 个 benchmark)
两个模型性能与其骨干的 Thinking 模式相当,同时推理加速超过 100×。(计时生成式基线同样复用了视频前缀,以保证对比公平。)
与自回归微调的受控对比(相同数据 + 相同设置)
| 模型 | 平均 grounding mIoU 优势 | 平均 QA 分数优势 |
|---|---|---|
| VideoJev-4B vs 自回归微调 | +1.3 | +1.9 |
这直接证明:性能增益来自"直接决策学习"本身,而非单纯数据红利。
四、分析
强在哪里
- 范式迁移做得干净。用"候选打分 + 输出规则"这一个杠杆撬动了两类任务,既不牺牲 MLLM 的语义先验,又彻底绕开生成开销。
- 效率与质量兼得,且可组合。Cached 适合流式追问,Joint 适合批量查询,同一套视频前缀机制在训练和推理对齐,是真正的系统工程闭环。
- 消融有说服力。与自回归微调的等数据对照,把"架构收益"从"数据收益"里剥离出来,论证链完整。
需要留意的边界
- 任务形式受限。统一接口目前只覆盖"时序定位 + 多选",开放生成(描述、长回答、工具调用)仍需另想办法,作者也把"开放行为"寄托于"结构化判断的组合"而非直接生成。
- 阈值与解码依赖超参。τ=0.25、窗口 1、Kadane 解码都是经验设定,在极长视频或稀疏事件上是否鲁棒,需更多 ablation。
- 位置打乱的副作用值得审视。多数题打乱是好事,但"依赖选项位置"的题需保留原序——这个判定本身若有误,就会成为隐患。
- 数据透明度。24 万 QA 为内部自建语料,外部难以复现与横向对比;骨干版本(Qwen3.5/3.6)也较新,需留意其官方基线是否对等。
- 速度数字的口径。100× 是与 Thinking 模式比,而非与 Instruct 或纯生成比;Cached/Joint 的加速还依赖命中率与批大小,落地时实测为准。
总体判断:这是一篇"动机清晰—设计统一—工程扎实"的工作,核心价值不在于提出新损失或新模块,而在于重新定义了视频智能体的决策接口——把昂贵的理解变成可缓存、可批处理的打分,让视频 MLLM 从"会回答"走向"能干活"。