mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
3874 字
11 分钟
LLaVA:开源多模态对话模型
2025-03-02

2023 年 4 月,威斯康星大学麦迪逊分校的 Liu 等人发表论文《Visual Instruction Tuning》,提出了 LLaVA(Large Language-and-Vision Assistant)。这篇论文的思路极为直接:把最强的视觉编码器(CLIP ViT)和最强的语言模型(LLaMA/Vicuna)连在一起,用 GPT-4 生成的多模态指令数据进行微调,就能得到一个能「看图聊天」的开源模型。

就是这么简单的方案,却开启了开源多模态大模型的新纪元。LLaVA 不仅在多项视觉问答基准上逼近甚至超越 GPT-4V,更重要的是它验证了一个关键假设——语言模型的指令跟随能力可以高效地迁移到多模态领域

LLaVA 是开源多模态对话的起点。 从它之后,LLaVA-1.5、LLaVA-NeXT、LLaVA-OneVision 形成了一个完整的模型家族,成为学术界和工业界研究多模态 AI 的标准基线。

本文要点#

  • LLaVA 的核心动机:将指令微调扩展到视觉领域
  • 架构设计:CLIP ViT + Projection Layer + LLaMA
  • 数据构建:GPT-4 生成多模态指令跟随数据的创新方法
  • LLaVA-1.5 的关键改进:更大投影层、更多数据、学术任务集成
  • LLaVA-NeXT / LLaVA-OneVision 的持续演进
  • 与 GPT-4V、Gemini 等闭源模型的对比
  • 开源生态:训练代码、数据集、模型权重的全面开放

一、为什么需要 LLaVA#

1.1 多模态对话的挑战#

2023 年初,GPT-4 展示了令人震惊的多模态理解能力——它可以看图回答问题、解读图表、分析 UI 界面。但 GPT-4V 是闭源的,研究者和开发者无法基于它进行二次开发或深入研究。

开源社区面临一个核心问题:如何用开源组件构建一个能看图对话的模型?

当时主流的视觉-语言模型(如 BLIP-2、Flamingo)虽然能处理图像,但它们主要针对描述生成和视觉问答这类单轮任务,缺乏指令跟随和对话能力。而 ChatGPT、Vicuna 等语言模型虽然对话能力出色,却完全无法理解视觉输入。

1.2 关键洞察:指令能力的迁移#

LLaVA 论文最核心的洞察在于——语言模型通过指令微调获得的「指令跟随能力」是一种通用能力,可以通过一个简单的投影层迁移到多模态场景。

flowchart LR subgraph 语言指令微调 A["语言指令数据<br>Alpaca / Vicuna"] --> B["LLaMA<br>语言模型"] B --> C["对话能力<br>指令跟随"] end subgraph LLaVA 视觉指令微调 D["多模态指令数据<br>GPT-4 生成"] --> E["CLIP + LLaMA<br>多模态模型"] E --> F["视觉对话能力<br>看图聊天"] end C -->|"能力迁移"| F style F fill:#4caf50,color:#fff

这个迁移之所以有效,是因为指令跟随本质上是一种格式理解和任务执行能力——理解用户的意图,按照特定格式输出回答。这种能力与输入模态无关,只需要让语言模型学会「读取」视觉信息的表示。

1.3 与之前工作的区别#

模型视觉能力来源指令跟随对话能力开源
Flamingo (2022)Perceiver Resampler有限单轮
BLIP-2 (2023)Q-Former有限单轮
GPT-4V (2023)原生多模态多轮
LLaVA (2023)CLIP + Projection多轮

二、LLaVA 架构设计#

2.1 整体架构#

LLaVA 的架构可以用「极简」来形容,仅包含三个核心组件:

flowchart TB subgraph 输入处理 IMG["图像输入"] --> VIT["CLIP ViT-L/14<br>视觉编码器"] IMG --> PATCH["图像 Patch<br>14×14"] PATCH --> VIT VIT --> FEAT["视觉特征<br>576×1024"] end subgraph 投影层 FEAT --> PROJ["可训练投影矩阵 W<br>(线性层)"] PROJ --> TOKEN["视觉 Token<br>576×4096"] end subgraph 语言模型 TEXT["文本输入"] --> EMBD["LLaMA Token Embedding"] TOKEN --> PREFIX["拼接:<视觉Token> <文本Token>"] EMBD --> PREFIX PREFIX --> LLM["Vicuna-7B / 13B<br>语言模型"] LLM --> OUT["文本输出"] end style VIT fill:#2196f3,color:#fff style PROJ fill:#ff9800,color:#fff style LLM fill:#9c27b0,color:#fff

