许可证:apache-2.0
数据集:
- HuggingFaceM4/OBELICS
- laion/laion-coco
- 维基百科
- facebook/pmd
- pixparse/idl-wds
- pixparse/pdfa-eng-wds
- wendlerc/RenderedText
- HuggingFaceM4/the_cauldron
- teknium/OpenHermes-2.5
- GAIR/lima
- databricks/databricks-dolly-15k
- meta-math/MetaMathQA
- TIGER-Lab/MathInstruct
- microsoft/orca-math-word-problems-200k
- camel-ai/math
- AtlasUnified/atlas-math-sets
- tiedong/goat
- Lin-Chen/ShareGPT4V
- jxu124/llava_conversation_58k
语言:
- 英语
标签:
- 多模态
- 视觉
- 图像文本转文本
[!警告]
Idefics2 在 Transformers
版本 4.41.0 至 4.43.3(含)之间无法正常工作。请参阅问题 https://github.com/huggingface/transformers/issues/32271 和修复 https://github.com/huggingface/transformers/pull/32275。
[!重要]
截至 2024 年 4 月 18 日,Idefics2 已包含在 4.40.0
版本的 Transformers PyPI 发布中。请升级您的 Transformers 版本(pip install transformers --upgrade
)。
Idefics2
Idefics2 是一个开放的多模态模型,能够接受任意序列的图像和文本输入,并生成文本输出。该模型可以回答关于图像的问题、描述视觉内容、基于多张图像创作故事,或者在没有视觉输入时单纯作为纯语言模型运行。它在 Idefics1 的基础上进行了显著改进,特别是在 OCR、文档理解和视觉推理方面的能力得到了大幅提升。
我们根据 Apache 2.0 许可证发布了 2 个检查点:
模型概述
用途
idefics2-8b-base
和 idefics2-8b
可用于执行多模态(图像+文本)任务的推理,其中输入由文本查询和一个(或多个)图像组成。文本和图像可以任意交错排列。这包括图像描述、视觉问答等任务。该模型不支持图像生成。
为了获得最佳效果,我们建议在特定用例和数据上对 idefics2-8b
进行微调。实际上,经过指令微调的模型(idefics2-8b
)在遵循用户指令方面表现更优,因此在直接使用模型或作为微调起点时应优先选择。
idefics2-8b
通常生成非常简短的答案。如果需要生成长文本,请使用 idefics2-8b-chatty
,该模型进一步针对长对话进行了微调。
作为起点,我们提供了可适应特定场景的微调代码:
技术概述
Idefics2 在其规模(80 亿参数)下与其他开放多模态模型相比表现出色,并且通常与闭源系统竞争。因此,它是各种用例特定微调的强大基础。
展开结果表格以获取更多细节。
模型 |
开放权重 |
大小 |
每张图像的标记数 |
MMMU (验证/测试) |
MathVista (测试迷你) |
TextVQA (验证) |
MMBench (测试) |
VQAv2 (测试开发) |
DocVQA (测试) |
DeepSeek-VL |
✅ |
70 亿 |
576 |
36.6/- |
36.1 |
64.4 |
73.2 |
- |
49.6 |
LLaVa-NeXT-Mistral-7B |
✅ |
70 亿 |
2880 |
35.3/- |
37.7 |
65.7 |
68.7 |
82.2 |
- |
LLaVa-NeXT-13B |
✅ |
130 亿 |
2880 |
36.2/- |
35.3 |
67.1 |
70.0 |
82.8 |
- |
LLaVa-NeXT-34B |
✅ |
340 亿 |
2880 |
51.1/44.7 |
46.5 |
69.5 |
79.3 |
83.7 |
- |
MM1-Chat-7B |
❌ |
70 亿 |
720 |
37.0/35.6 |
35.9 |
72.8 |
72.3 |
- |
- |
MM1-Chat-30B |
❌ |
300 亿 |
720 |
44.7/40.3 |
39.4 |
73.5 |
75.1 |
83.7 |
|
Gemini 1.0 Pro |
❌ |
🤷♂️ |
🤷♂️ |
47.9/- |
45.2 |
74.6 |
- |
71.2 |
88.1 |
Gemini 1.5 Pro |
❌ |
🤷♂️ |
🤷♂️ |
58.5/- |
52.1 |
73.5 |
- |
73.2 |
86.5 |
Claude 3 Haiku |
❌ |
🤷♂️ |
🤷♂️ |
50.2/- |
46.4 |
- |
- |
- |
88.8 |
|
|
|
|
|
|
|
|
|
|
Idefics1 instruct (32-shots) |
✅ |
800 亿 |
- |
- |
- |
39.3 |
- |
68.8 |
- |
|
|
|
|
|
|
|
|
|
|
Idefics2 (无图像分割) |
✅ |
80 亿 |
64 |
43.5/37.9 |
51.6 |
70.4 |
76.8 |
80.8 |
67.3 |
Idefics2 (带图像分割) |
✅ |
80 亿 |
320 |
43.0/37.7 |
51.4 |
73.0 |
76.7 |
81.2 |
74.0 |
Idefics2 相比 Idefics1 引入了多项精心设计的改进:
- 我们通过遵循 NaViT 策略,以原生分辨率(最高 980 x 980)和原生宽高比处理图像。这避免了传统计算机视觉中将图像调整为固定大小正方形的需求。此外,我们遵循 SPHINX 的策略,(可选地)允许子图像分割并传递超高分辨率图像。
- 我们通过整合需要模型转录图像或文档中文本的数据,显著提升了OCR 能力。我们还通过适当的训练数据提高了回答图表、图形和文档问题的能力。
- 我们放弃了 Idefics1 的架构(门控交叉注意力),并简化了视觉特征与语言主干的集成。图像通过视觉编码器后,经过学习的 Perceiver 池化和 MLP 模态投影。然后将池化序列与文本嵌入连接,获得图像和文本的(交错)序列。
- 所有这些改进以及更好的预训练主干使得性能相比 Idefics1 有了显著提升,而模型规模缩小了 10 倍。
Idefics2 分两个阶段训练以实现最大效率。在第一阶段,图像以 SigLIP 的原生分辨率(384 x 384 正方形)输入模型。在第二阶段,图像以其原生分辨率(最大 980,最小 378)和原生宽高比输入模型。由于 OCR 数据需要高分辨率,我们在第二阶段向 OBELICS、LAION Coco 和 PMD 添加了 PDFA、Rendered-Text 和 IDL。
随后,我们在 The Cauldron 上进行指令微调,这是一个包含 50 个手动策划的视觉语言数据集以及 9 个纯文本指令微调数据集的集合:
我们使用 Lora 训练从预训练主干初始化的参数,并对新初始化的参数(模态连接器)进行完全微调,因为我们发现这种策略更稳定且计算效率更高。
更多细节(训练过程、数据选择、超参数等)以及从消融研究中获得的经验将在即将发布的技术报告中提供。
快速入门
本节展示 idefics2-8b-base
和 idefics2-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")
对于 idefics2-8b-base
点击展开。
processor = AutoProcessor.from_pretrained("HuggingFaceM4/idefics2-8b-base")
model = AutoModelForVision2Seq.from_pretrained(
"HuggingFaceM4/idefics2-8b-base",
).to(DEVICE)
prompts = [
"<image>在这张图片中,我们可以看到纽约市,尤其是自由女神像。<image>在这张图片中,",
"这座桥位于哪个城市?<image>",
]
images = [[image1, image2], [image3]]
inputs = processor(text=prompts, images=images, padding=True, 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)
对于 idefics2-8b
点击展开。
processor = AutoProcessor.from_pretrained("HuggingFaceM4/idefics2-8b")
model = AutoModelForVision2Seq.from_pretrained(
"HuggingFaceM4/idefics2-8b",
).to(DEVICE)
messages = [
{
"role": "user",
"content": [
{"type": "image"},
{"type": "text", "text": "这张图片中我们看到了什么?"},
]
},
{
"role": "assistant",
"content": [
{"type": "text", "text": "在这张图片中,我们可以看到纽约市,尤其是自由女神像。"},
]
},
{
"role": "user",
"content": [