- 设计一个在单图、多图和视频输入之间保持恒定的视觉 token 预算。
- 安排训练课程顺序,让技能从单图迁移到视频,同时不发生灾难性遗忘。
- 解释在参数数量相同时,课程设计得当的单一模型为什么能胜过专家模型。
- 说出 LLaVA-OneVision 报告的三项涌现能力:多摄像头推理、set-of-mark 提示、iPhone 截图 Agent。
问题
图像、多图和视频对模型施加的压力各不相同。
单图需要高分辨率 token(AnyRes,约 2880 个视觉 token)来捕捉 OCR 和细节。每样本预算:一张图,2880 个 token。
多图需要若干张中等分辨率的图像(每张约 576 个 token),这样跨图推理才能放进上下文。每样本预算:4-8 张图,每张 576 个 token,总计 2300-4600 个 token。
视频需要许多低分辨率帧(池化后每帧约 196 个 token)来捕捉时间动态。每样本预算:8-32 帧,每帧 196 个 token,总计 1600-6200 个 token。
如果训练多个独立模型,你可以各选一种预算。如果训练一个模型,就需要让预算在各场景间合理缩放,同时不撑爆上下文。
OneVision 之前,默认答案是「训练一个场景,忽略其他场景」。Video-LLaVA 用额外的训练阶段把视频能力改装到图像模型上。LLaVA-NeXT 用切块补上多图支持。它们都没能干净地处理全部三种场景。
概念
OneVision 的 token 预算
LLaVA-OneVision 选择约 3000-4000 个 token 的统一视觉 token 预算,并按场景做不同分配:
- 单图:AnyRes-9(3x3 切块 + 缩略图),每块 384 分辨率、729 个 patch,激进的双线性池化 2x2 → 每块 182 个。总计:9 * 182 + 182 = 1820 个 token。或者 AnyRes-4,每块 729 个 = 2916 + 729。
- 多图:每张图中等分辨率(384,不切块),729 个 token,不池化。6 张图的预算 → 4374 个 token。
- 视频:32 帧,384 分辨率,激进的 3x3 双线性池化 → 每帧 81 个 token。总计:32 * 81 = 2592 个 token。
这种分配让总 token 数大致恒定。LLM 永远不会看到超出上下文的 batch。编码器为每个场景产生不同几何结构,但 LLM 消耗的预算相同。
三阶段课程
LLaVA-OneVision 分三个阶段训练:
- 单图 SFT(SI 阶段)。所有数据都是单图加文本。在高分辨率 AnyRes 输入上训练。这教会感知、OCR 和细粒度理解。使用 LLaVA-NeXT 数据加上 OneVision 专属的单图数据。
- OneVision SFT(OV 阶段)。混合单图 + 多图 + 视频(均匀采样帧)。在统一 token 预算上训练。这教会模型处理异构的 batch 形状。不重置权重——从 SI 阶段继续。
- 任务迁移(TT 阶段)。继续用目标任务混合训练,通常根据产品更偏多图或视频。可选的部署微调。
关键:课程顺序很重要。先训视频或多图,会比先训单图得到更差的图像性能,即使数据相同。论文对此做了明确消融。
课程为什么有效
单图训练构建感知基础。patch token 携带细粒度视觉特征;LLM 学会把它们与文本整合。多图和视频引入结构挑战(哪张图是哪张、什么先发生),没有强感知基础就很难学。
如果你从零开始混合训练所有场景,模型会欠拟合感知(每个 batch 的单图数据有限),过拟合结构(大量多图/视频数据)。结果是:一个能遵循跨图推理模式但视觉上很浅的模型。
课程顺序让你从 SI 阶段获得感知强度,再从 OV 阶段获得组合/时间推理,两者都不丢。
跨场景涌现技能
LLaVA-OneVision 论文报告了三项涌现能力:
- 多摄像头推理。训练时多图和视频是分开的;推理时要求模型推理一个多摄像头驾驶场景。模型能正确整合各视角,尽管训练中从未见过这种确切格式。
- Set-of-mark 提示。用户用编号标记图像中的物体;模型推理「3 号标记相对于 7 号标记在做什么」。模型既没在标记上训练过,也没在标注上训练过;它从空间定位 + 多图指代的组合中学到了。
- iPhone 截图 Agent。用户提供 iPhone 屏幕截图,要求规划下一次点击。模型在 UI 截图、用户工作流视频和多图前后对上训练过。它泛化到了 Agent 用例。
这些都不是显式训练的任务;它们从课程的可组合结构中涌现。
视觉 token 池化
token 预算需要池化。OneVision 在 2D patch 网格上做双线性插值:24x24 = 576 个 patch 变成 12x12 = 144(2 倍)或 8x8 = 64(3 倍)。池化在 patch 网格空间而不是 token 空间进行,以保留局部性。
每个场景选择多少池化因子本身就是超参数。池化越少 = token 越多 = 表示越丰富。池化越多 = token 越少 = 能放入更多帧/图像。
LLaVA-OneVision-1.5 版本
2025 年的后续工作(LLaVA-OneVision-1.5,arXiv 2509.23661)在训练数据、模型权重和代码上都「完全开放」。它在部分基准上追平了专有模型的差距,让这套配方民主化。同样的课程,更多数据,更好的基础 LLM。架构没有变化。
与 Qwen2.5-VL 的对比
Qwen2.5-VL(第 12.09 课)做出了不同选择。它使用 M-RoPE 和动态 FPS,而不是固定池化。预算随输入缩放——1 分钟视频比 5 秒视频使用更多 token。LLaVA-OneVision 固定预算并缩放池化。两者都可行;它们用可配置性换取可预测性。
使用它
code/main.py 是一个面向 OneVision 风格 VLM 的课程与预算规划器。给定每样本 token 预算和目标场景组合(比如 40% 单图、30% 多图、30% 视频),它会:
- 为每个场景分配分辨率、池化因子和帧数。
- 检查每个场景是否落在共享预算之内。
- 报告预期 token 数、LLM FLOPs,以及哪些场景 token 不足。
- 打印逐阶段的训练调度。
用它来规划 OneVision 微调,或对 VLM 部署的每请求成本做合理性检查。
交付它
本课产出 outputs/skill-onevision-budget-planner.md。给定目标任务分布和每样本预算,它输出 AnyRes 因子、逐帧池化、视频帧数和课程阶段权重。每当你训练或微调统一场景 VLM 时都可以用它。
练习
- 你的产品支持 80% 单图、10% 多图(2-4 张)、10% 视频(8-16 帧)。设计 token 预算。因为不做重度多图而省下的预算,你会放在哪里?
- 阅读 LLaVA-OneVision 第 4.3 节(涌现能力)。提出第四种课程很可能解锁、但论文未报告的涌现技能。
- 交换课程顺序——先训多图,再单图,再视频。预测哪些基准会退化,为什么。
- 论文报告视频基准只在每样本 8 帧上训练。这能泛化到推理时的 30 秒视频吗?先坏掉的是什么——token 预算还是时间推理?
- 把 24x24 的 patch 双线性池化到 12x12,相当于 4 倍缩减。用 stdlib Python 实现该池化,并验证每个 2x2 块的均值与双线性输出一致。
关键术语
| 术语 | 人们怎么说 | 实际含义 |
|---|---|---|
| OneVision 场景 | 「单图、多图或视频」 | 统一 VLM 处理的三种输入形态之一;预算在各场景间保持恒定 |
| Token 预算 | 「每样本多少 token」 | LLM 在每次训练/推理样本中看到的视觉 token 总数,通常 3000-4000 |
| 课程(Curriculum) | 「训练顺序」 | 为涌现迁移而选择的阶段顺序(单图 → 多图 → 视频) |
| 双线性池化 | 「token 收缩」 | 对 patch 网格(2D)做双线性插值,在保留局部性的同时减少 token 数 |
| 涌现技能 | 「没训过,但会做」 | 由于课程组合而在推理时出现、但没有对应训练数据的能力 |
| AnyRes-k | 「k 块配置」 | k 个固定分辨率的子块加一张缩略图,通常 k \in \lbrace 4, 9 \rbrace |
| 任务迁移 | 「跨场景泛化」 | 通过共享主干,在单图上学到的技能适用于视频(反之亦然) |
延伸阅读
- Li et al. — LLaVA-OneVision (arXiv:2408.03326)
- LLaVA-OneVision-1.5: Fully Open Framework (arXiv:2509.23661)
- Lin et al. — Video-LLaVA (arXiv:2311.10122)
- Lin et al. — VILA (arXiv:2312.07533)
- Wang et al. — Qwen2-VL (arXiv:2409.12191)