Всё, что нужно знать об OpenAI CLIP

Всё, что нужно знать об OpenAI CLIP

OpenAI CLIP (Contrastive Language-Image Pre-training) — это модель, которая учится сопоставлять изображения и их текстовые описания. Разбирая принципы работы и реализацию CLIP, вы получите полное понимание OpenAI CLIP.

Введение

В январе 2021 года OpenAI представила CLIP (Contrastive Language-Image Pre-Training) — zero-shot классификатор, который использует понимание английского языка для классификации изображений без необходимости обучения на конкретном наборе данных. Эта модель применяет последние достижения в области масштабных трансформеров, аналогичных GPT-3, в области компьютерного зрения.

Результаты впечатляют. Мы подготовили учебник по CLIP и Colab-блокнот для экспериментов с моделью на ваших собственных изображениях.

Что такое OpenAI CLIP

CLIP (Contrastive Language-Image Pre-training) — это эффективный метод обучения с использованием естественного языка в качестве учителя. Представленный в 2021 году в статье «Learning Transferable Visual Models From Natural Language Supervision», CLIP является совместной моделью встраивания изображений и текста.

CLIP обучается на 400 миллионах пар «изображение-текст» в самоуправляемом режиме, отображая и текст, и изображения в одно и то же пространство встраивания. Например, изображение собаки и предложение «изображение собаки» будут иметь очень похожие встраивания и находиться близко друг к другу в векторном пространстве. Эта возможность важна, так как позволяет создавать различные приложения, например, поиск в базе изображений по описанию или наоборот.

Производительность CLIP

Эффективность обучения: CLIP — одна из самых эффективных моделей, достигающая точности 41% при использовании 400 миллионов изображений. Она превосходит другие модели, такие как Bag of Words Prediction (27%) и Transformer Language Model (16%), при том же количестве изображений. Это говорит о том, что CLIP обучается значительно быстрее других моделей в своей области.

Обобщение: CLIP обучался на разнообразных стилях изображений, что делает его гораздо более гибким, чем модели вроде ImageNet. Важно отметить, что CLIP хорошо обобщает изображения, на которых он обучался, но может работать менее эффективно с изображениями за пределами своей обучающей выборки. Ниже приведены примеры различных стилей изображений:

Как работает CLIP

Архитектура

Модель CLIP состоит из двух основных компонентов: текстового энкодера и энкодера изображений. Текстовый энкодер использует трансформер — архитектуру, которая произвела революцию в NLP с 2017 года, так что его включение неудивительно. Для отличного визуального объяснения обратитесь к следующему блогу.

Для энкодера изображений авторы экспериментировали с двумя разными моделями: ResNet-50 и Vision Transformer (ViT). ResNet-50, основанный на сверточных нейронных сетях (CNN), был первоначальной передовой архитектурой для классификации изображений. ViT — более свежая адаптация трансформера для изображений, которая разбивает каждое изображение на последовательность патчей, обрабатывая их как последовательность токенов. Авторы обнаружили, что ViT обучается быстрее.

Крупнейшая модель ResNet, RN50x64, обучалась 18 дней на 592 GPU V100, в то время как самый большой Vision Transformer обучался 12 дней на 256 GPU V100.

Оба энкодера — текстовый и для изображений — обучались с нуля.

Мы обучаем CLIP с нуля, без инициализации энкодера изображений весами ImageNet или текстового энкодера предобученными весами.

Обучение

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

Наш первоначальный подход, аналогичный VirTex, предполагал совместное обучение CNN для изображений и текстового трансформера с нуля для предсказания подписи к изображению. Однако мы столкнулись с трудностями при эффективном масштабировании этого метода.

Однако они обнаружили, что обучение модели генерации подписей на 400 миллионах пар (изображение, текст) невозможно масштабировать. Вместо этого они выбрали подход контрастивного обучения представлениям. Цель этого подхода — выучить пространство встраивания, в котором похожие пары образцов находятся близко друг к другу, а различные — далеко.

В типичной установке контрастивного обучения модели предоставляются примеры в виде (anchor, positive, negative). Здесь anchor — изображение из одного класса, например, собаки, positive — другое изображение из того же класса (другая собака), а negative — изображение из другого класса, например, птицы. Изображения встраиваются, и модель обучается минимизировать расстояние между встраиваниями одного класса (distance(anchor, positive)) и максимизировать расстояние между встраиваниями разных классов (distance(anchor, negative)). Это побуждает модель создавать очень похожие встраивания для одних и тех же объектов и различные встраивания для разных объектов.

