262 lines
6.5 KiB
Markdown
262 lines
6.5 KiB
Markdown
# 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投影层设计
|
||
|
||
**投影层的作用:** 将视觉特征映射到语言模型的嵌入空间
|
||
|
||
**架构:**
|
||
```python
|
||
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图像-文本对)
|
||
|
||
**训练配置:**
|
||
```python
|
||
# 阶段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 | 需要推理的问题 |
|
||
|
||
**训练配置:**
|
||
```python
|
||
# 阶段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方法:**
|
||
```python
|
||
# 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. 未来改进方向
|
||
|
||
1. **更大规模视觉编码器**:EVA-CLIP、LLaVA-1.6
|
||
2. **更长上下文**:支持高分辨率图像
|
||
3. **多语言支持**:扩展到中文等多语言
|
||
4. **指令遵循增强**:RLHF/CONFLICT训练
|
||
5. **实时视觉理解**:视频流输入支持
|
||
|
||
LLaVA和miniGPT4开创了视觉-语言模型轻量化训练的新范式,为后续多模态大模型的发展奠定了基础。 |