LLaVA 系列详解:从 Visual Instruction Tuning 到 LLaVA-1.5 与 LLaVA-NeXT

LLaVA(Large Language and Vision Assistant)是一类开源视觉语言助手模型,核心贡献是把 语言模型的指令调优(instruction tuning) 推广到 图文多模态指令调优(Visual Instruction Tuning):给定一张图片和自然语言指令,模型能够像聊天助手一样进行回答、描述,并在一定程度上完成视觉推理与基于图像的复杂问答。

从整体发展脉络看:

  • LLaVA(v0/v1):用 GPT-4(纯文本)合成大规模图文指令数据(158K),把 CLIP 视觉特征对齐到 Vicuna 的词向量空间,实现端到端多模态对话。
  • LLaVA-1.5:在“连接器极简”的前提下,换用更高分辨率视觉编码器(CLIP ViT-L/336),引入轻量 MLP 连接器,并大幅扩充公开指令数据(~1.2M),实现全面的 benchmark 提升与更强的任务泛化。
  • LLaVA-NeXT(v1.6):围绕分辨率/Token 数、数据混合与训练阶段做系统化消融,提出 Stage-1.5(高质量知识学习)等策略;同时强调 LLM 规模对多模态能力的关键作用,在 OCR、图表、推理等任务上显著增强。

1. LLaVA:为什么重要

1.1 背景:多模态从“单任务”走向“指令跟随”

在 LLaVA 之前,多模态模型常见形态大致是:

  • 图 → 文:例如 captioning,把图片变成一句/一段描述;
  • 问 → 答:例如 VQA,输入图片和问题输出一个答案;
  • 少量固定模板对话:能问几类问题,但很难像聊天助手那样自然、多轮、可控。

而语言模型(如 GPT-3 / Vicuna / LLaMA 系)在文本域已经证明:通过指令调优,可以显著提升“像助手一样完成任务”的能力。LLaVA 的关键点在于:把这一范式带到多模态里,让模型不仅能“看图说话”,还能“按指令做事”。

1.2 一句话概括能力

给定图片 + 自然语言指令,LLaVA 能:

  • 做多轮对话式问答(询问物体、关系、动作、属性、位置等)
  • 输出细致的长文本描述
  • 在需要时尝试多步推理(以图像内容为依据)

1.3 直观案例:同一张图的三种任务

设想一张 COCO 风格图片:地下停车场,一辆 SUV,三个人正在把行李装进车里,地上散落着背包和行李箱,旁边还有一辆自行车。

  • 对话(Conversation)

    • 用户:这是什么车?
    • 模型:一辆黑色 SUV。
    • 用户:车停在哪里?
    • 模型:停在地下停车场,像是公共车库。
    • 用户:人们在做什么?
    • 模型:他们在把行李装进车里,像是准备出行。
  • 详细描述(Detailed Description)

    • 用户:请详细描述这张图。
    • 模型:会按场景、人物、物体、空间关系给出长段落描述(包含人物站位、行李分布、周围车辆等细节)。
  • 复杂推理(Complex Reasoning)

    • 用户:他们可能要去做什么?为什么?
    • 模型:需要结合“多人协作装行李 + 多个行李箱/背包 + 地下停车场”推断“可能准备旅行/搬家/出行”,并给出理由链。

2. LLaVA 的方法:数据、架构、训练

LLaVA 的方法可以用一句话概括:
把图片转成可对齐的视觉 token,拼接到文本 token 前,直接让大语言模型做自回归生成;再用大规模图文指令数据做微调,让它学会多模态指令跟随。

2.1 多模态指令数据生成:为什么能用“纯文本 GPT-4”做图文数据

关键难点在于:早期(LLaVA 论文阶段)GPT-4 本身并不能直接看图。LLaVA 的做法是把图像信息“语言化”后交给 GPT-4 生成指令与回答。

给定图像 XvX_vXv,以及其元信息(caption、边界框等),构造文本化描述作为上下文,让 GPT-4 在这个文本化世界里扮演“看见图片的助手”。

2.1.1 基础扩展:把图文对扩成指令格式

从已有图文对数据(比如 COCO captions、CC3M 等)出发:

  • 图像:XvX_vXv
  • 字幕/标题:XcX_cXc

最简单的指令化形式是:

  • Human:XqX_qXq + XvX_vXv
  • Assistant:XcX_cXc

但这种方式的问题是:指令与回答缺少多样性,也难覆盖推理、细粒度定位等能力。

2.1.2 强化:用 Caption + Bounding Boxes 让 GPT-4 生成更丰富指令

LLaVA 使用两类信息把图片“文字化”:

  • Caption:多角度描述场景语义;
  • Bounding Boxes:把物体概念与空间位置编码为文本(例如“person at (x1,y1,x2,y2)”)。