Визуализация контрастивного обучения. Источник: https://www.v7labs.com/blog/contrastive-learning-guide

Тот же подход можно применить и к тексту, а также к комбинациям текста и изображений. Например, в CLIP один обучающий пример может состоять из anchor (изображение собаки), positive (подпись «изображение собаки») и negative (подпись «изображение птицы»).

CLIP обобщает этот подход еще дальше, используя multi-class N-pair loss — расширение стандартного метода, включающее несколько отрицательных и положительных примеров для каждого anchor. Как описано в статье:

Для батча из N пар (изображение, текст) CLIP обучается предсказывать, какая из N × N возможных комбинаций (изображение, текст) в батче на самом деле встречалась. Для этого CLIP изучает мультимодальное пространство встраивания, совместно обучая энкодер изображений и текстовый энкодер максимизировать косинусное сходство встраиваний изображения и текста для N реальных пар в батче, одновременно минимизируя косинусное сходство встраиваний для N² − N неправильных комбинаций. Он оптимизирует симметричную функцию потерь cross entropy по этим оценкам сходства.

Проектирование промптов и ансамблирование

С ростом популярности языковых моделей проектирование промптов стало обычной практикой для получения хороших результатов от генеративных моделей. Поскольку текстовый энкодер в CLIP является трансформером, авторы обнаружили, что проектирование промптов имеет решающее значение для достижения хорошей zero-shot производительности. Они заметили, что в их наборе данных для предобучения текст, связанный с изображением, редко был одним словом, например, «собака», представляющим метку класса. Чаще текст был полным предложением, например, подписью или описанием изображения. В результате авторы обнаружили, что промпт «a photo of a {object}» является хорошим значением по умолчанию, хотя более специализированные промпты работали лучше в определенных случаях. Например, для спутниковых снимков более эффективным был «a satellite photo of a {object}».

Авторы также экспериментировали с ансамблированием моделей — техникой, при которой предсказания нескольких моделей объединяются для получения окончательного результата. Этот подход часто используется в машинном обучении для решения проблем высокой дисперсии и низкого смещения (переобучения). Для CLIP ансамбль строился с использованием множества различных промптов для создания классификаторов.

Как проектирование промптов, так и ансамблирование значительно улучшили производительность на ImageNet.

На ImageNet мы собираем ансамбль из 80 различных контекстных промптов, что улучшает производительность на дополнительные 3,5% по сравнению с одним стандартным промптом, описанным выше. В совокупности проектирование промптов и ансамблирование повышают точность на ImageNet почти на 5%.

Применения OpenAI CLIP

OpenAI CLIP имеет широкий спектр применений и вариантов использования в анализе изображений и текста. Некоторые из ключевых приложений и вариантов использования CLIP включают:

  • Классификация изображений: CLIP может классифицировать изображения по разным классам или категориям на основе их содержимого. Он может предсказывать наиболее релевантную метку класса для данного изображения.
  • Поиск изображений: CLIP может находить релевантные изображения по заданному текстовому запросу. Он может находить изображения, семантически похожие на входной текст.
  • Модерация контента: CLIP может использоваться для автоматического обнаружения и модерации неуместного или неприемлемого контента в изображениях и тексте.
  • Генерация подписей к изображениям: CLIP может генерировать подписи или описания для изображений на основе их содержимого.
  • Визуальные ответы на вопросы: CLIP может отвечать на вопросы об изображениях на основе их содержимого.

Реализация OpenAI CLIP с помощью Huggingface Transformers

Вы можете использовать CLIP на своем локальном компьютере всего несколькими строками кода с помощью библиотеки HuggingFace Transformers! Начните с импорта библиотеки и загрузки предобученной модели.

import transformers

model = transformers.CLIPModel.from_pretrained(“openai/clip-vit-base-patch32”)
processor = transformers.CLIPProcessor.from_pretrained(“openai/clip-vit-base-patch32”)

Затем создайте два списка: один с подписями или описаниями, а другой с изображениями. Изображения могут быть представлены либо в виде URL-адресов, либо в виде PIL-изображений.

