🧠 图解记忆:CLIP 的双编码器擅长图文对齐但不能生成,BLIP 通过 ITC、ITM、LM 联合训练和文本解码器统一了检索、字幕与视觉问答;点击图片可查看原图。
💡 答案要点
BLIP = Bootstrapped Language-Image Pre-training(自举语言-图像预训练)
核心区别:
| 维度 | CLIP | BLIP |
|---|---|---|
| 任务类型 | 只能理解(检索) | 理解 + 生成 |
| 训练目标 | 对比学习(ITC) | ITC + ITM + LM(三合一) |
| 架构 | 双编码器 | 编码器 + 解码器 |
| 能力 | 图文匹配 | 图文匹配 + 字幕生成 + VQA |
为什么需要 BLIP?
CLIP 的局限:
任务1:给图片找匹配文本 ✓
任务2:给图片生成字幕 ✗(不支持)
任务3:回答图片相关问题 ✗(不支持)
原因:
CLIP 只有编码器,不能生成文本BLIP 的能力:
任务1:图文检索 ✓(继承 CLIP)
任务2:图像字幕 ✓(新增)
任务3:视觉问答 ✓(新增)
实现:
编码器:理解图像和文本
解码器:生成文本BLIP 架构:
┌─────────────────────────────────────────────────────────┐
│ BLIP 架构 │
└─────────────────────────────────────────────────────────┘
图像编码器(Image Encoder)
ViT → 图像特征
文本编码器(Text Encoder)
BERT → 文本特征(双向)
文本解码器(Text Decoder)
GPT → 生成文本(单向)
多任务训练:
1. ITC(Image-Text Contrastive):对比学习
2. ITM(Image-Text Matching):二分类(匹配/不匹配)
3. LM(Language Modeling):生成字幕三个训练目标:
1. ITC(对比学习):
python
# 和 CLIP 一样
image_features = image_encoder(image)
text_features = text_encoder(text)
loss_itc = contrastive_loss(image_features, text_features)2. ITM(匹配分类):
python
# 判断图文是否匹配
combined = cross_attention(image_features, text_features)
logits = classifier(combined) # [匹配, 不匹配]
loss_itm = bce_loss(logits, label)
# 正样本:真实配对
# 负样本:随机配对3. LM(生成字幕):
python
# 自回归生成
text_decoder_input = [image_features, caption_prefix]
generated_caption = text_decoder.generate(text_decoder_input)
loss_lm = cross_entropy_loss(generated_caption, target_caption)BLIP 的创新:CapFilt(字幕过滤):
问题:
网络爬取的图文对质量参差不齐
很多文本描述不准确
BLIP 解决方案:
1. 用 BLIP 模型生成新字幕(Caption)
2. 用 BLIP 模型过滤低质量数据(Filter)
3. 用清洗后的数据重新训练(Bootstrap)
流程:
原始数据 → BLIP-Base 生成字幕
→ 过滤低质量样本
→ 清洗后数据
→ 训练 BLIP-Large
效果:
数据质量提升 → 模型性能提升性能对比(COCO):
| 模型 | 图像字幕(CIDEr) | 图文检索(R@1) | VQA准确率 |
|---|---|---|---|
| CLIP | - | 58.4% | - |
| ALBEF | 131.4 | 73.1% | 74.5% |
| BLIP | 136.7 | 82.3% | 78.3% |
面试话术:
"CLIP 是理解型模型,BLIP 是理解+生成型。BLIP 用三个训练目标(ITC+ITM+LM)统一了检索和生成任务。特别是 CapFilt 机制,用模型自己清洗数据,形成正反馈循环。"