2.2 视觉编码器:CLIP ViT#

LLaVA 直接使用预训练好的 CLIP ViT-L/14 作为视觉编码器(参数量约 3 亿),在训练中冻结。选择 ViT-L/14 的原因是其 14×14 的 Patch 大小能产生适中数量的 Token,且 CLIP 预训练已学习到高质量的视觉-语言对齐表示。

# LLaVA 视觉编码(简化)
vision_encoder = CLIPVisionModel.from_pretrained("openai/clip-vit-large-patch14")
vision_encoder.eval() # 冻结视觉编码器
def encode_image(image):
features = vision_encoder(image) # [batch, 576, 1024]
return features.last_hidden_state[:, 1:] # 去掉 CLS token

2.3 投影层:从视觉到语言的桥梁#

投影层负责将 CLIP 的视觉特征映射到语言模型的 embedding 空间。最初的 LLaVA 使用一个简单的线性层:

# LLaVA 原始投影层
projection = nn.Linear(clip_hidden_size, llama_hidden_size)
# 即 nn.Linear(1024, 4096) 对应 7B 模型
visual_tokens = projection(visual_features) # [batch, num_patches, 4096]

这个投影层虽然简单,但效果出奇地好。论文还实验了两层 MLP 投影层,发现在数据量较少时差异不大。

2.4 语言模型:Vicuna(LLaMA 微调版)#

LLaVA 使用 Vicuna-7B 和 Vicuna-13B 作为语言模型底座。Vicuna 是在 LLaMA 基础上用 ShareGPT 对话数据微调的版本,已经具备良好的对话能力。

训练时,视觉 Token 和文本 Token 被拼接为一个序列输入语言模型:

输入序列 = [<视觉Token_1>, ..., <视觉Token_N>, <文本Token_1>, ..., <文本Token_M>]

语言模型对视觉 Token 和文本 Token 一视同仁——它并不知道序列中有图像信息,只是看到了更多的 Token。这正是 LLaVA 设计的巧妙之处。


三、数据构建:GPT-4 生成多模态指令#

3.1 核心创新:用纯文本模型生成多模态数据#

LLaVA 论文最巧妙的贡献之一是数据构建方法。既然 GPT-4 本身就具备多模态能力,为什么不让它来生成训练数据?

但 LLaVA 的做法更聪明——它不直接让 GPT-4「看图」,而是把图像的文本描述(caption)和目标检测框(bounding box)作为上下文,让纯文本 GPT-4 生成多模态对话数据:

flowchart TB subgraph 数据源 A["COCO 图像"] --> B["人工标注<br>描述 + 检测框"] end subgraph GPT-4 生成 B --> C["Prompt: 请基于以下图像信息<br>生成一段对话..."] C --> D["GPT-4"] D --> E1["对话数据<br>Conversation"] D --> E2["详细描述<br>Detail Description"] D --> E3["复杂推理<br>Complex Reasoning"] end subgraph 最终训练数据 E1 --> F["多模态指令数据<br>158K 条"] E2 --> F E3 --> F end style D fill:#10b981,color:#fff style F fill:#4caf50,color:#fff

3.2 三种指令类型#

LLaVA 将 GPT-4 生成的数据分为三种类型:

类型数量示例任务锻炼的能力
对话 (Conversation)58K关于图像的多轮问答多轮对话、信息提取
详细描述 (Detail Description)23K请详细描述这张图片图像理解、语言生成
复杂推理 (Complex Reasoning)77K这张图暗示了什么?深层推理、常识判断

3.3 数据质量的重要性#

LLaVA 的实验表明,GPT-4 生成的数据质量远超人工标注。因为 GPT-4 本身就经过了大量 RLHF 对齐训练,它生成的回复天然符合「有帮助、无害、诚实」的标准。这一发现启发了后续大量工作——用强模型生成数据来训练弱模型(即「知识蒸馏」)。


四、训练策略#

4.1 两阶段训练#

