🧠 图解记忆:BLIP-2 不联合重训两个大模型,而是让 Q-Former 用固定数量的可学习 Query 提取和压缩视觉 token,再投影到冻结 LLM 的输入空间;点击图片可查看原图。
💡 答案要点
BLIP-2 = 用更少参数达到更好效果
核心创新:Q-Former(Query Transformer)
BLIP-2 的动机:
问题:
BLIP 需要联合训练图像编码器和文本编码器
→ 参数量大(1B+)
→ 训练成本高
→ 难以利用已有的大语言模型(LLM)
目标:
冻结视觉编码器(如 CLIP ViT)
冻结语言模型(如 OPT、Flan-T5)
只训练轻量级的连接层Q-Former 架构:
┌─────────────────────────────────────────────────────────┐
│ BLIP-2 架构 │
└─────────────────────────────────────────────────────────┘
阶段1:视觉-语言表示学习
冻结图像编码器(CLIP ViT-L)
↓
Q-Former(32个可学习Query)
↓
学习到的视觉表示
阶段2:视觉-语言生成学习
Q-Former输出
↓
线性层
↓
冻结 LLM(OPT-2.7B / Flan-T5-XL)
↓
生成回答Q-Former 详解:
什么是 Q-Former?
python
# 本质:可学习的查询向量 + Transformer
learnable_queries = nn.Parameter(torch.randn(32, 768))
# 32 个查询向量,每个 768 维
# 处理流程
image_features = frozen_image_encoder(image) # 257 × 1024
# Q-Former 提取信息
queries = learnable_queries.expand(batch_size, -1, -1)
output = q_former(queries, image_features) # 32 × 768
# 输出:固定长度的视觉表示(32个向量)为什么需要 Q-Former?
1. 降维压缩:
图像编码器输出:257 个 token × 1024 维 = 262K 维
Q-Former 输出:32 个 token × 768 维 = 24K 维
压缩比:10.9x
好处:
- 减少 LLM 输入长度
- 提升推理速度
- 降低计算成本2. 适配不同模态:
视觉特征(CLIP):连续、密集
语言特征(LLM):离散、稀疏
Q-Former 作用:
把视觉特征转换为 LLM 友好的表示3. 可学习的信息提取:
固定数量的 Query(32个)
每个 Query 学习提取特定类型的信息:
Query 1:物体类别
Query 2:空间位置
Query 3:颜色
...
类似 DETR 的 Object Queries两阶段训练:
阶段1:视觉-语言表示学习
python
# 目标:让 Q-Former 学会提取有用的视觉信息
# 损失:ITC + ITM + ITG(Image-Grounded Text Generation)
# 训练数据:图文对(1.29 亿)
# 冻结:图像编码器
# 训练:Q-Former阶段2:视觉-语言生成学习
python
# 目标:让 LLM 理解视觉信息
# 损失:Language Modeling Loss
# 训练数据:指令数据(视觉问答、字幕生成)
# 冻结:图像编码器 + LLM
# 训练:Q-Former + 线性投影层性能提升:
| 模型 | 参数量 | 训练数据 | VQA准确率 | COCO字幕(CIDEr) |
|---|---|---|---|---|
| BLIP | 224M | 1.29亿 | 78.3% | 136.7 |
| Flamingo-80B | 80B | 20亿 | 82.0% | 138.1 |
| BLIP-2 | 188M | 1.29亿 | 82.4% | 144.5 |
关键优势:
BLIP-2(188M)> Flamingo(80B)
- 参数少 400 倍
- 效果更好
- 训练更快面试话术:
"BLIP-2 的核心是 Q-Former,用 32 个可学习 Query 提取视觉信息。冻结视觉编码器和 LLM,只训练 Q-Former,参数量从 1B 降到 188M,效果反而更好。这证明了模态适配比联合训练更重要。"
