Обучение FashionCLIP, предметно-ориентированной модели CLIP для моды.

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

FashionCLIP — это новое видение и языковая модель индустрии моды, которая поддерживает практиков в решении двух задач:

  • Категория: нулевая классификация изображений товаров;
  • Поиск: эффективный поиск продуктов по запросу.

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

Модели

В настоящее время мы выпускаем модель в двух разных форматах:

У нас также есть руководство по совместной работе, в котором рассказывается о большинстве вещей, которые вы можете делать с FashionCLIP.

Введение

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

Представьте себе двух специалистов по обработке данных в крупной модной компании: Мэри и Луиса. Им обоим приходится иметь дело с постоянно меняющейся системой, и ее операции требуют постоянного внимания:

  • Мэри создает классификатор товаров, чтобы упростить категоризацию в масштабе: ее модель берет товар и выбирает его из списка категорий (обувь, платье и т. д.);
  • Луис работает над сопоставлением товаров, чтобы улучшить качество поиска: его модель принимает запрос на одном из поддерживаемых языков (например, «красное платье») и возвращает список продуктов, соответствующих запросу.

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

  • Модель Мэри необходимо постоянно переобучать по мере роста запасов и изменения категорий;
  • Модель Луиса зависит от качества метаданных продукта.

Одна и та же компания, разные варианты использования, разные модели.

Что, если бы был другой способ?

Сегодня мы попытаемся сделать шаг вперед, показав, как мы можем построить общую модель для данных моды. Мы описываем FashionCLIP как доработанную версию знаменитой модели CLIP, предназначенную для обработки данных о моде. Наша недавняя статья о FashionCLIP была опубликована в Nature Scientific Reports.

Чиа, П.Дж., Аттанасио, Г., Бьянки, Ф. и др.Сравнительный язык и изучение видения общих концепций моды. Sci Rep 12, 18958 (2022). https://doi.org/10.1038/s41598-022-23052-9

FashionCLIP появился благодаря сотрудничеству с Farfetch, гигантской (и настоящей) электронной коммерцией предметов роскоши, торгуемой на NYSE. FashionCLIP — это совместная работа людей как из индустрии (Coveo, Farfetch), так и из научных кругов (Stanford, Bocconi, Bicocca). Веса моделей доступны онлайн в формате HuggingFace. Пример использования можно найти в репозитории Патрика.

Сначала мы рассмотрим вариант использования и объясним некоторые более подробные детали модели. Наконец, мы поделимся кодом, который мы использовали для обучения модели, и как получить доступ к весам.

FashionCLIP: история

FashionCLIP — это общая модель для встраивания изображений модных товаров и их описания в одно и то же векторное пространство: каждое изображение и каждый продукт будут представлены одним плотным вектором.

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

FashionCLIP является производным от оригинального CLIP. Идея довольно проста. Если вы возьмете:

  • Тонна изображений с подписями;
  • Кодировщик изображений (это может быть CNN или ViT);
  • Кодировщик текста (это может быть языковая модель на основе преобразователей).

Вы можете научить модель (с контрастной потерей) размещать встраивание изображения рядом с его встраиванием подписи и далеко от нерелевантных подписей. В GIF вы показываете пример в 2 измерениях. Концепция обобщается на N измерений.

Конечным результатом является мультимодальное пространство, позволяющее перемещаться между визуальными и текстовыми взаимодействиями с использованием новых изображений и новых текстовых описаний: если у вас есть текст, вы можете получить соответствующие изображения (как в поиске товаров); если у вас есть изображения, вы можете ранжировать подписи на основе семантического сходства (как при классификации).

Для тонкой настройки CLIP вам нужен хороший набор данных. Совместно с Farfetch мы обучили CLIP высококачественным изображениям и подписям. Набор данных (скоро будет опубликован) содержит более 800 тыс. образцов.

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

Мы не будем углубляться в сам CLIP. Если вы хотите узнать больше о CLIP, у меня есть специальный пост в блоге:



Две ключевые задачи, которые может решить FashionCLIP:

  • Поиск изображений
  • Классификация нулевого выстрела

Поиск: от текста к изображению

Сначала мы переходим от текста к изображению: мы кодируем поисковый запрос («Красное платье») с помощью текстового кодировщика FashionCLIP и получаем наиболее близкие векторы изображений с помощью простого скалярного произведения. Чем больше значение скалярного произведения, тем больше похожи текст и изображение. В GIF ниже в качестве примера поиск выполняется по 4 изображениям товаров.