LLaVA 采用两阶段训练策略,逐步解锁模型能力:

flowchart LR subgraph 阶段一:特征对齐 A1["冻结 CLIP ViT"] --> C1["训练投影层"] B1["冻结 LLaMA"] --> C1 C1 --> D1["数据:CC3M 子集<br>595K 图文对"] D1 --> E1["目标:视觉 Token<br>映射到语言空间"] end subgraph 阶段二:指令微调 F1["冻结 CLIP ViT"] --> H1["训练投影层 + LLaMA"] G1["训练 LLaMA"] --> H1 H1 --> I1["数据:GPT-4 生成<br>158K 多模态指令"] I1 --> J1["目标:视觉对话<br>指令跟随"] end E1 --> J1 style C1 fill:#ff9800,color:#fff style H1 fill:#9c27b0,color:#fff

阶段一:特征对齐预训练

目标:让投影层学会将 CLIP 的视觉特征映射到 LLaMA 的 embedding 空间。

  • 冻结 CLIP ViT 和 LLaMA,只训练投影层(可训练参数极少)
  • 使用 CC3M(Conceptual Captions)的 595K 子集
  • 将图像描述作为目标文本,训练模型根据图像生成描述
  • 训练成本极低,单卡 A100 即可完成

阶段二:视觉指令微调

目标:在指令跟随数据上微调投影层和 LLaMA,使模型具备视觉对话能力。

  • 冻结 CLIP ViT,同时训练投影层和 LLaMA
  • 使用 GPT-4 生成的 158K 多模态指令数据
  • 训练目标:给定图像和指令,生成正确的回答
  • 7B 模型在 8×A100 上约 3 小时完成训练

4.2 训练细节#

超参数阶段一阶段二
学习率2e-32e-5
Batch Size12832
训练轮数1 epoch3 epochs
可训练参数~4M(投影层)~7B / ~13B
GPU 需求1×A1008×A100

五、LLaVA-1.5:大幅提升#

5.1 关键改进#

2023 年 10 月,团队发布了 LLaVA-1.5,在多个方面进行了关键改进,性能实现了质的飞跃:

flowchart TB subgraph LLaVA 原版 A1["线性投影层<br>1024→4096"] B1["158K 指令数据"] C1["224×224 图像分辨率"] end subgraph LLaVA-1.5 改进 A2["两层 MLP 投影<br>1024→4096"] B2["665K 指令数据<br>+ 学术任务数据"] C2["336×336 图像分辨率<br>高分辨率输入"] end A1 -->|"更强投影"| A2 B1 -->|"4× 数据量"| B2 C1 -->|"更高分辨率"| C2 style A2 fill:#4caf50,color:#fff style B2 fill:#4caf50,color:#fff style C2 fill:#4caf50,color:#fff

5.2 各项改进详解#

投影层升级:从简单的线性层升级为两层 MLP(带 GELU 激活函数)。这个看似微小的改变带来了显著提升,因为它能让视觉特征在映射过程中经历非线性变换,更好地适配语言模型的表示空间。

数据规模扩大:从 158K 扩大到 665K 条指令数据,同时加入了多个学术 VQA 数据集:

数据集规模任务类型
GPT-4 生成对话158K多轮对话
VQA-v283K视觉问答
GQA72K图像推理
OCR-VQA45K文字识别问答
TextCaps22K文字描述
ShareGPT4V100K详细描述
其他~185K多种任务

分辨率提升:从 224×224 提升到 336×336,让模型能捕获更多图像细节。这对 OCR、图表理解等细粒度任务至关重要。

5.3 性能对比#

LLaVA-1.5 在多个基准上取得了令人瞩目的成绩:

基准测试LLaVALLaVA-1.5-13BGPT-4V
MMBench35.267.775.0
MME115818021920
SEED-Bench35.358.671.6
VQAv258.980.077.2
TextVQA20.058.278.0
ScienceQA61.779.9-

注:粗体数字表示 LLaVA-1.5 与 GPT-4V 的差距已大幅缩小,在某些任务上(如 VQAv2)甚至超越。


六、LLaVA-NeXT 与 LLaVA-OneVision#

6.1 LLaVA-NeXT(LLaVA-1.6)#

2024 年初发布的 LLaVA-NeXT 带来了三个重要升级:

