LLaVA-OneVision:一个模型处理单图、多图与视频

Build~180 minutesPython (stdlib, token budget solver + curriculum planner)先修要求: Phase 12 · 05 (LLaVA), Phase 12 · 06 (any-resolution)
在 LLaVA-OneVision(Li 等,2024 年 8 月)之前,开放 VLM 世界有各自独立的分支:单图用 LLaVA-1.5,多图有 Mantis 和 VILA,视频有 Video-LLaVA 和 Video-LLaMA。每个模型都赢下自己的基准,却在其他场景失败。LLaVA-OneVision 主张,一套课程就能训练一个模型主导全部三种场景,而且涌现出的任务迁移效应(单图技能迁移到视频、多图推理迁移到单图)胜过专家的总和。配方看似简单:视觉 token 预算在各场景间保持不变,再加上一套明确的课程,从单图走向 OneVision(多图),再走向视频。本课解读这个预算、这套课程,以及涌现出的行为。
学习目标
  • 设计一个在单图、多图和视频输入之间保持恒定的视觉 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 分三个阶段训练:

  1. 单图 SFT(SI 阶段)。所有数据都是单图加文本。在高分辨率 AnyRes 输入上训练。这教会感知、OCR 和细粒度理解。使用 LLaVA-NeXT 数据加上 OneVision 专属的单图数据。
  2. OneVision SFT(OV 阶段)。混合单图 + 多图 + 视频(均匀采样帧)。在统一 token 预算上训练。这教会模型处理异构的 batch 形状。不重置权重——从 SI 阶段继续。
  3. 任务迁移(TT 阶段)。继续用目标任务混合训练,通常根据产品更偏多图或视频。可选的部署微调。

关键:课程顺序很重要。先训视频或多图,会比先训单图得到更差的图像性能,即使数据相同。论文对此做了明确消融。

课程为什么有效

单图训练构建感知基础。patch token 携带细粒度视觉特征;LLM 学会把它们与文本整合。多图和视频引入结构挑战(哪张图是哪张、什么先发生),没有强感知基础就很难学。

如果你从零开始混合训练所有场景,模型会欠拟合感知(每个 batch 的单图数据有限),过拟合结构(大量多图/视频数据)。结果是:一个能遵循跨图推理模式但视觉上很浅的模型。

课程顺序让你从 SI 阶段获得感知强度,再从 OV 阶段获得组合/时间推理,两者都不丢。

跨场景涌现技能

LLaVA-OneVision 论文报告了三项涌现能力:

  1. 多摄像头推理。训练时多图和视频是分开的;推理时要求模型推理一个多摄像头驾驶场景。模型能正确整合各视角,尽管训练中从未见过这种确切格式。
  2. Set-of-mark 提示。用户用编号标记图像中的物体;模型推理「3 号标记相对于 7 号标记在做什么」。模型既没在标记上训练过,也没在标注上训练过;它从空间定位 + 多图指代的组合中学到了。
  3. 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 固定预算并缩放池化。两者都可行;它们用可配置性换取可预测性。

l5-onevision-budget静态版本未包含此交互图

使用它

code/main.py 是一个面向 OneVision 风格 VLM 的课程与预算规划器。给定每样本 token 预算和目标场景组合(比如 40% 单图、30% 多图、30% 视频),它会:

  • 为每个场景分配分辨率、池化因子和帧数。
  • 检查每个场景是否落在共享预算之内。
  • 报告预期 token 数、LLM FLOPs,以及哪些场景 token 不足。
  • 打印逐阶段的训练调度。

用它来规划 OneVision 微调,或对 VLM 部署的每请求成本做合理性检查。

交付它

本课产出 outputs/skill-onevision-budget-planner.md。给定目标任务分布和每样本预算,它输出 AnyRes 因子、逐帧池化、视频帧数和课程阶段权重。每当你训练或微调统一场景 VLM 时都可以用它。

练习

  1. 你的产品支持 80% 单图、10% 多图(2-4 张)、10% 视频(8-16 帧)。设计 token 预算。因为不做重度多图而省下的预算,你会放在哪里?
  1. 阅读 LLaVA-OneVision 第 4.3 节(涌现能力)。提出第四种课程很可能解锁、但论文未报告的涌现技能。
  1. 交换课程顺序——先训多图,再单图,再视频。预测哪些基准会退化,为什么。
  1. 论文报告视频基准只在每样本 8 帧上训练。这能泛化到推理时的 30 秒视频吗?先坏掉的是什么——token 预算还是时间推理?
  1. 把 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
任务迁移「跨场景泛化」通过共享主干,在单图上学到的技能适用于视频(反之亦然)

延伸阅读

示意图共 1 张

onevision-curriculum diagram
onevision-curriculum

“Stay hungry, stay foolish.”

— Steve Jobs

esc
↑↓切换↵打开esc关闭