import PIL.Image

images = [PIL.Image(“for_example_a_dog_image.jpeg”)]
possible_classes = [“an image of a bird”, “an image of a dog”, “an image of a cat”]

Вызовите процессор, который токенизирует как тексты, так и изображения и подготавливает их для ввода в модель. Этот процесс похож на вызов токенизатора в стандартном текстовом случае. При наличии батча описаний применяется дополнение (padding), чтобы все они были одинаковой длины для хранения в тензоре, и усечение (truncation) для ограничения длинных предложений максимальной длиной последовательности (которая, как упоминалось ранее, равна 76). Наконец, передайте токенизированные входные данные модели, которая затем подает их через текстовый энкодер и энкодер изображений.

with torch.no_grad():
inputs = processor(text=descriptions, images=images, return_tensors=“pt”, padding=True, truncation=True)
outputs = model(**inputs)

Теперь мы можем получить матрицу скалярных произведений с помощью двух разных функций. Используйте logits\_per\_image, чтобы получить матрицу скалярных произведений размером [num_of_images, num_of_text], и logits\_per\_text, чтобы получить матрицу размером [num_of_text, num_of_images].

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

Наконец, при желании мы можем применить функцию softmax к этим матрицам, чтобы получить распределение вероятностей для каждого изображения.

probabilities = dot_products_per_image.softmax(dim=1)

Ограничения использования OpenAI CLIP

Хотя статья содержит множество экспериментов и результатов, важно признать, что у CLIP есть несколько ограничений.

Во-первых, из-за упомянутого выше архитектурного решения CLIP не является генеративной моделью и не может выполнять такие задачи, как генерация подписей к изображениям. Однако другие генеративные ИИ могут выполнять больше работы, чем OpenAI CLIP. Например:

novita.ai LLM выполняет генерацию подписей к изображениям

Другие генеративные ИИ, такие как novita.ai, могут восполнить недостатки CLIP, применяя соответствующие API.

Авторы отмечают, что CLIP все еще далек от передовых результатов и сопоставим только с ResNet с линейным слоем сверху. Он плохо обобщается на некоторые задачи; например, он достигает только 88% точности на простом наборе данных распознавания рукописных цифр MNIST, вероятно, потому что в его обучающих данных нет похожих изображений, и CLIP мало что делает для решения этой проблемы.

CLIP обучается на нефильтрованных и некурированных парах изображение-текст из интернета, что приводит к тому, что модель выучивает многие социальные предвзятости. Эти опасения схожи с текущими проблемами больших языковых моделей (LLM), для смягчения которых применяются такие техники, как RLFHF (Robust Low-Frequency Hacking Framework) и Direct Preference Optimization.

Кроме того, в оригинальной реализации максимальная длина последовательности для текстового энкодера-трансформера была ограничена 76. Это ограничение связано с тем, что набор данных в основном состоит из изображений и коротких подписей. Поэтому использование готовой предобученной модели может плохо работать с более длинными текстами, так как они будут усекаться после 76 токенов, учитывая, что модель обучалась на коротких текстах.

Будущие направления анализа изображений и текста с помощью CLIP

Успех OpenAI CLIP открыл новые возможности для будущего анализа изображений и текста. Исследователи и разработчики постоянно изучают инновационные приложения и достижения в этой области.

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

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

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

Заключение

OpenAI CLIP знаменует собой значительный скачок в анализе изображений и текста, используя масштабные трансформеры и контрастивное обучение для классификации изображений на основе описаний на естественном языке. Его универсальность позволяет создавать множество инновационных приложений, хотя он сталкивается с ограничениями, такими как трудности с задачами за пределами своей обучающей области, ограниченная длина последовательности для текста и унаследованные социальные предвзятости из-за нефильтрованных обучающих данных.

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

novita.ai — единая платформа для безграничного творчества, предоставляющая доступ к 100+ API. От генерации изображений и обработки языка до улучшения аудио и редактирования видео — недорогая оплата по мере использования, которая освобождает вас от забот с обслуживанием GPU при создании собственных продуктов. Попробуйте бесплатно.

Рекомендуемое чтение

В чем разница между LLM и GPT

Прогнозы рейтинга LLM на 2024 год раскрыты

Движок вывода Novita AI LLM: максимальная пропускная способность и самый дешевый вывод из доступных