BLIP
CLIP 用对比学习证明了大规模图文对预训练的威力,但它有一个根本性的局限:只能编码,不能生成。CLIP 的双塔架构在图文检索上表现优异,却无法完成 image captioning 或 VQA 这类需要语言生成的任务。
更深层的问题是:当时的 VLP 模型面临一个"二选一"困境——encoder-only 模型(如 CLIP)擅长理解但不擅长生成;encoder-decoder 模型(如 SimVLM)擅长生成但在理解任务上不如纯编码器。能不能用一个模型同时做好这两件事?
BLIP 给出了一个优雅的答案。
BLIP 的核心创新是 MED(Multimodal Mixture of Encoder-Decoder)。它不是三个独立模型,而是一个共享参数的多任务架构,通过切换 self-attention 的 mask 来实现三种功能模式:
模式一:Unimodal Encoder
标准 BERT 式文本编码器。文本和图像分别独立编码,用 ITC(Image-Text Contrastive)损失对齐视觉-语言表征空间。这一模式和 CLIP 的思路一致——让匹配的图文对在嵌入空间中更接近。
模式二:Image-Grounded Text Encoder
在 self-attention 和 FFN 之间插入 cross-attention 层,让文本能够"看到"图像特征。用 ITM(Image-Text Matching)损失做细粒度图文匹配——判断一张图和一段文本是否真正匹配,而非仅仅语义相近。
模式三:Image-Grounded Text Decoder
将双向 self-attention 替换为因果 self-attention(causal mask),变成自回归解码器。用 LM(Language Modeling)损失做条件文本生成。这是"理解"到"生成"的关键一步。
三个目标的协同
| 目标 | 激活模式 | 作用 |
|---|---|---|
| ITC | Unimodal Encoder | 对齐视觉-语言表征空间(全局对齐) |
| ITM | Image-Grounded Text Encoder | 细粒度图文匹配(局部对齐) |
| LM | Image-Grounded Text Decoder | 条件文本生成能力 |
三者协同的逻辑是:ITC 先建立粗粒度的全局对齐,ITM 在此基础上做细粒度匹配,LM 则利用前两者学到的视觉-语言对应关系来生成文本。
BLIP 解决的第二个问题是数据质量。Web 上爬取的图文对噪声严重——很多文本描述与图片内容毫不相关。直接用这些噪声数据训练是次优的。
CapFilt(Captioning and Filtering)的核心思想是自举:用预训练好的模型来改进训练数据,再用改进后的数据训练更好的模型。
两个角色的分工
- Captioner:用 LM 目标微调 MED 的 decoder 模式。给它一张 web 图像,它生成一条合成 caption。这条 caption 可能比原始 web 文本更准确描述图片内容。
- Filter:用 ITC+ITM 微调 MED 的 encoder 模式。给它一条图像-文本对,它判断文本是否与图像匹配。噪声文本会被过滤掉。
关键工程细节:Captioner 和 Filter 必须独立训练。如果共享参数,Filter 会对自己生成的 caption 产生 confirmation bias——因为它"知道"这些 caption 来自自己的模型,倾向认为它们是好的,导致噪声不被过滤。
数据流水线
最终训练集 = 过滤后的原始 web caption + Captioner 生成的合成 caption + 人工标注数据(如 COCO)。这个数据集比原始 web 数据干净得多,训练出的模型自然更好。
图文检索(COCO finetuned)
| 模型 | 数据量 | TR@1 | IR@1 |
|---|---|---|---|
| ALBEF | 14M | 77.6 | 60.7 |
| BLIP | 14M | 80.6 (+3.0) | 63.1 (+2.4) |
| BLIP ViT-L | 129M | 82.4 | 65.1 |
零样本检索(Flickr30K)
| 模型 | TR@1 | IR@1 |
|---|---|---|
| CLIP (400M) | 88.0 | 68.7 |
| BLIP (14M) | 94.8 | 84.9 |
| BLIP ViT-L (129M) | 96.7 | 86.7 |
注意数据效率的差距:BLIP 用 14M 数据在 Flickr30K 上达到 94.8% TR@1,远超 CLIP 用 400M 数据达到的 88.0%。这说明 CapFilt 的数据质量提升比单纯堆数据量有效得多。
VQA
| 模型 | test-dev | test-std |
|---|---|---|
| ALBEF (14M) | 75.84 | 76.04 |
| BLIP (14M) | 77.54 (+1.70) | 77.62 |
Image Captioning(NoCaps overall)
| 模型 | CIDEr | SPICE |
|---|---|---|
| BLIP (14M) | 105.1 | 14.4 |
| BLIP CapFilt-L (129M) | 109.6 | 14.7 |
零样本视频迁移
BLIP 在视频任务上展现了惊人的零样本迁移能力,尽管它只用图像训练:
- MSRVTT text-to-video retrieval: 43.3 R@1(零样本超越所有微调方法)
- MSRVTT-QA: 19.2 acc(零样本)
BLIP 的贡献可以从两个维度理解:
架构维度:BLIP 是第一个在单一框架内统一理解(ITC/ITM)和生成(LM)的 VLP 模型。之前的模型要么做理解(CLIP),要么做生成(SimVLM),BLIP 证明了共享参数的多任务学习可以同时做好两者。它的 MED 架构直接启发了后续 BLIP-2 的 Q-Former 设计——Q-Former 本质上是 MED 思想在"冻结大模型"约束下的重新实现。
数据维度:CapFilt 引入了"用模型改进数据,用数据训练模型"的自举范式。这个思想不仅影响了后续 BLIP-2 的数据策略,也成为了 VLP 领域的标准操作——用已有模型生成合成数据来训练新模型。
一个自然的疑问是:既然 MED 已经能同时做理解和生成,为什么还需要 BLIP-2?答案在于效率。BLIP 的 MED 仍然需要端到端训练整个模型,当视觉编码器和语言模型都变得越来越大时,计算成本变得不可接受。BLIP-2 的核心贡献就是解决这个效率问题。
把 BLIP 讲清楚,关键是不要把 MED 理解成普通 encoder-decoder。它更像一个共享底座上的三种运行模式:当任务需要全局对齐时,模型退化为双塔式编码器;当任务需要判断图文是否细节一致时,模型打开 cross-attention,让文本 token 直接读取视觉特征;当任务需要生成 caption 或回答时,模型把文本 self-attention 切换成因果结构,从左到右生成语言。
这种设计的价值在于,理解任务和生成任务不再各自训练一套模型。ITC 提供全局语义空间,ITM 提供局部图文一致性,LM 提供语言生成能力。三个目标之间并不是简单并列,而是形成一种递进关系:先知道图和文本是否大体相关,再知道哪些局部细节对应,最后才能围绕图像生成可靠文本。
CapFilt 则补上了数据侧的缺口。web caption 的问题不是“有一点噪声”,而是很多文本根本不是图像内容描述,可能是广告、导航、文件名或上下文片段。BLIP 的做法是让 Captioner 重新描述图像,再让 Filter 判断原始 caption 和合成 caption 是否可信。最终训练集由人工标注、过滤后的原始文本和合成文本共同构成。
graph LR A[Web 图文对] --> B[Captioner 生成 caption] A --> C[Filter 过滤噪声] B --> D[合成 caption] C --> E[保留可信原始 caption] D --> F[新训练集] E --> F G[COCO 人工标注] --> F F --> H[训练最终 BLIP]
实验结果也支持这个判断。Flickr30K zero-shot retrieval 中,BLIP 用 14M 数据达到 94.8 TR@1,而 CLIP 用 400M 数据为 88.0。这不是说数据规模不重要,而是说明“干净且任务相关的数据”可以抵消大量噪声规模的优势。BLIP 的局限也很明确:CapFilt 只做一轮自举,每张图只生成一条 caption,视频任务仍依赖简单帧采样,没有显式时序建模。
第一,BLIP 并不是简单把 CLIP 和 captioning 模型拼在一起。它真正重构的是任务接口:同一套视觉语言表示可以被用于检索、匹配和生成,区别只在 attention mask 和训练目标。这种设计让后续模型可以把“理解任务”和“生成任务”放进同一条预训练流水线中,而不是每个任务独立建模。
第二,CapFilt 的意义不只是数据增强,而是数据治理。传统思路面对 web 噪声时往往选择扩大规模,BLIP 则证明可以用模型本身参与数据清洗。Captioner 生成新的语言监督,Filter 控制噪声进入训练集的比例,这让模型训练进入一个闭环:模型改造数据,数据再改造模型。
第三,BLIP 的局限也正是 BLIP-2 的动机。MED 虽然统一,但仍然是一个需要训练的大模型组件。当 LLM 时代到来后,重新训练语言能力变得不划算。更自然的做法是冻结现成 LLM,只训练视觉到语言的桥。BLIP-2 可以看作 BLIP 思想在大模型时代的参数高效版本。


按照新版 read-article 协议,这里补入论文原始图。MiniMax 对图 A 的理解确认:该图展示的是 MED 架构而非 CapFilt,核心模块包括 Image Encoder、Unimodal Text Encoder、Image-grounded Text Encoder 和 Image-grounded Text Decoder;三个训练目标分别对应 ITC、ITM 与 LM。图 B 则用于解释数据自举流程,不能用代码示意图替代。
参考来源
- Li, J. et al. "BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation." ICML 2022. arXiv:2201.12086
- 代码仓库: salesforce/BLIP