语言: 英语
许可证: MIT
标签:
- 视觉
- 图像转文本
- 图像描述生成
- 视觉问答
流水线任务: 图像转文本
推理: 不支持
BLIP-2,Flan T5-xxl,仅预训练版本
BLIP-2模型,基于Flan T5-xxl(一种大型语言模型)。
该模型由Li等人在论文BLIP-2: 利用冻结图像编码器与大型语言模型引导语言-图像预训练中提出,并首次发布于此代码库。
免责声明:发布BLIP-2的团队未为此模型编写模型卡片,因此本卡片由Hugging Face团队撰写。
模型描述
BLIP-2包含三个组件:类似CLIP的图像编码器、查询转换器(Q-Former)及大型语言模型。
作者从预训练检查点初始化图像编码器和大型语言模型的权重并保持冻结,同时训练查询转换器——一种类似BERT的Transformer编码器,将一组“查询令牌”映射为查询嵌入,以弥合图像编码器与大型语言模型之间的嵌入空间差异。
模型的目标是仅基于查询嵌入和先前文本预测下一个文本令牌。

这使得模型可用于以下任务:
- 图像描述生成
- 视觉问答(VQA)
- 类聊天对话(通过将图像和先前对话作为提示输入模型)
直接使用与下游应用
您可将原始模型用于给定图像及可选文本的条件文本生成。访问模型中心寻找针对特定任务微调的版本。
偏见、风险、局限性与伦理考量
BLIP2-FlanT5直接采用现成的Flan-T5作为语言模型,继承了Flan-T5的相同风险与限制:
根据Rae等(2021)的研究,包括Flan-T5在内的语言模型可能被有害地用于文本生成。在未针对具体应用进行安全性和公平性评估前,不应直接使用Flan-T5。
BLIP2在从互联网收集的图文数据集(如LAION)上微调,因此模型本身可能生成不当内容或反映底层数据中的固有偏见。
BLIP2尚未在真实场景中测试,不应直接部署于任何应用。研究人员需首先根据具体部署环境审慎评估模型的安全性与公平性。
使用方法
代码示例请参阅文档,或按需参考以下片段:
在CPU上运行
点击展开
import requests
from PIL import Image
from transformers import BlipProcessor, Blip2ForConditionalGeneration
processor = BlipProcessor.from_pretrained("Salesforce/blip2-flan-t5-xxl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xxl")
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 = "图片中有多少只狗?"
inputs = processor(raw_image, question, return_tensors="pt")
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
在GPU上运行
全精度模式
点击展开
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xxl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xxl", 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 = "图片中有多少只狗?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda")
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
半精度模式(float16)
点击展开
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xxl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xxl", 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 = "图片中有多少只狗?"
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)
点击展开
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-flan-t5-xxl")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-flan-t5-xxl", 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 = "图片中有多少只狗?"
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))