Community 计算机视觉课程文档

多模态文本生成 (BLIP)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

多模态文本生成 (BLIP)

简介

在 CLIP 发布之后,AI 社区认识到更大的数据集和对比学习在深度学习中的巨大潜力。该领域的一项重大进展是 BLIP (Bootstrapping Language-Image Pre-training),它将多模态模型的功能扩展到包括文本生成。

CapFilt:字幕和过滤

由于多模态模型需要大型数据集,它们通常必须从互联网上抓取图像和替代文本(alt-text)对。然而,alt-text 通常不能准确描述图像的视觉内容,使其成为嘈杂的信号,不利于学习视觉-语言对齐。因此,BLIP 论文引入了字幕和过滤机制(CapFilt)。它由一个深度学习模型组成,该模型过滤掉嘈杂的对,另一个模型为图像创建字幕。这两个模型首先使用人工注释数据集进行微调。他们发现,使用 CapFit 清理数据集比仅使用网络数据集产生更优越的性能。有关此过程的更多详细信息,请参阅 BLIP 论文

BLIP 架构和训练

BLIP 架构结合了视觉编码器和多模态混合编码器-解码器 (MED),从而能够灵活处理视觉和文本数据。其结构如下图所示(相同颜色的块共享参数)

  • Vision Transformer (ViT): 这是一个普通的视觉 Transformer,具有自注意力、前馈块和用于嵌入表示的 [CLS] 标记。
  • 单模态文本编码器: 类似于 BERT 的架构,它使用 [CLS] 标记进行嵌入,并采用像 CLIP 这样的对比损失,用于对齐图像和文本表示。
  • 图像-接地文本编码器: 这将 [CLS] 标记替换为 [Encode] 标记。交叉注意力层实现了图像和文本嵌入的集成,从而创建了多模态表示。它采用线性层来评估图像-文本对的同余性。
  • 图像-接地文本解码器: 将双向自注意力替换为因果自注意力,此解码器通过交叉熵损失以自回归方式进行训练,用于字幕生成或回答视觉问题等任务。

BLIP 的架构将视觉编码器与多模态混合编码器-解码器组件集成在一起,从而实现了高级文本和图像处理。这种设计使其能够灵活地处理各种任务,从对齐图像-文本对到生成字幕和回答视觉问题。

示例用例:BLIP-2

继 BLIP 取得成功之后,其创建者 Salesforce 推出了增强迭代版本 BLIP-2。 BLIP-2 论文Hugging Face 文档 中详细介绍了 BLIP-2 的进步和功能。 在这里,我们利用 BLIP-2 进行视觉问答。

from PIL import Image
import requests
from transformers import Blip2Processor, Blip2ForConditionalGeneration
import torch

device = "cuda" if torch.cuda.is_available() else "cpu"

processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained(
    "Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16
)
model.to(device)
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

prompt = "Question: How many remotes are there? Answer:"
inputs = processor(images=image, text=prompt, return_tensors="pt").to(
    device, torch.float16
)
outputs = model.generate(**inputs)
text = processor.tokenizer.batch_decode(outputs, skip_special_tokens=True)
print(text)

此代码片段说明了 BLIP-2 在视觉问答中的应用。使用提供的 Gradio 应用程序,尝试更复杂的查询或进一步探索此功能

结论

BLIP 标志着多模态文本生成的一个重要里程碑,它利用 CLIP 的优势创建了一个强大的模型。它强调了数据集质量胜于数量的重要性,为多模态学习的进步做出了贡献。有关更多详细信息,请参阅 BLIP 论文BLIP-2 论文 以及 Hugging Face 文档中的 BLIPBLIP-2

< > 在 GitHub 上更新