Hugging Face 发布开源视觉语言模型 IDEFICS,复现 Flamingo
Introducing IDEFICS: An Open Reproduction of State-of-the-art Visual Langage Model
Hugging Face 发布开源视觉语言模型 IDEFICS,基于 DeepMind 未公开的 Flamingo 复现,接受任意图文序列输入并生成文本,性能与原闭源模型在多项图文理解基准上可比。
官方开源复现 DeepMind 未公开的 Flamingo,只使用公开数据并附数据集可视化与训练经验,透明度做法可参考。
我们非常高兴地发布 IDEFICS(Image-aware Decoder Enhanced à la Flamingo with Interleaved Cross-attentionS),一个开放获取的视觉语言模型。IDEFICS 基于 Flamingo,这是由 DeepMind 最初开发的最先进视觉语言模型,但并未公开发布。与 GPT-4 类似,该模型接受任意序列的图像和文本输入,并生成文本输出。IDEFICS 完全基于公开可用的数据和模型(LLaMA v1 和 OpenCLIP)构建,并提供两个版本——基础版和指令版。每个版本均提供 90 亿和 800 亿参数规模。
最先进 AI 模型的开发应该更加透明。我们开发 IDEFICS 的目标是复现并为 AI 社区提供能够匹配 Flamingo 等大型专有模型能力的系统。为此,我们采取了重要步骤,为这些 AI 系统带来透明度:我们仅使用公开可用的数据,提供了探索训练数据集的工具,分享了构建此类成果的技术经验与教训,并在发布前通过对抗性提示评估了模型的危害性。我们希望 IDEFICS 能够为多模态 AI 系统更开放的研究奠定坚实基础,与 OpenFlamingo 等模型一起——后者是 Flamingo 在 90 亿参数规模上的另一个开放复现。
什么是 IDEFICS?
IDEFICS 是一个 800 亿参数的多模态模型,接受图像和文本序列作为输入,并生成连贯的文本作为输出。它可以回答关于图像的问题、描述视觉内容、基于多张图像创作故事等。
IDEFICS 是 Flamingo 的开放获取复现,在各种图像-文本理解基准测试中,其性能与原始闭源模型相当。它提供两个版本——800 亿参数和 90 亿参数。
我们还提供了针对对话用例微调的版本 idefics-80B-instruct 和 idefics-9B-instruct。
训练数据
IDEFICS 在多个公开可用数据集的混合上训练:Wikipedia、Public Multimodal Dataset 和 LAION,以及我们创建的一个名为 OBELICS 的新 1150 亿 token 数据集。OBELICS 包含从网络抓取的 1.41 亿个交错图像-文本文档,并包含 3.53 亿张图像。
我们提供了 OBELICS 的交互式可视化,允许通过 Nomic AI 探索数据集的内容。
IDEFICS 的架构、训练方法和评估的详细信息,以及有关数据集的信息,均可在模型卡和我们的研究论文中找到。此外,我们还记录了模型训练中的技术见解与经验,为 IDEFICS 的开发提供了宝贵的视角。
伦理评估
在这个项目开始时,通过一系列讨论,我们制定了一份道德章程,以帮助指导项目期间做出的决策。这份章程列出了包括自我批判、透明和公平在内的价值观,我们在推进项目和发布模型的过程中一直努力追求这些价值观。
作为发布流程的一部分,我们通过在内部用可能引发我们不希望模型给出的响应的图像和文本对模型进行对抗性提示(这一过程被称为红队测试),来评估模型潜在的偏见。
请通过演示试用 IDEFICS,查看相应的模型卡和数据集卡,并通过社区标签告诉我们您的反馈!我们致力于改进这些模型,并让机器学习社区能够使用大型多模态 AI 模型。
许可证
该模型建立在两个预训练模型之上:laion/CLIP-ViT-H-14-laion2B-s32B-b79K 和 huggyllama/llama-65b。第一个是在 MIT 许可证下发布的,而第二个是在专注于研究目的的特定非商业许可证下发布的。因此,用户应遵守该许可证,直接向Meta 的表格提出申请。
这两个预训练模型通过我们训练的新初始化参数相互连接。这些参数不基于构成复合模型的两个基础冻结模型中的任何一个。我们以 MIT 许可证发布我们训练的这些额外权重。
IDEFICS 入门
IDEFICS 模型可在 Hugging Face Hub 上获取,并在最新的 transformers 版本中受支持。以下是一个试用它的代码示例:
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)
# We feed to the model an arbitrary sequence of text strings and images. Images can be either URLs or PIL Images.
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:",
],
]
# --batched mode
inputs = processor(prompts, add_end_of_utterance_token=False, return_tensors="pt").to(device)
# --single sample mode
# inputs = processor(prompts[0], return_tensors="pt").to(device)
# Generation args
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")
来源:Hugging Face:Blog(RSS) · huggingface.co