6.5 KiB
6.5 KiB
LLaVA与miniGPT4
概述
LLaVA(Large Language and Vision Assistant)和miniGPT4是两阶段训练的视觉-语言模型代表,它们通过连接预训练的视觉编码器和大语言模型,实现了多模态理解能力。本章节深入分析这两个模型的核心架构和训练方法。
1. LLaVA架构详解
1.1 整体架构
LLaVA采用简洁的"视觉编码器 + 投影层 + LLM"架构:
图像 → Vision Encoder (ViT-L/14) → 投影层 (MLP) → LLM (Vicuna/LLaMA)
↓
文本提示 → Tokenize → 拼接 → LLM → 文本响应
1.2 MLP投影层设计
投影层的作用: 将视觉特征映射到语言模型的嵌入空间
架构:
class ProjectionLayer(nn.Module):
def __init__(self, vision_dim, llm_dim):
self.linear1 = nn.Linear(vision_dim, llm_dim)
self.activation = nn.ReLU()
self.linear2 = nn.Linear(llm_dim, llm_dim)
def forward(self, x):
x = self.linear1(x)
x = self.activation(x)
x = self.linear2(x)
return x
维度对应:
- ViT-L/14输出:257 tokens × 1024维
- 投影后:257 tokens × 4096维(匹配LLaMA维度)
1.3 视觉编码器
使用OpenAI的CLIP ViT-L/14作为视觉编码器:
| 参数 | 值 |
|---|---|
| 图像分辨率 | 224×224 |
| Patch Size | 14×14 |
| Transformer层数 | 24 |
| 隐藏维度 | 1024 |
| 注意力头数 | 16 |
| 参数量 | ~428M |
CLIP预训练使视觉编码器具备良好的语义理解能力。
1.4 大语言模型
使用Vicuna(基于LLaMA的对话模型)作为语言decoder:
| 模型 | 参数量 | 上下文长度 |
|---|---|---|
| LLaVA-1.0 | 7B/13B | 2048 |
| LLaVA-1.5 | 7B/13B | 4096 |
2. 两阶段训练策略
2.1 第一阶段:语言-图像对齐预训练
目标: 让投影层学习将视觉特征映射到语言空间
数据: CC3M数据集(约600K图像-文本对)
训练配置:
# 阶段1配置
batch_size: 256
learning_rate: 1e-3
epochs: 1
optimizer: AdamW
temperature: for contrastive loss
训练要点:
- 冻结视觉编码器和LLM参数
- 仅训练投影层MLP
- 使用对比学习损失(可选)
2.2 第二阶段:指令微调
目标: 赋予模型多模态对话能力
数据: LLaVA-Instruct-150K数据集
数据构成:
| 类型 | 数量 | 描述 |
|---|---|---|
| 对话数据 | 90K | 多轮对话 |
| 详细描述 | 40K | 图像详细描述 |
| 复杂问答 | 20K | 需要推理的问题 |
训练配置:
# 阶段2配置
batch_size: 32
learning_rate: 2e-5
epochs: 3
optimizer: AdamW
weight_decay: 0.01
训练范围:
- 投影层:可训练
- LLM:可训练(LoRA/QLoRA可选)
- 视觉编码器:冻结或轻度微调
3. miniGPT4架构详解
3.1 核心设计理念
miniGPT4的目标是用最少的训练成本实现类似GPT-4的多模态能力:
图像 → EVA (ViT) → Q-Former → LLM (Vicuna)
↓
冻结 EVA
冻结 LLM
仅训练 Q-Former
3.2 Q-Former跨模态连接
miniGPT4使用BLIP-2的Q-Former作为跨模态桥梁:
Q-Former结构:
- 12个Transformer层
- Cross-attention层连接视觉特征
- 32个可学习的query tokens
信息流动:
视觉特征 → Cross-attention → Query features → 线性映射 → LLM嵌入
3.3 EVA视觉编码器
EVA是基于CLIP的大规模视觉Transformer:
| 特性 | EVA-B/16 | EVA-L/14 |
|---|---|---|
| 参数量 | 86M | 304M |
| 图像分辨率 | 224/448 | 224 |
| 预训练数据 | LAION-2B | CLIP |
EVA相比CLIP具有更好的视觉理解能力。
3.4 训练策略对比
| 阶段 | LLaVA | miniGPT4 |
|---|---|---|
| 第一阶段 | CC3M + 投影层训练 | BLIP-2预训练权重 + Q-Former训练 |
| 第二阶段 | LLaVA-Instruct微调 | 对话数据微调 |
4. 对齐策略分析
4.1 模态对齐的核心问题
视觉编码器产生的特征空间与语言模型的嵌入空间存在差异:
问题:
- 视觉特征:连续、高维、空间结构
- 文本特征:离散、语义抽象
4.2 投影方法对比
| 方法 | 代表模型 | 参数量 | 对齐质量 |
|---|---|---|---|
| MLP投影 | LLaVA | 40M | 中等 |
| Q-Former | miniGPT4 | 185M | 较好 |
| Adapter | LLaMA-Adapter | 8M | 可接受 |
| LoRA | QLoRA-LLaVA | <1M | 较好 |
4.3 轻量化对齐技术
LLaMA-Adapter方法:
# Adapter结构
class AdapterLayer(nn.Module):
self.lora_down = nn.Linear(dim, r)
self.lora_up = nn.Linear(r, dim)
self.alpha = alpha / r # 缩放因子
def forward(self, x):
return x + self.alpha * self.lora_up(self.lora_down(x))
5. 训练数据构建
5.1 LLaVA-Instruct数据集
构建流程:
Step 1: COCO captions → GPT-4扩展 → 详细描述
Step 2: 图像问答对生成 → 质量过滤
Step 3: 多轮对话构造 → 对话角色分配
数据集统计:
- 图像总数:158K
- 对话轮次:610K
- 平均对话长度:3.5轮
5.2 miniGPT4数据生成
使用ChatGPT生成围绕图像的对话:
Prompt模板:
Given an image, generate a conversation that includes questions
about the image content and detailed descriptions. The conversation
should be natural and informative.
6. 模型能力对比
| 能力 | LLaVA | miniGPT4 |
|---|---|---|
| 图像描述 | ✓ | ✓ |
| 视觉问答 | ✓ | ✓ |
| 多轮对话 | ✓ | ✓ |
| 复杂推理 | 较弱 | 中等 |
| 中文理解 | 一般 | 一般 |
| 推理速度 | 快 | 中等 |
7. 关键技术总结
| 技术 | LLaVA | miniGPT4 |
|---|---|---|
| 视觉编码器 | CLIP ViT-L/14 | EVA |
| 跨模态连接 | MLP | Q-Former |
| LLM | Vicuna-7B | Vicuna-7B |
| 训练成本 | ~1天(A100) | ~1天(A100) |
| 对齐质量 | 中上 | 良好 |
8. 应用场景
| 场景 | LLaVA适用性 | miniGPT4适用性 |
|---|---|---|
| 图像标注 | 高 | 高 |
| 视觉助手 | 中 | 高 |
| 内容创作 | 中 | 中 |
| 教育问答 | 中 | 中 |
9. 未来改进方向
- 更大规模视觉编码器:EVA-CLIP、LLaVA-1.6
- 更长上下文:支持高分辨率图像
- 多语言支持:扩展到中文等多语言
- 指令遵循增强:RLHF/CONFLICT训练
- 实时视觉理解:视频流输入支持
LLaVA和miniGPT4开创了视觉-语言模型轻量化训练的新范式,为后续多模态大模型的发展奠定了基础。