模型简介
模型特点
模型能力
使用案例
🚀 IDEFICS
IDEFICS(图像感知解码器增强版Flamingo,具备交错交叉注意力机制) 是一个开源的多模态模型,它可以接受任意顺序的图像和文本输入,并生成文本输出。该模型在多个图像文本基准测试中表现出色,可用于图像问答、内容描述等多种任务。
🚀 快速开始
IDEFICS模型有基础版本和指令微调版本,以下分别提供了这两个版本的快速开始代码示例。
基础模型
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# 我们向模型输入任意顺序的文本字符串和图像。图像可以是URL或PIL图像。
prompts = [
[
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"In this picture from Asterix and Obelix, we can see"
],
]
# --批量模式
inputs = processor(prompts, return_tensors="pt").to(device)
# --单样本模式
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成参数
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
指令微调模型
import torch
from transformers import IdeficsForVisionText2Text, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
checkpoint = "HuggingFaceM4/idefics-9b-instruct"
model = IdeficsForVisionText2Text.from_pretrained(checkpoint, torch_dtype=torch.bfloat16).to(device)
processor = AutoProcessor.from_pretrained(checkpoint)
# 我们向模型输入任意顺序的文本字符串和图像。图像可以是URL或PIL图像。
prompts = [
[
"User: What is in this image?",
"https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
"<end_of_utterance>",
"\nAssistant: This picture depicts Idefix, the dog of Obelix in Asterix and Obelix. Idefix is running on the ground.<end_of_utterance>",
"\nUser:",
"https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052",
"And who is that?<end_of_utterance>",
"\nAssistant:",
],
]
# --批量模式
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --单样本模式
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# 生成参数
exit_condition = processor.tokenizer("<end_of_utterance>", add_special_tokens=False).input_ids
bad_words_ids = processor.tokenizer(["<image>", "<fake_token_around_image>"], add_special_tokens=False).input_ids
generated_ids = model.generate(**inputs, eos_token_id=exit_condition, bad_words_ids=bad_words_ids, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)
for i, t in enumerate(generated_text):
print(f"{i}:\n{t}\n")
文本生成推理
托管推理API由 Text Generation Inference 提供支持。要查询模型,可以使用以下代码片段。关键是通过markdown语法将图像作为可获取的URL传递:
from text_generation import Client
API_TOKEN = "<YOUR_API_TOKEN>"
API_URL = "https://api-inference.huggingface.co/models/HuggingFaceM4/idefics-80b-instruct"
DECODING_STRATEGY = "Greedy"
QUERY = "User: What is in this image?<end_of_utterance>\nAssistant:"
client = Client(
base_url=API_URL,
headers={"x-use-cache": "0", "Authorization": f"Bearer {API_TOKEN}"},
)
generation_args = {
"max_new_tokens": 256,
"repetition_penalty": 1.0,
"stop_sequences": ["<end_of_utterance>", "\nUser:"],
}
if DECODING_STRATEGY == "Greedy":
generation_args["do_sample"] = False
elif DECODING_STRATEGY == "Top P Sampling":
generation_args["temperature"] = 1.
generation_args["do_sample"] = True
generation_args["top_p"] = 0.95
generated_text = client.generate(prompt=QUERY, **generation_args)
print(generated_text)
⚠️ 重要提示
目前仅为指令微调模型提供托管推理服务。
💡 使用建议
若想快速测试软件而不想等待大模型下载/加载,可以使用
HuggingFaceM4/tiny-random-idefics
,它未经训练且权重随机,但非常适合快速测试。
✨ 主要特性
- 多模态输入:可以接受任意顺序的图像和文本输入,并生成文本输出。
- 强大的少样本学习能力:在多个图像文本基准测试中表现出色,与闭源模型性能相当。
- 开源可复现:基于公开可用的数据和模型构建,可进行复现和进一步开发。
- 指令微调版本:通过在监督和指令微调数据集上进一步训练,提升了下游任务性能,更适用于对话场景。
📦 安装指南
文档未提供具体安装命令,可参考 Hugging Face Transformers 进行安装。
💻 使用示例
基础用法
上述快速开始部分的基础模型代码示例展示了如何使用IDEFICS基础模型进行推理。
高级用法
上述快速开始部分的指令微调模型代码示例展示了如何使用IDEFICS指令微调模型进行推理。
📚 详细文档
模型详情
- 开发者:Hugging Face
- 模型类型:多模态模型(图像 + 文本)
- 支持语言:英文
- 许可证:见 许可证 部分
- 基础模型:laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b
- 更多信息资源:
IDEFICS是一个大型多模态英文模型,它以交错的图像和文本序列作为输入,并生成文本输出。该模型在上下文少样本学习方面表现出强大的能力,与闭源模型性能相当,这使得IDEFICS成为在自定义数据上微调多模态模型的可靠起点。
模型用途
该模型可用于多模态(图像 + 文本)任务的推理,其中输入由文本查询/指令和一个或多个图像组成。此模型不支持图像生成。
可以在特定用例的自定义数据上微调基础模型。需要注意的是,经过指令微调的模型在遵循用户指令方面表现显著更好,因此在开箱即用的情况下应优先选择这些模型。
训练详情
IDEFICS
训练过程紧密遵循 Flamingo 的训练程序,结合了两个开源预训练模型(laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b),通过初始化新的Transformer块来连接这两个模态。预训练的主干网络被冻结,同时训练新初始化的参数。
训练数据混合了公开可用的英文数据,具体如下:
数据源 | 数据类型 | 源数据中的令牌数量 | 源数据中的图像数量 | 训练轮数 | 令牌数量的有效比例 |
---|---|---|---|---|---|
OBELICS | 非结构化多模态网页文档 | 114.9B | 353M | 1 | 73.85% |
Wikipedia | 非结构化多模态网页文档 | 3.192B | 39M | 3 | 6.15% |
LAION | 图像 - 文本对 | 29.9B | 1.120B | 1 | 17.18% |
PMD | 图像 - 文本对 | 1.6B | 70M | 3 | 2.82% |
IDEFICS-instruct
从基础的IDEFICS模型开始,通过解冻所有参数(视觉编码器、语言模型、交叉注意力)进行微调。微调数据混合了以下英文数据集:
数据源 | 数据描述 | 唯一样本数量 | 采样比例 |
---|---|---|---|
M3IT | 带提示的图像 - 文本学术数据集 | 1.5M | 7.7% |
LRV-Instruction | 图像/问题/答案三元组 | 155K | 1.7% |
LLaVA-Instruct | 基于图像的问答对话 | 158K | 5.9% |
LLaVAR-Instruct | 关注包含文本图像的问答对话 | 15.5K | 6.3% |
SVIT | 图像/问题/答案三元组 | 3.2M | 11.4% |
General Scene Difference + Spot-the-Diff | 描述相关或相似图像差异的文本对 | 158K | 2.1% |
UltraChat | 多轮纯文本对话 | 1.5M | 29.1% |
评估
IDEFICS
由于未在视频 - 文本数据集上训练IDEFICS,因此未在视频基准测试上进行评估。将该模型与原始的Flamingo和另一个开源复现版本 OpenFlamingo 进行了比较。
在多个图像文本基准测试中进行了评估,包括视觉问答(开放式和多项选择)、图像字幕生成和图像分类等。评估结果表明,IDEFICS在多个任务上表现出色,与闭源模型性能相当。
IDEFICS instruct
同样在多个图像文本基准测试中进行了评估,通过在验证集上进行检查点选择,选择了最佳的检查点进行评估。评估结果表明,指令微调版本在多个任务上进一步提升了性能。
技术规格
硬件
- IDEFICS-9b预训练:使用128个NVIDIA A100 GPU,训练时长约350小时。
- IDEFICS-9b-instruct微调:使用128个NVIDIA A100 GPU,训练时长约70小时。
- IDEFICS-80b预训练:使用512个NVIDIA A100 GPU,训练时长约672小时(28天)。
- IDEFICS-80b-instruct微调:使用384个NVIDIA A100 GPU,训练时长约72小时(3天)。
软件
训练软件基于HuggingFace Transformers + Accelerate构建,使用 DeepSpeed ZeRO-3 进行训练,使用 WebDataset 进行数据加载。
环境影响
分别报告了IDEFICS创建过程中三个阶段的碳排放:
- 初步实验:碳排放16,714千克CO2eq。
- IDEFICS-9b预训练:碳排放5,160千克CO2eq。
- IDEFICS-9b-instruct微调:碳排放1,032千克CO2eq。
- IDEFICS-80b预训练:碳排放39,498千克CO2eq。
- IDEFICS-80b-instruct微调:碳排放3,174千克CO2eq。
整个IDEFICS项目的总碳足迹估计约为 65.57吨CO2eq。
🔧 技术细节
模型架构
IDEFICS基于两个单模态的开源预训练模型构建,通过新初始化的Transformer块连接视觉编码器和语言模型。在训练过程中,预训练的主干网络被冻结,只训练新初始化的参数。
训练方法
采用标准的下一个令牌预测作为训练目标,使用Adam优化器进行训练,并应用了梯度裁剪、Z-loss等技术来提高训练稳定性。
数据处理
对于多模态网页文档,将文本段落和图像的序列输入模型;对于图像 - 文本对,将图像和其对应的字幕打包成训练序列。图像通过视觉编码器进行编码,视觉隐藏状态通过Transformer Perceiver块进行池化,然后通过交叉注意力块融合到文本序列中。
📄 许可证
该模型基于两个预训练模型构建:laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b。第一个模型以MIT许可证发布,第二个模型以特定的非商业研究用途许可证发布。因此,用户需要直接申请 Meta的表单 以遵守该许可证。
新训练的额外权重以MIT许可证发布。
📖 引用
@misc{laurencon2023obelics,
title={OBELICS: An Open Web-Scale Filtered Dataset of Interleaved Image-Text Documents},
author={Hugo Laurençon and Lucile Saulnier and Léo Tronchon and Stas Bekman and Amanpreet Singh and Anton Lozhkov and Thomas Wang and Siddharth Karamcheti and Alexander M. Rush and Douwe Kiela and Matthieu Cord and Victor Sanh},
year={2023},
eprint={2306.16527},
archivePrefix={arXiv},
primaryClass={cs.IR}
}
👥 模型构建者、文档作者和贡献者
核心团队()得到了Hugging Face众多贡献者的支持: Stas Bekman, Léo Tronchon*, Hugo Laurençon*, Lucile Saulnier*, Amanpreet Singh*, Anton Lozhkov, Thomas Wang, Siddharth Karamcheti, Daniel Van Strien, Giada Pistilli, Yacine Jernite, Sasha Luccioni, Ezi Ozoani, Younes Belkada, Sylvain Gugger, Amy E. Roberts, Lysandre Debut, Arthur Zucker, Nicolas Patry, Lewis Tunstall, Zach Mueller, Sourab Mangrulkar, Chunte Lee, Yuvraj Sharma, Dawood Khan, Abubakar Abid, Ali Abid, Freddy Boulton, Omar Sanseviero, Carlos Muñoz Ferrandis, Guillaume Salou, Guillaume Legendre, Quentin Lhoest, Douwe Kiela, Alexander M. Rush, Matthieu Cord, Julien Chaumond, Thomas Wolf, Victor Sanh*
📞 模型卡片联系
如有问题,请在社区板块开启讨论!








