模型简介
模型特点
模型能力
使用案例
语言:
- 英语
- 多语言 许可证: MIT 标签:
- 视觉
- 图像转文本
- 图像描述生成
- 视觉问答 管道类型: 图像转文本 推理: 否 数据集:
- Gregor/mblip-train
mBLIP BLOOMZ-7B
这是我们工作mBLIP: Efficient Bootstrapping of Multilingual Vision-LLMs的模型检查点。
模型描述
mBLIP是一个BLIP-2模型,由3个子模型组成:一个视觉变换器(ViT)、一个查询变换器(Q-Former)和一个大型语言模型(LLM)。
Q-Former和ViT均由一个英语BLIP-2检查点(blip2-flan-t5-xl)初始化,然后使用多语言任务混合重新对齐到多语言LLM(bloomz-7b1)。
这使得该模型可以用于以下任务:
- 图像描述生成
- 视觉问答(VQA)
支持96种语言。
语言
mBLIP在以下96种语言上进行了训练:
南非荷兰语、阿姆哈拉语、阿拉伯语、阿塞拜疆语、白俄罗斯语、保加利亚语、孟加拉语、加泰罗尼亚语、宿务语、捷克语、威尔士语、丹麦语、德语、希腊语、英语、世界语、西班牙语、爱沙尼亚语、巴斯克语、波斯语、芬兰语、菲律宾语、法语、爱尔兰语、苏格兰盖尔语、加利西亚语、古吉拉特语、豪萨语、印地语、海地克里奥尔语、匈牙利语、亚美尼亚语、印尼语、伊博语、冰岛语、意大利语、希伯来语、日语、爪哇语、格鲁吉亚语、哈萨克语、高棉语、卡纳达语、韩语、库尔德语、吉尔吉斯语、卢森堡语、老挝语、立陶宛语、拉脱维亚语、马尔加什语、毛利语、马其顿语、马拉雅拉姆语、蒙古语、马拉地语、马来语、马耳他语、缅甸语、尼泊尔语、荷兰语、挪威语、尼扬贾语、旁遮普语、波兰语、普什图语、葡萄牙语、罗马尼亚语、俄语、信德语、僧伽罗语、斯洛伐克语、斯洛文尼亚语、萨摩亚语、修纳语、索马里语、阿尔巴尼亚语、塞尔维亚语、塞索托语、巽他语、瑞典语、斯瓦希里语、泰米尔语、泰卢固语、塔吉克语、泰语、土耳其语、乌克兰语、乌尔都语、乌兹别克语、越南语、科萨语、意第绪语、约鲁巴语、中文、祖鲁语
直接使用与下游使用
您可以在零样本设置中使用原始模型进行给定图像和提示文本的条件文本生成,或者针对下游应用进行微调。我们强烈建议在微调时对LLM应用LoRA,并使用bf16作为数据类型——标准的fp16可能导致NaN损失。
有关用于训练和微调此模型的代码,请参见我们的仓库。
使用批量输入时,请使用左填充!
偏见、风险、限制与伦理考量
虽然mBLIP理论上可以处理多达100种语言,但实际上,我们预期在高资源语言(如英语、德语、西班牙语等)中提示时效果最佳。
mBLIP继承了初始化模型的风险、限制和偏见。mBLIP尚未在现实世界应用中进行测试。不应直接部署在任何应用中。研究人员应首先仔细评估模型在特定部署环境中的安全性和公平性。
使用方法
关于代码示例,我们参考BLIP-2的文档。
在CPU上运行模型
点击展开
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Gregor/mblip-bloomz-7b")
model = Blip2ForConditionalGeneration.from_pretrained("Gregor/mblip-bloomz-7b")
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上运行模型
全精度
点击展开
# pip install accelerate
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Gregor/mblip-bloomz-7b")
model = Blip2ForConditionalGeneration.from_pretrained("Gregor/mblip-bloomz-7b", 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))
半精度(bfloat16
)
点击展开
# pip install accelerate
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Gregor/mblip-bloomz-7b")
model = Blip2ForConditionalGeneration.from_pretrained("Gregor/mblip-bloomz-7b", torch_dtype=torch.bfloat16, 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.bfloat16)
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
8位精度(int8
)
重要提示: 论文结果仅对LLM权重使用int8,而此处加载所有权重到int8。我们发现这会略微降低结果质量,但目前HuggingFace不支持仅对部分模型使用int8。
点击展开
# pip install accelerate bitsandbytes
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Gregor/mblip-bloomz-7b")
model = Blip2ForConditionalGeneration.from_pretrained("Gregor/mblip-bloomz-7b", 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.bfloat16)
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
4位精度(int4
)
重要提示: 论文结果仅对LLM权重使用int4,而此处加载所有权重到int8。我们发现这会略微降低结果质量,但目前HuggingFace不支持仅对部分模型使用int4。
点击展开
# pip install accelerate bitsandbytes
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Gregor/mblip-bloomz-7b")
model = Blip2ForConditionalGeneration.from_pretrained("Gregor/mblip-bloomz-7b",
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=False,
bnb_4bit_compute_dtype=torch.bfloat16,
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.bfloat16)
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
引用
如果您使用我们的模型,请引用以下内容:
@article{geigle2023mblip,
author = {Gregor Geigle and
Abhay Jain and
Radu Timofte and
Goran Glava\v{s}},
title = {mBLIP: Efficient Bootstrapping of Multilingual Vision-LLMs},
journal = {arXiv},
volume = {abs/2307.06930},
year = {2023},
url = {https://arxiv.org/abs/2307.06930},
eprinttype = {arXiv},
eprint = {2307.06930},
}








