许可证:Apache-2.0
数据集:
- HuggingFaceM4/OBELICS
- HuggingFaceM4/the_cauldron
- HuggingFaceM4/Docmatix
- HuggingFaceM4/WebSight
语言:
- en
标签:
- 多模态
- 视觉
- 图像文本转文本
库名称:transformers
Transformers 版本:>4.46。
Idefics3
Idefics3 是一个开源的多模态模型,能够接受任意序列的图像和文本输入,并生成文本输出。该模型可以回答关于图像的问题、描述视觉内容、基于多张图像创作故事,或者在没有视觉输入的情况下作为纯语言模型运行。它在 Idefics1 和 Idefics2 的基础上进行了改进,显著提升了 OCR、文档理解和视觉推理的能力。
我们以 Apache 2.0 许可证发布模型检查点。
模型概述
用途
Idefics3-8B
可用于执行多模态(图像+文本)任务的推理,输入由一个文本查询和一张(或多张)图像组成。文本和图像可以任意交错排列。这包括图像描述、视觉问答等任务。该模型不支持图像生成。
Idefics3-8B 的训练仅涉及监督微调阶段,未进行 RLHF 对齐。因此,模型可能会生成简短的回答,或者需要多次提示才能完全满足用户需求。在助手的回答前添加前缀(如“让我们一步步解决”)已被证明能有效影响输出结果。
如需在特定任务上微调 Idefics3-8B
,我们提供了微调教程。
其他适用于 Idefics2 的微调资源(可轻松适配至 Idefics3):
技术总结
Idefics3 相比 Idefics2 有显著提升,尤其在文档理解任务中表现突出。它是各种用例特定微调的强大基础。
模型 |
MMMU (验证集) |
MathVista (测试集) |
MMStar (验证集) |
DocVQA (测试集) |
TextVQA (验证集) |
Idefics2-8B |
45.2 |
52.2 |
49.5 |
74.0 |
73.0 |
Idefics3-8B |
46.6 |
58.4 |
55.9 |
87.7 |
74.9 |
Idefics3 相比 Idefics2 的主要改进:
- 使用 169 个视觉标记编码 364x364 大小的图像。每张图像被分割为最多 364x364 的子图像,分别编码。
- 在微调数据集中,我们扩展了 The Cauldron 并新增了多个数据集,包括 Docmatix。这些数据集将很快推送到 The Cauldron 的同一仓库中(待完成)。
更多模型训练细节请参阅我们的技术报告。
快速开始
以下代码片段展示了如何使用 Idefics3-8B
进行生成。
import requests
import torch
from PIL import Image
from io import BytesIO
from transformers import AutoProcessor, AutoModelForVision2Seq
from transformers.image_utils import load_image
DEVICE = "cuda:0"
image1 = load_image("https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg")
image2 = load_image("https://cdn.britannica.com/59/94459-050-DBA42467/Skyline-Chicago.jpg")
image3 = load_image("https://cdn.britannica.com/68/170868-050-8DDE8263/Golden-Gate-Bridge-San-Francisco.jpg")
processor = AutoProcessor.from_pretrained("HuggingFaceM4/Idefics3-8B-Llama3")
model = AutoModelForVision2Seq.from_pretrained(
"HuggingFaceM4/Idefics3-8B-Llama3", torch_dtype=torch.bfloat16
).to(DEVICE)
messages = [
{
"role": "user",
"content": [
{"type": "image"},
{"type": "text", "text": "这张图片中我们看到了什么?"},
]
},
{
"role": "assistant",
"content": [
{"type": "text", "text": "在这张图片中,我们可以看到纽约市,尤其是自由女神像。"},
]
},
{
"role": "user",
"content": [
{"type": "image"},
{"type": "text", "text": "那这张图片呢?"},
]
},
]
prompt = processor.apply_chat_template(messages, add_generation_prompt=True)
inputs = processor(text=prompt, images=[image1, image2], return_tensors="pt")
inputs = {k: v.to(DEVICE) for k, v in inputs.items()}
generated_ids = model.generate(**inputs, max_new_tokens=500)
generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True)
print(generated_texts)
文本生成推理
待完成。
模型优化
如果 GPU 允许,我们建议首先以半精度(torch.float16
或 torch.bfloat16
)加载(并运行推理)。
model = AutoModelForVision2Seq.from_pretrained(
"HuggingFaceM4/Idefics3-8B-Llama3",
+ torch_dtype=torch.bfloat16,
).to(DEVICE)
视觉编码器效率
初始化处理器时(AutoProcessor.from_pretrained
),可以通过添加 size= {"longest_edge": N*364}
来选择图像默认缩放的分辨率,其中 N
为期望值。
实践中 N=4
效果最佳(默认值),但对于超大图像,可以尝试 N=5
。
这将影响传递给语言模型的视觉标记数量。
如果 GPU 内存受限,可以降低 N
,例如选择 N=3
或 N=2
,尤其适用于低分辨率图像。
使用 Flash-attention 2 加速生成
点击展开
首先确保安装 `flash-attn`。参考 [Flash Attention 原始仓库](https://github.com/Dao-AILab/flash-attention) 进行安装。只需将上述代码片段修改为:
model = AutoModelForVision2Seq.from_pretrained(
"HuggingFaceM4/Idefics3-8B-Llama3",
+ torch_dtype=torch.bfloat16,
+ _attn_implementation="flash_attention_2",
).to(DEVICE)
滥用与超范围使用
在高风险场景中使用该模型超出了其设计范围。该模型不适用于对个人生计或福祉有重大影响的关键决策。模型输出的内容可能看似真实但未必正确。超范围使用包括:
- 用于评估或评分个人,如就业、教育或信用评分
- 用于关键自动决策、生成事实内容、创建可靠摘要或必须正确的预测
故意将模型用于危害、侵犯人权或其他恶意活动属于滥用行为。包括:
- 垃圾信息生成
- 虚假信息和影响力操作
- 诋毁和诽谤
- 骚扰和虐待
- 欺骗
- 未经同意的冒充和模仿
- 未经同意的监控
许可证
该模型基于两个预训练模型构建:google/siglip-so400m-patch14-384 和 meta-llama/Meta-Llama-3.1-8B-Instruct。我们以 Apache 2.0 许可证发布 Idefics3 检查点。
引用
BibTeX:
@misc{laurençon2024building,
title={Building and better understanding vision-language models: insights and future directions.},
author={Hugo Laurençon and Andrés Marafioti and Victor Sanh and Léo Tronchon},
year={2024},
eprint={2408.12637},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
致谢
感谢 @andito 和 @amyeroberts 在 Transformers 集成中的帮助。