英文

BLIP-2,Flan T5-xl,仅预训练

BLIP-2模型,利用 Flan T5-xl (一个大型语言模型)。它由李等人在 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 的论文中介绍,并于 this repository 首次发布。

免责声明:发布BLIP-2的团队没有为此模型编写模型卡片,因此这个模型卡片是由Hugging Face团队编写的。

模型描述

BLIP-2由3个模型组成:类似CLIP的图像编码器,查询变换器(Q-Former)和一个大型语言模型。

作者从预训练的检查点中初始化图像编码器和大型语言模型的权重,并在训练查询变换器时将它们保持冻结。查询变换器是一种类似BERT的Transformer编码器,将一组“查询令牌”映射到查询嵌入,它们连接了图像编码器的嵌入空间和大型语言模型的嵌入空间。

模型的目标很简单,就是根据查询嵌入和先前的文本预测下一个文本标记。

这使得模型可以用于以下任务:

  • 图像字幕
  • 视觉问答(VQA)
  • 通过将图像和先前的对话作为提示输入模型进行类似聊天的对话

直接使用和下游使用

您可以使用原始模型根据图像和可选文本进行条件文本生成。查看 model hub 查询您感兴趣的任务的微调版本。

偏见、风险、限制和道德考虑

BLIP2-FlanT5使用现成的Flan-T5作为语言模型。它继承了来自 Flan-T5 的相同风险和限制:

包括Flan-T5在内的语言模型可能被用于以有害的方式生成语言,根据Rae等人(2021)的说法。在没有事先评估与应用程序特定的安全性和公平性问题相关的情况下,不应直接使用Flan-T5在任何应用程序中。

BLIP2在从互联网收集的图像文本数据集(例如 LAION )上进行了微调。因此,模型本身可能容易生成类似的不适当内容或复制底层数据中的固有偏见。

BLIP2尚未在真实世界应用中进行测试。不应直接部署在任何应用程序中。研究人员应首先仔细评估模型在特定环境中的安全性和公平性。

如何使用

有关代码示例,请参阅 documentation

在CPU上运行模型 点击展开
import requests
from PIL import Image
from transformers import BlipProcessor, Blip2ForConditionalGeneration

processor = BlipProcessor.from_pretrained("Salesforce/blip2-flan-t5-xl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xl")

img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt")

out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
在GPU上运行模型 在完全精度下 点击展开
# pip install accelerate
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration

processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xl", device_map="auto")

img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda")

out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
在半精度(float16)下 点击展开
# pip install accelerate
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration

processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xl", torch_dtype=torch.float16, device_map="auto")

img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda", torch.float16)

out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
在8位精度(int8)下 点击展开
# pip install accelerate bitsandbytes
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration

processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xl", load_in_8bit=True, device_map="auto")

img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda", torch.float16)

out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))