Представляем IDEFICS открытое воспроизведение современной модели визуального языка

IDEFICS - открытое воспроизведение модели визуального языка

Мы рады представить IDEFICS (Image-aware Decoder Enhanced à la Flamingo with Interleaved Cross-attentionS), открытую модель визуального языка с открытым доступом. IDEFICS основан на Flamingo, передовой модели визуального языка, которая изначально была разработана DeepMind, но не была публично выпущена. Подобно GPT-4, модель принимает произвольные последовательности изображений и текстовых входных данных и генерирует текстовые выходные данные. IDEFICS построена исключительно на базе общедоступных данных и моделей (LLaMA v1 и OpenCLIP) и представлена в двух вариантах — базовой версии и инструктируемой версии. Каждая версия доступна в размере 9 миллиардов и 80 миллиардов параметров.

Разработка передовых моделей искусственного интеллекта должна быть более прозрачной. Нашей целью с IDEFICS является воспроизведение и предоставление сообществу искусственного интеллекта систем, которые соответствуют возможностям больших собственных моделей, таких как Flamingo. В этом отношении мы предприняли важные шаги, способствующие повышению прозрачности этих систем искусственного интеллекта: мы использовали только общедоступные данные, предоставили инструменты для исследования обучающих наборов данных, поделились техническими уроками и ошибками при создании таких артефактов и оценили вредоносность модели, проведя соперничество с ней перед ее выпуском. Мы надеемся, что IDEFICS станет прочной основой для более открытого исследования в многомодальных системах искусственного интеллекта, наряду с моделями, такими как OpenFlamingo — еще одной открытой репродукцией Flamingo в масштабе 9 миллиардов параметров.

Попробуйте демонстрационную версию и модели на Hub!

Что такое IDEFICS?

IDEFICS — это многомодельная модель с 80 миллиардами параметров, которая принимает последовательности изображений и текстов в качестве входных данных и генерирует связный текст в качестве выходных данных. Она может отвечать на вопросы о изображениях, описывать визуальное содержимое, создавать истории на основе нескольких изображений и т. д.

IDEFICS — это открытая репродукция Flamingo, которая сравнима по производительности с оригинальной закрытой моделью по различным бенчмаркам понимания изображений и текста. Она представлена в двух вариантах — с 80 миллиардами параметров и с 9 миллиардами параметров.

Мы также предоставляем настроенные версии idefics-80B-instruct и idefics-9B-instruct, адаптированные для разговорных случаев использования.

Обучающие данные

IDEFICS была обучена на смеси общедоступных наборов данных: Википедия, Public Multimodal Dataset и LAION, а также новом наборе данных OBELICS объемом 115 миллиардов токенов, который мы создали. OBELICS состоит из 141 миллиона чередующихся документов изображений и текста, собранных с веб-сайтов, и содержит 353 миллиона изображений.

Мы предоставляем интерактивную визуализацию OBELICS, которая позволяет исследовать содержимое набора данных с помощью Nomic AI.

Детали архитектуры IDEFICS, методологии обучения и оценки, а также информация о наборе данных доступны в карточке модели и нашей научной статье. Кроме того, мы задокументировали технические идеи и уроки из обучения модели, предлагая ценную перспективу развития IDEFICS.

Этическая оценка

В начале этого проекта мы разработали этическую хартию, которая помогла нам принимать решения в ходе проекта. Эта хартия устанавливает ценности, включая самокритичность, прозрачность и справедливость, которые мы стремились соблюдать в нашем подходе к проекту и выпуску моделей.

В рамках процесса выпуска мы провели внутреннюю оценку модели на предмет потенциальных предубеждений, подвергая модель атаке с помощью изображений и текста, которые могут вызвать нежелательные ответы модели (процесс, известный как “красная команда”).

Пожалуйста, опробуйте IDEFICS с помощью демонстрации, ознакомьтесь с соответствующими карточками модели и карточкой набора данных и дайте нам знать свои отзывы, используя вкладку “сообщество”! Мы стремимся улучшить эти модели и сделать крупные многомодальные модели искусственного интеллекта доступными для сообщества машинного обучения.

Лицензия

Модель построена на основе двух предварительно обученных моделей: 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)

# Мы подаем на вход модели произвольную последовательность текстовых строк и изображений. Изображения могут быть либо URL-адресами, либо изображениями в формате PIL.
prompts = [
    [
        "Пользователь: Что изображено на этом изображении?",
        "https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG",
        "<end_of_utterance>",

        "\nАссистент: Это изображение изображает Идефикса, собаку Обеликса из комиксов об Астериксе и Обеликсе. Идефикс бежит по земле.<end_of_utterance>",

        "\nПользователь:",
        "https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052",
        "А кто это?<end_of_utterance>",

        "\nАссистент:",
    ],
]

# --режим пакетной обработки
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")