前置知识: 多模态AI

LLaVA-OneVision:单图像、多图像、视频统一模型

00:00
13 min Advanced

理解LLaVA-OneVision如何通过统一token预算和课程训练实现三场景统一

LLaVA-OneVision:单图像、多图像、视频统一模型

在LLaVA-OneVision (Li等人, 2024年8月)之前,开源VLM世界有独立的谱系:LLaVA-1.5用于单图像,Mantis和VILA等多图像模型,Video-LLaVA和Video-LLaMA等视频模型。每个在其基准上获胜而在其他场景上失败。LLaVA-OneVision论证单一课程可以训练一个模型在所有三个场景中占优,并且涌现的任务迁移效应(单图像技能导出到视频,多图像推理导出到单图像)击败专家之和。方案出奇地简单:一个跨场景保持恒定的视觉token预算,加上从单图像到OneVision(多图像)到视频的显式课程。本课程阅读预算、课程和涌现行为。

类型: 构建 语言: Python (stdlib, token预算求解器 + 课程规划器) 前置知识: Phase 12 · 05 (LLaVA), Phase 12 · 06 (任意分辨率) 时间: ~180分钟

学习目标

  • 设计在单图像、多图像和视频输入间保持恒定的视觉token预算。
  • 安排从单图像到视频的训练课程而不发生灾难性遗忘。
  • 解释为什么课程正确时单一模型在相同参数量下击败专家。
  • 说出LLaVA-OneVision报告的三种涌现能力:多摄像头推理、set-of-mark提示、iPhone截图agent。

问题

图像、多图像和视频各自以不同方式压力测试模型。

单图像想要高分辨率token(AnyRes,约2880视觉token)以捕获OCR和精细细节。每样本预算:一张图像,2880 token。

多图像想要多张中等分辨率图像(每张约576 token),以便跨图像推理适合上下文。每样本预算:4-8张图像,每张576,2300-4600 token。

视频想要许多低分辨率帧(池化后每帧约196 token)以捕获时间动态。每样本预算:8-32帧,每帧196,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(2x因子)或8x8 = 64(3x因子)。池化在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时使用。

练习

  1. 你的产品支持80%单图像、10%多图像(2-4张)、10%视频(8-16帧)。设计token预算。你从不需要重度多图像中节省的额外预算放在哪里?

  2. 阅读LLaVA-OneVision第4.3节(涌现能力)。提出课程可能解锁但论文未报告的第四种涌现技能。

  3. 交换课程顺序——先训练多图像,然后单图像,然后视频。预测哪些基准会退化以及为什么。

  4. 论文报告在每样本仅8帧上训练的视频基准。这能泛化推理时的30秒视频吗?什么先崩溃——token预算还是时间推理?

  5. 24x24 patch到12x12的双线性池化是每维4倍缩减。用stdlib Python实现池化验证每个2x2块上的均匹配双线性输出。

关键术语

术语常见说法实际含义
OneVision场景图像、图像或视频”统一VLM处理的三种输入形状之一;预算跨场景保持恒定
Token预算”每样本多少tokenLLM每训练/推理样本看到的总视觉token,通常3000-4000
课程训练顺序”为涌现迁移选择的阶段排序(图像 → 图像 → 视频)
线性池化Token缩减”对patch网(2D)应用线性以减少token数量同时保留局部性
涌现技能”没训练有效推理时出现的无需匹配训练数据的能力,由于课程组合
AnyRes-k”k瓦片设置k个固定分辨子瓦片加一个缩略,典型k ∈ {4, 9}
任务迁移”跨场景泛化通过共享骨干在图像上学到的技能应用到视频(反之亦然)

延伸阅读

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式