然后为 GPT-4 设计少量“种子示例”(in-context learning),让它生成三类数据:

  1. 对话 Conversation:多轮问答,覆盖物体类别、数量、动作、位置、相对关系等。
  2. 详细描述 Detailed Description:一次性输出更全面、结构化、细节丰富的描述。
  3. 复杂推理 Complex Reasoning:在对话/描述基础上,引导提出更需要逻辑推理的问题与回答。

最终得到约 158K 的多模态指令样本,成为 LLaVA 的核心视觉指令调优数据来源之一。


2.2 模型架构:CLIP + 连接器 + Vicuna 的极简组合

LLaVA 的架构非常“朴素”:冻结视觉编码器,用一个投影层把视觉特征对齐到语言模型的嵌入空间,再把视觉 token 当作“前缀 token”拼到文本前,让 LLM 继续做它最擅长的自回归生成。

2.2.1 视觉编码器:从图像得到视觉特征

输入图像 XvX_vXv,通过预训练的 CLIP Vision Encoder(例如 ViT-L/14)得到视觉特征:
Zv=g(Xv) Z_v = g(X_v) Zv=g(Xv)
其中 g(⋅)g(\cdot)g() 是视觉编码器,ZvZ_vZv 是图像特征序列或特征图的展平表示(具体形态取决于实现)。

2.2.2 视觉-语言连接器:把视觉特征映射到词向量空间

用一个可训练的投影矩阵 WWW 把视觉特征映射到语言模型的词嵌入空间,得到视觉 token:
Hv=W⋅Zv H_v = W \cdot Z_v Hv=WZv
其中 HvH_vHv 的维度与语言模型的 token embedding 维度一致,这样 HvH_vHv 就能像“伪文本 token”一样被 LLM 接收。

2.2.3 拼接输入:视觉 token + 文本 token

将视觉 token HvH_vHv 与文本指令 token(问题等)拼接,形成 LLM 的输入序列,语言模型生成回答 XaX_aXa

从建模角度,这相当于让语言模型学习条件生成:
P(Xa∣Xv,Xq) P(X_a \mid X_v, X_q) P(XaXv,Xq)


2.3 训练:两阶段策略(对齐预训练 → 指令微调)

LLaVA 训练分两步,目的是先让视觉 token “进入语言空间”,再让模型学会“按多模态指令回答”。

2.3.1 阶段 1:特征对齐预训练(只训练连接器)

目标:在冻结视觉编码器与 LLM 的情况下,仅训练投影层 WWW,让模型能用视觉 token 辅助生成与图像匹配的文本(例如 caption)。

训练数据:从 CC3M 等筛选得到的图文对,构造成简单指令格式(例如“简要描述图片”)。

训练目标:最大化正确文本 XaX_aXa 的对数似然(标准自回归目标),但仅对回答部分计算损失。

2.3.2 阶段 2:端到端视觉指令微调(训练连接器 + LLM)

目标:在高质量的多模态指令数据(如 158K GPT-4 合成数据 + 其它公开数据)上训练,使模型具备多轮对话、长答案、复杂问答能力。

若把多轮对话组织成一个序列(包含若干轮问答),设整个输出 token 序列长度为 LLL,自回归形式为:
P(Xa)=∏i=1LP(xi∣Xinstruct,<i,Xa,<i,Xv) P(X_a) = \prod_{i=1}^{L} P(x_i \mid X_{instruct,<i}, X_{a,<i}, X_v) P(Xa)=i=1LP(xiXinstruct,<i,Xa,<i,Xv)

其中:

  • xix_ixi 是第 iii 个要预测的 token,
  • Xinstruct,<iX_{instruct,<i}Xinstruct,<i 表示第 iii 个 token 之前的所有指令 token,
  • Xa,<iX_{a,<i}Xa,<i 表示第 iii 个 token 之前的回答 token,
  • XvX_vXv(经连接器后的视觉 token)作为条件,贯穿整个生成过程。

训练时通常只对 assistant 的回答 token(以及终止符 )计算损失,让模型把“输出什么”聚焦在回答上。


3. LLaVA 的实验与现象:为什么它看起来像“多模态 ChatGPT”

3.1 LLaVA-Bench:用 GPT-4 当裁判的评测方式

LLaVA 提出 LLaVA-Bench,包含两类数据:

  • COCO 子集:30 张图,90 个问题
  • In-the-Wild 子集:24 张图,60 个问题

问题覆盖三类能力:对话、详细描述、复杂推理。评测方式是让 GPT-4 作为评判者,做相对打分(与其它基线对比)。