В то время как красное платье — это простой запрос, для которого поисковой системе может не потребоваться дополнительный ввод, все становится интереснее с несколько более неоднозначными запросами, такими как светло-красное платье и темно-красное платье, в которых светлый и темный — модификаторы одного цвета:

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

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

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

Классификация: От изображения к тексту

Теперь мы переходим от изображения к тексту для классификации: мы кодируем изображение модной вещи, которую хотим классифицировать, с помощью кодировщика изображений FashionCLIP и извлекаем ближайшие векторы меток через скалярное произведение:

Хитрость CLIP-подобных моделей заключается в том, что метки рассматриваются не как категориальные переменные, а как семантически значимые метки.

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

Благодаря предварительному обучению CLIP и бесконечным возможностям естественного языка у нас теперь есть классификатор, который не ограничен каким-либо конкретным набором меток, категорий или атрибутов: в то время как, конечно, первое приложение может использовать этот классификатор для новых продуктов в каталоге Farfetch, мы можем повторно использовать ту же модель для других наборов данных с другими метками или целями, например:

  • если поставщик не классифицирует обувь как «обувь на высоком каблуке» или «обувь на плоской подошве», мы можем добавить этот атрибут;
  • Если мерчендайзеры создают новые представления в каталоге — например, сопоставляют товары с стилями — мы можем классифицировать существующие товары в соответствии с новыми размерами («элегантность», «уличная одежда» и т. д.).

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

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

Мы сравниваем FashionCLIP с CLIP в двух разных задачах на разных наборах данных. Более подробная информация о настройке приведена в документе, цель этого раздела — просто показать, что при использовании FashionCLIP вместо CLIP для задач, связанных с модой, происходит повышение производительности.

Для классификации Zero-Shot мы используем три разных набора данных (KAGL, DEEP и FMNIST), которые должны служить в качестве наборов данных вне распространения (мы знаем из других экспериментов, что мы работаем намного лучше, чем CLIP, с данными в домене, но это ожидал).

Результаты нулевого выстрела подтверждают, что наша модель работает так, как ожидалось!

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

Реализация Torch и веса HuggingFace

Благодаря работе Патрика, FashionCLIP очень прост в использовании. Вы можете просто загрузить модель и запустить нулевую классификацию с помощью простого метода, и все это с помощью Python!

fclip = [...load FCLIP ...]

test_captions = [
    "nike sneakers", "adidas sneakers", "nike blue sneakers", 
    "converse", "nike", "library", "the flag of italy",
    "pizza", "a gucci dress"
]
test_img_path = 'images/16790484.jpg'

fclip.zero_shot_classification([test_img_path], test_captions)

И вы также можете сделать поиск изображений!

candidates = fclip.retrieval(['shoes'])
print(candidates)

Прощание

Завершение долгого пути

Создание FashionCLIP было долгим и увлекательным приключением со старыми и новыми друзьями из самых крутых мест на земле. Результаты всегда вкуснее, когда вы получаете их с друзьями. Кроме того, некоторые из нас работают вместе годами и на самом деле никогда не встречались в реальной жизни!

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

Когда мы рассматриваем растущее число SaaS-игроков для интеллектуальных API-интерфейсов в розничной торговле — Coveo, Algolia, Bloomreach — нельзя недооценивать важность вертикальных моделей: поскольку компании B2B растут вместе с клиентами, надежность и возможность повторного использования важнее, чем чистая точность. Мы предвидим ближайшее будущее, в котором FashionCLIP — и DIYCLIP, ElectronicsCLIP и т. д.. — станет стандартным компонентом игроков машинного обучения B2B, обеспечивая быструю итерацию, стандартизацию данных и экономию за счет масштаба на совершенно другом уровне, чем это было возможно до сих пор.

Я также выступил в прошлом году на Pinecone с докладом о FashionCLIP:

Дополнительная демонстрация

В чем сила Open Source? Пабло увидел модель и обратился к пользовательскому интерфейсу, чтобы помочь нам проверить разницу между стандартным HuggingFace CLIP и FashionCLIP, который мы только что выпустили. это для себя здесь):

Круто, не правда ли?

Ограничения, предвзятость и справедливость

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

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

Что касается модальности изображений, FashionCLIP также склоняется к стандартным изображениям продуктов (в центре, на белом фоне). Это означает, что модель может работать хуже на изображениях, которые не имеют одинаковой структуры.

Больше вещей, которые мы сделали

FashionCLIP прошел долгий путь, но мы кое-что сделали, пока ждали официального релиза.

GradedRecs

В дополнение к нашей работе в FashionCLIP мы изучили рекомендации, пройдя скрытое пространство. Загляните в нашу бумагу, если вам интересно!

Справедливость в оценке системы рекомендаций

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

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