Post

Blip in details

Blip in details

Blip架构

pc

(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 的方式写句子。


总结一张图理解流程:

  1. Image Encoder:把图片切块 → 数字化表示
  2. Text Encoder(不看图):理解句子 → 和图片做对比(ITC)
  3. Image-Grounded Text Encoder(看图):结合图片 + 句子细节 → 更深层理解(ITM)
  4. 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.