3.2 定性结果:从“只会描述”到“能按指令解释”

典型对比现象:

  • BLIP-2、OpenFlamingo 往往更擅长输出“描述性文本”,但面对“带约束的指令”或“多步推理要求”时容易变得模板化;
  • LLaVA 由于直接继承了 Vicuna 的对话能力与指令遵循能力,在回答风格、长文本组织、互动性上更像聊天助手。

3.3 ScienceQA:多模态推理任务中的提升

在 ScienceQA 这类包含图文上下文的多模态问答上,LLaVA 展示了:

  • 单模型即可达到很高准确率
  • 结合 GPT-4(作为评判或协同组件)还能进一步提升

4. LLaVA-1.5:在不改“核心框架”的前提下,性能大幅跃迁

LLaVA-1.5 的策略非常明确:保持 LLaVA 的极简架构哲学,主要通过三件事提升能力:

  1. 更强的视觉输入(更高分辨率)
  2. 更强的连接器(线性 → 轻量 MLP)
  3. 更合适的数据混合(从 158K 扩展到 ~1.2M,加入学术 VQA/OCR/区域感知任务)

4.1 架构变化:CLIP ViT-L/336 + MLP Connector

整体仍是:
image → vision encoder → connector → LLM

不同点:

  • 视觉编码器改为 CLIP ViT-L/336px,输入分辨率更高(336×336),细节更清晰;
  • 连接器从单层线性映射升级为 多层 MLP(常见描述是 2 层或 4 层版本),增强跨模态表示能力。

4.2 高分辨率与 AnyRes/分块策略:为什么“更清晰”能减少幻觉

当输入分辨率提升时,模型能看到更细粒度的局部线索(例如小字、细小物体、局部关系),从而减少“看不清导致的编造”。

LLaVA-1.5 进一步提出高分辨率版本(如 LLaVA-1.5-HD),核心思想是:
把图像切成多个块分别编码,再把特征合并,并额外保留一个下采样的全局特征用于提供全局上下文,减少分块造成的伪影。

直观案例(OCR/细节):

  • 低分辨率下:路牌上写的是 “STOP” 还是 “SLOW” 容易混淆,模型可能“猜”;
  • 高分辨率 + 分块编码:字符边缘更清晰,模型更可能读对,从而减少无依据的回答。

4.3 响应格式提示:让模型学会“短答/长答切换”

很多 VQA 数据期望短答案(一个词/短语),而对话/推理数据期望长答案。如果训练提示模糊(例如统一用 “Q: … A: …”),模型可能倾向于输出短答,或在该短答模式上过拟合。

LLaVA-1.5 的关键做法是:在数据中加入明确的格式指令,例如:

  • “用一个词或短语回答问题”
  • “直接从给定选项中选择答案字母”

这样模型在训练中学会把“输出格式”也当作指令的一部分,从而提升跨任务泛化。

4.4 数据策略:从“合成对话”走向“学术任务混合”

LLaVA-1.5 引入大量公开任务数据,覆盖:

  • 通用 VQA:VQAv2、GQA
  • 知识 VQA:OKVQA 等
  • OCR 类:TextVQA/OCRVQA 等
  • 区域级:Visual Genome、RefCOCO
  • 以及 ShareGPT 文本对话数据(增强对话风格与指令遵循)

这类混合的直接效果是:

  • 模型既能保持“像助手一样对话”
  • 又能在学术基准上显著提升(VQA/OCR/推理等)

4.5 训练与成本:强调“可复现与效率”

LLaVA-1.5 报告的训练形态通常仍是两阶段:

  • 对齐预训练:让 connector 学会把视觉表示映射到语言空间
  • 视觉指令调优:用多源指令数据让 LLM 学会多模态任务

在工程上,它强调:

  • 参数改动小(连接器很轻量)
  • 训练周期相对可控(例如 8×A100 级别一天内复现 13B 版本)

5. LLaVA-NeXT(v1.6):系统化回答“提升多模态能力到底靠什么”

LLaVA-NeXT 的核心价值在于:它不只“堆数据/堆分辨率”,而是通过大量消融实验,系统讨论影响视觉指令调优效果的关键因素,并提出更稳定的训练配方(包括 Stage-1.5)。

5.1 关键结论 1:LLM 规模很关键

一个非常重要的经验规律是:在很多多模态任务上,更大的语言模型能带来更强的整体能力。原因并不神秘:

  • 多模态任务不仅是“看清楚”,还包含大量语言知识、常识、推理结构与表达组织;
  • 视觉特征只提供证据,如何组织证据并输出合理解释,很大程度依赖 LLM 的语言能力与知识储备。

