许可证:Apache-2.0
语言:
📰 最新动态
📌 [2024年8月19日] xGen-MM-v1.5版本发布:
模型描述
我们很高兴宣布将BLIP系列升级并更名为XGen-MM,以更好地与Salesforce统一的XGen大模型计划对齐!此次更名标志着我们在前沿多模态技术开发中的重要进展。
XGen-MM
是Salesforce AI Research开发的最新多模态大模型(LMM)系列。该系列基于BLIP
的成功设计,通过基础性增强实现了更强大、更优越的模型架构。
这些模型在大规模高质量图像描述数据集和交错图文数据上进行了训练。XGen-MM的主要特点包括:
- 预训练基础模型
xgen-mm-phi3-mini-base-r-v1
在5B参数规模下达到最先进性能,并展现出强大的上下文学习能力。
- 指令微调模型
xgen-mm-phi3-mini-instruct-r-v1
在5B参数规模的开源/闭源视觉语言模型中表现最佳。
xgen-mm-phi3-mini-instruct-r-v1
支持灵活的高分辨率图像编码与高效视觉标记采样。
本模型仅供研究使用,技术细节将在后续技术报告中公布。
性能结果
预训练(未指令微调的基础模型)
模型 |
样本数 |
COCO (验证集) |
NoCaps (验证集) |
TextCaps (验证集) |
OKVQA (验证集) |
TextVQA (验证集) |
VizWiz (测试集) |
VQAv2 (测试集) |
Flamingo-3B |
4 |
85.0 |
- |
- |
43.3 |
32.7 |
34 |
53.2 |
|
8 |
90.6 |
- |
- |
44.6 |
32.4 |
38.4 |
55.4 |
MM1-3B |
0 |
73.5 |
55.6 |
63.3 |
26.1 |
29.4 |
15.6 |
46.2 |
|
4 |
112.3 |
99.7 |
84.1 |
48.6 |
45.3 |
38.0 |
57.9 |
|
8 |
114.6 |
104.7 |
88.8 |
48.4 |
44.6 |
46.4 |
63.6 |
xgen-mm-phi3-mini-base-r-v1 (本模型) |
0 |
81.7 |
80.2 |
60.7 |
26.5 |
36.0 |
21.2 |
48.1 |
|
4 |
110.5 |
101.7 |
84.6 |
49.2 |
46.1 |
38.4 |
63.9 |
|
8 |
112.1 |
104.4 |
87.7 |
49.1 |
46.4 |
44.3 |
63.8 |
指令微调后性能
模型 |
SEED-IMG |
MMBench(开发集) |
MME总分 |
MME感知 |
MME认知 |
MMStar |
MMMU (验证集) |
MMVet |
MathVista (精简版) |
ScienceQA (测试集) |
POPE |
AI2D |
MM1-3B-Chat |
68.8 |
67.8 |
1761 |
1482 |
279 |
- |
33.9 |
43.7 |
- |
- |
87.4 |
- |
openbmb/MiniCPM-V-2 |
67.1 |
69.6 |
1808 |
- |
- |
- |
38.2 |
- |
38.7 |
- |
- |
- |
VILA1.5-3B |
67.9 |
63.4 |
- |
1442 |
- |
- |
33.3 |
35.4 |
- |
69.0 |
85.9 |
- |
xtuner/llava-phi-3-mini-hf |
70.0 |
69.2 |
1790 |
1477 |
313 |
43.7 |
41.4 |
- |
- |
73.7 |
87.3 |
69.3 |
xgen-mm-phi3-mini-instruct-r-v1 (本模型) |
72.1 |
74.1 |
1827 |
1467 |
360 |
44.6 |
39.8 |
45.1 |
39.3 |
74.2 |
87.2 |
75.8 |
使用方式
from transformers import AutoModelForVision2Seq, AutoTokenizer, AutoImageProcessor
import requests
from PIL import Image
import IPython.display as display
import torch
model_name_or_path = "Salesforce/xgen-mm-phi3-mini-base-r-v1"
model = AutoModelForVision2Seq.from_pretrained(model_name_or_path, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, use_fast=True, legacy=False)
image_processor = AutoImageProcessor.from_pretrained(model_name_or_path, trust_remote_code=True)
tokenizer = model.update_special_tokens(tokenizer)
model = model.to('cuda')
tokenizer.padding_side = "left"
def apply_prompt_template(prompt, num_images=1, num_tokens_per_vis=128, in_context=False, output=None):
"""
num_tokens_per_vis: 模型视觉标记数
"""
placeholder_image_tokens = "<image placeholder>" * (num_tokens_per_vis - 1)
if in_context:
formatted_prompt = f"<image>{placeholder_image_tokens}" + f"{prompt}" + f"{output}" + "<|endofchunk|>"
else:
formatted_prompt = f"<image>{placeholder_image_tokens}"*num_images + f"{prompt}"
return formatted_prompt
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')
instruction = "用一句话描述图中的狗在做什么:"
print("==> 指令:", instruction)
print("==> 图像:")
display.display(raw_image.resize((int(raw_image.width*0.3), int(raw_image.height*0.3))))
inputs = image_processor([raw_image], return_tensors="pt")
prompt = apply_prompt_template(instruction)
language_inputs = tokenizer([prompt], return_tensors="pt")
inputs.update(language_inputs)
inputs = {name: tensor.cuda() for name, tensor in inputs.items()}
with torch.cuda.amp.autocast(dtype=torch.bfloat16):
generated_text = model.generate(**inputs,
pad_token_id=tokenizer.pad_token_id,
do_sample=False, max_new_tokens=64, top_p=None, num_beams=1,
length_penalty=1.0, repetition_penalty=3.0)
prediction = tokenizer.decode(generated_text[0], skip_special_tokens=True)
print("==> 预测结果:", prediction)
print("-"*120)
更多完整示例请参见演示笔记本,其中提供了零样本和少样本的应用案例。
可复现性说明
我们的指令微调评估基于VLMEvalKit工具包,修复了与官方基准(如LLM评判API)的若干不一致问题。开发过程中发现,输入图像的原始分辨率在某些情况下会显著影响模型输出。
偏差、风险与限制
主要数据源来自互联网(包括网页、图库网站和研究社区发布的精选数据集),我们已排除已知存在CSAM问题的数据(如LAION)。模型可能继承原始数据源的偏见,以及LLM和商业API的偏见。强烈建议用户在下游应用前评估安全性与公平性。
伦理声明
本次发布仅限学术研究用途。我们的模型、数据集和代码并非为所有下游场景设计或评估。强烈建议用户在部署前评估准确性、安全性和公平性风险。鼓励用户考虑AI的通用局限性,遵守适用法律,并为高风险场景制定最佳实践(当错误或滥用可能严重影响人们生活、权利或安全时)。使用指南请参考我们的AUP和AI AUP政策。
许可证
代码和权重基于Apache-2.0许可证发布。训练数据的版权归原始数据所有者所有。
代码致谢
LAVIS
openflamingo
VLMEvalKit
引用文献
@misc{xue2024xgenmmblip3familyopen,
title={xGen-MM (BLIP-3): 开源多模态大模型家族},
author={Le Xue等},
year={2024},
eprint={2408.08872},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2408.08872},
}
故障排除
- 若缺少依赖包,请安装以下组件:
pip install torch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 --index-url https://download.pytorch.org/whl/cu121
pip install open_clip_torch==2.24.0
pip install einops
pip install einops-exts
pip install transformers==4.41.1
更新日志
- 2024年5月24日
- 升级代码库以兼容
transformers==4.41.1
版本