任意分辨率输入:不再固定图像分辨率,而是将图像分割为多个子图(sub-images),每个子图独立编码后拼接。这让模型能处理任意大小的高分辨率图像:

# LLaVA-NeXT 任意分辨率处理
def process_any_resolution(image, max_tiles=6):
"""将图像分割为多个 tile 分别编码"""
tiles = adaptive_partition(image, max_tiles=max_tiles)
# 每个tile独立通过CLIP编码
tile_features = [encode(tile) for tile in tiles]
# 拼接所有tile的特征
all_features = torch.cat(tile_features, dim=1)
return all_features

更强的语言模型底座:从 Vicuna 切换到 Mistral-7B 和 Nous-Hermes-2-Yi-34B,推理和对话能力更强。

更好的视觉编码器:升级到 CLIP ViT-L/14@336px,视觉特征更精细。

6.2 LLaVA-OneVision#

2024 年底发布的 LLaVA-OneVision 是系列中最大的一次升级,真正实现了「统一视觉理解」:

能力LLaVA-1.5LLaVA-NeXTLLaVA-OneVision
图像理解
多图像理解
视频理解有限
单图→多图迁移--
最高分辨率336px672px动态
参数规模7B/13B7B-34B0.5B-72B

LLaVA-OneVision 的核心创新在于单图到多图的迁移学习:先用单图数据训练,再通过少量多图/视频数据微调,就能获得多图理解和视频理解能力。


七、与 GPT-4V 和 Gemini 的对比#

7.1 架构对比#

flowchart TB subgraph GPT-4V direction TB G1["原生多模态 Transformer<br>视觉+语言联合训练"] end subgraph Gemini direction TB M1["原生多模态 Transformer<br>文本+图像+音频+视频联合训练"] end subgraph LLaVA direction TB L1["CLIP ViT(冻结)"] --> L2["投影层"] L2 --> L3["LLaMA / Mistral"] end G1 -->|"闭源<br>参数量未知"| R1["最强性能"] M1 -->|"闭源<br>多模态原生"| R2["多模态统一"] L3 -->|"开源<br>组合式架构"| R3["可复现研究"] style G1 fill:#10b981,color:#fff style M1 fill:#2196f3,color:#fff style L3 fill:#ff9800,color:#fff

7.2 能力对比#

维度GPT-4VGemini Pro VisionLLaVA-1.5-13B
图像理解
OCR/文字识别
图表分析
视频理解
推理能力
开源性闭源闭源完全开源
可定制性
部署成本API 计费API 计费本地 GPU

7.3 LLaVA 的独特优势#

虽然 LLaVA 在性能上不及 GPT-4V 和 Gemini,但它有几个闭源模型无法比拟的优势:

  1. 完全开源:训练代码、数据集、模型权重全部公开,可自由修改和商用
  2. 高度可定制:可以针对特定领域(医疗、工业、遥感等)进行微调
  3. 本地部署:无需发送数据到云端,保护隐私和数据安全
  4. 研究友好:为学术界提供了多模态 AI 的标准实验平台
  5. 训练成本低:LLaVA-1.5 的完整训练成本不到 100 美元

八、开源生态#

8.1 LLaVA 模型家族#

LLaVA 已经发展出一个完整的模型家族,覆盖不同参数规模和应用场景:

flowchart TB ROOT["LLaVA 模型家族"] ROOT --> V1["LLaVA(2023.04)<br>原创版本"] ROOT --> V15["LLaVA-1.5(2023.10)<br>性能飞跃"] ROOT --> VN["LLaVA-NeXT(2024.01)<br>任意分辨率"] ROOT --> VO["LLaVA-OneVision(2024.10)<br>统一视觉"] V1 --> V1S["7B / 13B"] V15 --> V15S["7B / 13B"] VN --> VNS["7B / 13B / 34B"] VO --> VOS["0.5B / 7B / 32B / 72B"] style ROOT fill:#9c27b0,color:#fff style VO fill:#4caf50,color:#fff

8.2 社区生态#

LLaVA 的影响力远超论文本身,催生了一个庞大的开源生态:

衍生项目

  • ShareGPT4V:用 GPT-4V 生成高质量图像描述数据,用于训练视觉模型
  • LLaVA-Medical:在医学图像上微调 LLaVA,用于医学视觉问答
  • LLaVA-Interactive:支持图像编辑和视觉对话的交互式系统
  • Cambrian-1:基于 LLaVA 架构的多视角视觉语言模型