现象通常表现为:

  • LLM 越大,整体分数越高
  • 训练越稳定,但往往需要更小学习率来避免震荡
  • 小模型在某些设置下反而更依赖小 batch 或更强正则

5.2 关键结论 2:视觉输入配置(分辨率、token 数)比“换大视觉骨干”更直接

在视觉侧,LLaVA-NeXT 强调:

  • 性能与 输入配置(分辨率、token 数) 的相关性很强
  • 仅仅换更大的视觉编码器,不一定比“合理增加 token/分辨率”更划算

直观理解:

  • OCR、图表、细粒度关系任务更需要局部细节 → 更高分辨率/更多 token 更有效;
  • 但 token 过多会显著增加训练与推理开销,因此需要控制上限。

5.3 Higher-AnyRes:优先扩分辨率,同时控制 token 成本

Higher-AnyRes 的直觉是:尽量让模型看到更高分辨率的图,但通过插值/池化等策略控制最终 token 数,避免成本爆炸。

如果用网格切分表示把图像切成 a×ba \times ba×b 个块,再加一个全局块,那么 token 数大致与 ab+1ab+1ab+1 成正比。为了控制 token 上限 ttt,可以采用阈值策略把 token 控制在一个预算范围内(核心目标是“更多细节,但不让 token 无限制增长”)。

这一类策略在实际表现上往往是:

  • 对细节任务(OCR、长图文、长视频)提升更明显
  • 且在 LLM 规模增大时,视觉提升仍能持续转化为能力提升

5.4 Pooling 与投影位置:细节决定上限

当特征图很大时,必须做下采样以适配 LLM 的上下文预算。实践中常见结论是:

  • 双线性插值往往比简单的平均池化更保留结构信息
  • 在“投影到语言空间”前后做 pooling 的效果可能不同,很多设置下“投影后再 pool”更稳

直观解释:投影层把视觉特征映射到语言嵌入空间,若先在视觉空间粗暴 pool,可能丢失对 LLM 更有用的细粒度线索;而在投影后再做尺度调整,有时更利于保留“对语言推理友好”的信息。


6. 三阶段训练范式:Stage-1 → Stage-1.5 → Stage-2

LLaVA-NeXT 把训练流程拆得更细,并强调中间阶段的重要性:

6.1 Stage-1:语言-图像对齐

目标:让视觉 token 能被 LLM“读懂”。常见做法是冻结大部分模块,仅训练连接器,或使用较轻量的更新。

结论倾向:

  • 数据质量往往比数据数量更关键
  • 精选的高质量图文对齐数据能明显提升后续指令微调效果

6.2 Stage-1.5:高质量知识学习(关键新增)

目标:在进入大规模视觉指令微调之前,先注入更高质量、知识密度更高的训练信号,提升模型的可迁移推理与表达能力。

典型做法之一是 重描述(re-caption)

  • 用更强的多模态模型生成更高质量、更细粒度的图像描述
  • 用这些“高质量描述数据”对模型做全模型训练
  • 作用类似于:先把视觉-语言“知识通道”打通,再去学各种任务指令

直观案例:同一张图

  • 普通 caption:只说“一个人和一辆车在停车场”
  • 重描述 caption:会补充人物动作、物体关系、空间布局、细节线索
    后者对推理/对话的价值更高,因为它提供了更丰富的可用证据。

6.3 Stage-2:视觉指令调优(Visual Instruction Tuning)

目标:把模型塑造成“能对话、能按指令完成任务”的多模态助手。
这一步通常使用混合数据(对话 + VQA + OCR + 推理 + 领域数据),并更新更大范围参数(连接器 + LLM,视觉编码器往往仍冻结或部分冻结)。


7. 组合起来看:LLaVA 系列到底教会了什么

7.1 极简架构也能很强:关键是对齐与数据配方

LLaVA 系列一直坚持一种“极简主义”:

  • 不引入复杂的跨模态注意力堆叠
  • 不做繁重的端到端视觉骨干训练
  • 通过“视觉 token 前缀 + 自回归 LLM”的方式,把问题尽量转化为 LLM 擅长的生成问题

这条路线的成功说明:
只要视觉信息能以合适的 token 形式进入语言空间,再通过高质量、多样化的指令数据进行训练,就能让模型获得很强的多模态助手行为。

7.2 提升优先级经验

从 LLaVA → 1.5 → NeXT 的经验可以提炼成一个常见优先级:

  1. 明确的指令格式与高质量数据混合(决定“会不会按要求输出”)
  2. 更合理的视觉输入配置(分辨率、token 数、AnyRes、pooling)(决定“看得清不清”)
  3. 更强的语言模型底座(决定“会不会推理、会不会组织语言”)
  4. 连接器的表达能力(线性到 MLP 的小升级往往很划算)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