Blip in details
Blip in details
Blip架构
(1)Image Encoder 是干嘛的?
- 就是把图片变成一串“数字表达”,类似我们读一本书时把每个字变成我们能理解的意思。
- 它用的是像 ViT 这种模型,把图片像切豆腐块一样切成很多小块(patch),然后变成一个个“图像token”。
- 最终它会变成一个形状像
(图片数, token数, 每个token的维度)
的东西,就像 NLP 中的(batch_size, seq_len, dim)
。
➡️ 总结一句话:把图片切成很多块,每一块变成一个token,送给后面的模型处理。
(2)Text Encoder 是干嘛的?
- 跟 BERT 一样,是个经典的文本理解模型。
- 会在文本开头加个特殊的
[CLS]
token,然后用 self-attention 来让每个词都看看上下文,理解整句话。 - 最终,输出每个词的表示,尤其是
[CLS]
的表示可以代表整句话的意思。
然后我们会:
- 把图片的表示(来自 image encoder)
- 和文本的表示(来自 text encoder)
- 拿来做一个对比学习(Contrastive Learning)任务——ITC(Image-Text Contrastive)
就是:
匹配的图片和文字靠得近,不匹配的远一点。这就是训练目标,和 CLIP 很像!
➡️ 总结一句话:不让图片和文字“聊一聊”,各说各的,但我们看它俩说的像不像一回事。
(3)Image-Grounded Text Encoder 是干嘛的?
- 和上面的 text encoder 几乎一模一样,但多了一个关键点: → 加入了 Cross Attention,让文本在理解自己的同时,也看看图片在说什么!
- 所以这时候,每个词除了考虑上下文,还可以关注相关的图像部分。
- 这种 attention 就可以捕捉图片的哪个区域跟文字里的哪个词有关,比之前那个纯对比的要强很多,因为多了细节。
➡️ 总结一句话:这次文字和图片有互动了!互相看看、互相理解,更深入。
(4)最后一个 Text Decoder(语言模型)是干嘛的?
- 目标就是从图片和提示词出发,一步步生成句子。
- 所以模型结构变了,从原来的 BERT 那种“看全文”的方式,变成 GPT 那种“只能看前文”的方式。
- 这叫 causal self-attention:当前词只能看之前的词,不能看后面的词。
- 它的训练目标就是像 GPT 那样,一个字一个字预测下一个词,叫 自回归(auto-regressive)训练。
而且,为了节省资源,它跟前面的 encoder 共享了大部分参数,只有 attention 层不一样。
➡️ 总结一句话:现在模型不只是理解图片和文字,而是要“写”出一段文字了,用的是 GPT 的方式写句子。
总结一张图理解流程:
- Image Encoder:把图片切块 → 数字化表示
- Text Encoder(不看图):理解句子 → 和图片做对比(ITC)
- Image-Grounded Text Encoder(看图):结合图片 + 句子细节 → 更深层理解(ITM)
- Text Decoder(语言模型):输入图 + 前文 → 预测后文,生成句子
🧩 数据来源分三类:
- 🟥
w
:从网上爬的图+描述(Web),数量多但不准 - 🟩
h
:人手标的图+描述(Human),少但很准 - 🟦
s
:后面模型生成的描述(Self-generated),生成后还要筛选
现在我们讲流程,一共就五步,你就把它想成在“刷掉垃圾数据”:
✅ 步骤一:先用所有数据(好的+坏的)来训一遍模型
- 包括图文对比(ITC)
- 图文是否匹配分类(ITM)
- 让模型学着描述图片(语言模型)
🎯 目的:让模型先大概知道图文之间是怎么一回事。虽然有些图文是错的,但也能学到点东西。
✅ 步骤二:只用人工标注的好数据 h
,把模型“拉一把”
- 微调 ITC 和 ITM,让它更会分:这张图和这句话到底像不像是一对
- 微调 decoder,让它更会“写图配文”
🎯 现在模型更聪明了,判断准确率更高!
✅ 步骤三:让模型去刷掉 Web 上的“错图错文”
- 拿上面调好的 ITC/ITM 模型
- 对每一对
Iw + Tw
做判断:- 模型说“这对图文是对的” → 保留 ✅
- 模型说“这对图文不配” → 丢掉 ❌
🎯 这叫 Filter,刷掉了很多垃圾样本。
✅ 步骤四:图片没配好文字?那模型自己写!
- 对于图片
Iw
,我们把原来的烂描述Tw
丢掉 - 用 decoder 给这张图重新生成一段新描述
Ts
- 然后再用 ITC/ITM 去判断:
Iw + Ts
是一对 → 加入训练集 ✅- 不像一对 → 丢掉 ❌
🎯 这叫 Bootstrapping,模型自己写,自己判!
✅ 步骤五:整理收获,组成新数据集
最终我们得到三类高质量数据:
数据来源 | 内容 | 获取方式 |
---|---|---|
🟩 高质量人工标注 | {Ih, Th} | 花钱请人标的 |
🟥 清洗后的网络图文对 | {Iw, Tw} | 通过 ITC/ITM 筛选 |
🟦 模型生成的图文对 | {Iw, Ts} | decoder 写的 + ITC/ITM 认可的 |
🎯 这些拼在一起,就成了一个有质量、成本又低的数据集!
🔁 类似 GAN 吗?
是的,有点像:
角色 | GAN 中 | 在这儿 |
---|---|---|
Generator | 生成图片 | decoder:写图的描述 |
Discriminator | 判真假 | ITC / ITM:判断图文像不像一对 |
📌 超简单总结(一句话)
先用少量靠谱数据教模型怎么“识图配文”,再用它去挑、去写更多好数据,最后得到一大堆训练材料,花的钱却不多!
This post is licensed under CC BY 4.0 by the author.