训练工具链

  • LLaMA-Factory:集成 LLaVA 微调的一站式训练框架
  • DeepSpeed:支持 LLaVA 分布式训练的加速库
  • Hugging Face Transformers:原生支持 LLaVA 模型推理

数据集

  • LLaVA-Instruct-150K:原始 GPT-4 生成的指令数据
  • LLaVA-Instruct-665K:LLaVA-1.5 扩充后的训练数据
  • ShareGPT4V-PT:100K 高质量图像描述数据
  • ALLaVA:更大规模的多模态指令数据集

常见问题 FAQ#

Q1:LLaVA 和 GPT-4V 的差距主要在哪?

主要在三个维度:复杂推理(如因果推断、常识推理)、细粒度 OCR(手写体、复杂排版)、以及多图联合理解。GPT-4V 是原生多模态训练,视觉和语言在底层就深度融合,而 LLaVA 的组合式架构在语义对齐深度上仍有差距。

Q2:为什么 LLaVA 冻结视觉编码器而不是联合训练?

主要是训练成本和数据量的考量。冻结 CLIP 可以大幅减少可训练参数和显存需求,让 7B/13B 模型的训练成为可能。同时,CLIP 已经学习了高质量的视觉表示,在小数据场景下冻结它反而效果更好。LLaVA-1.5 的实验表明,当数据量足够大时,解冻视觉编码器可以进一步提升性能。

Q3:LLaVA 可以处理视频吗?

原始 LLaVA 和 LLaVA-1.5 只支持图像输入。LLaVA-NeXT 可以通过均匀采样帧的方式处理视频,但效果有限。LLaVA-OneVision 才真正实现了高质量的视频理解,支持动态帧采样和时序建模。

Q4:如何在自己的数据上微调 LLaVA?

推荐使用 LLaMA-Factory 或 LLaVA 官方训练代码。基本流程:准备图像-指令数据(JSONL 格式)→ 配置训练参数 → 运行 LoRA 或全参数微调。7B 模型使用 LoRA 微调只需 1 张 A100 GPU。

Q5:LLaVA 的投影层为什么这么简单却有效?

因为 CLIP 的视觉特征本身已经高度语义化——它经过了大规模对比学习预训练,已经和语言表示对齐。投影层只需要做维度映射,不需要做复杂的语义转换。这也说明 CLIP 的预训练质量是 LLaVA 成功的关键前提。


小结#

LLaVA 是开源多模态对话的里程碑之作。

flowchart TB subgraph LLaVA 的核心贡献 A["视觉指令微调"] --> A1["指令跟随能力<br>可迁移到视觉领域"] B["GPT-4 生成数据"] --> B1["用强模型教弱模型<br>低成本高质量数据"] C["极简架构"] --> C1["CLIP + Projection + LLaMA<br>清晰可复现"] D["全面开源"] --> D1["模型+代码+数据<br>推动社区发展"] end subgraph 深远影响 E["多模态对话<br>开源标准基线"] F["数据构建范式<br>GPT-4V 数据蒸馏"] G["视觉指令微调<br>新研究方向"] H["开源生态<br>模型家族 + 工具链"] end A1 --> E B1 --> F C1 --> G D1 --> H

核心认识:LLaVA 验证了一个简洁而深刻的想法——视觉对话能力不需要从零开始训练,语言模型的指令跟随能力可以通过一个投影层高效迁移到视觉领域。这个想法不仅催生了 LLaVA 模型家族,更启发了整个开源多模态社区。

从 LLaVA 到 LLaVA-1.5,再到 LLaVA-NeXT 和 LLaVA-OneVision,这个项目展示了一个优秀开源项目的生命力:简单清晰的架构、不断迭代改进、完全开放的态度。LLaVA 不仅是一个模型,更是多模态 AI 研究的基础设施。

LLaVA 证明了:在 AI 时代,开源不是闭源的附庸,而是创新的引擎。


参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

LLaVA:开源多模态对话模型
https://blog.souloss.com/posts/machine-learning/llm-paper-history/llava-open-source-multimodal-dialogue/
作者
Souloss
发布于
2025-03-02
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时