В 2021 году особенно активно развивались языковые и визуальные трансформеры, что привело к появлению новых разработок в сфере мультимодального анализа данных. Ярким примером стала модель синтеза изображений по текстовым описаниям DALL-E от OpenAI. Команды Сбера — Sber AI и SberDevices — успешно ворвались в эту гонку трансформеров и обучили модели: ruDALL-E XL, которая доступна на GitHub, эксклюзивную ruDALL-E XXL (доступна в DataHub SberCloud ML Space), ruDALL-E Emojich для синтеза эмоджи, первую версию мультимодальной мультитаск архитектуры Fusion Brain, а с введением понятия гипермодальности создали универсальную модель ruDOLPH (про которую обязательно расскажем подробнее в одной из следующих статей).
Мы также не могли обойти стороной другое полезное приложение языковых и визуальных трансформеров, – модель CLIP от OpenAI, задача которой – определять “смысловую” близость текстов на естественном (английском) языке и изображений. Успешное обучение модели командой OpenAI уже позволило с уверенностью говорить о возможности решения таких задач компьютерного зрения, как, например, zero-shot классификация или zero-shot детекция объектов. В итоге мы поставили перед собой цель качественно “русифицировать” CLIP, чтобы модель можно было использовать напрямую на русском языке и обходить применение переводчиков в связке с англоязычной моделью CLIP. Первые шаги в этом направлении были сделаны нами ещё в начале 2021 года — тогда мы представляли модель ruCLIP Small (Russian Contrastive Language – Image Pre-training). Сейчас же мы хотим рассказать об ещё 6 версиях модели ruCLIP, которые мы обучили за это время (для более детального погружения в терминологию и суть проблемы советуем перечитать нашу прошлую статью по ruCLIP Small).
В релиз вошли следующие версии модели ruCLIP, которые отличаются количеством слоев энкодера ViT, размером использованного патча (14×14, 16×16, 32×32) и размерами входных изображений — 224×224, 336×336 и 384×384 пикселя, соответственно. Семантика названия моделей выглядит следующим образом:
-
ruCLIP Base [vit-base-patch16-384] exclusive ☁️DataHub SberCloud only ️
-
ruCLIP Large [vit-large-patch14-336] exclusive ☁️DataHub SberCloud only
Первые 4 модели доступны для открытого пользования на GitHub, две из них — в хабе предобученных моделей, датасетов и контейнеров – DataHub SberCloud ML Space, а последние две, – самые большие можно скачать только через DataHub.
Все новые версии ruCLIP были обучены на открытых данных, собранных из Рунета, а также на данных экосистемы Сбера. Всего удалось собрать около 240 млн уникальных пар “изображение-описание на естественном языке”. Модель мы обучали в течение 12 дней на платформе SberCloud ML Space и суперкомпьютере Christofari Neo, используя распределенное обучение на 256 GPU Tesla A100, что существенно превосходит ресурсы, затраченные в ходе первого обучения ruCLIP Small. Важно подчеркнуть, что в новых версиях при обучении использовался батч размера 32768, что соответствует тому, как обучалась оригинальная модель CLIP (в версии ruCLIP Small размер батча был равен 16).
В основе новых версий ruCLIP по-прежнему лежат две составляющие:
-
Image Encoder — энкодер, формирующий векторное представление изображений. В основе нашей модели остался хорошо известный ViT.
-
Text Encoder — энкодер, формирующий векторное представление текстовых описаний. В отличие от модели ruCLIP Small, мы не стали использовать RuGPT3Small, а взяли текстовый энкодер — трансформер со следующими параметрами:
-
для Base версий
-
Context Length: 77
-
Transformer Layers: 12
-
Transformer Width: 512
-
Transformer Heads: 8
-
-
для Large версий
-
Context Length: 77
-
Transformer Layers: 12
-
Transformer Width: 768
-
Transformer Heads: 12
-
Данные
Как мы уже упоминали ранее, для обучения ruCLIP использовался датасет, состоящий из 240М пар “текстовое описание-изображение” и представляющий из себя расширенную версию обучающего датасета ruDALL-E. Следует отметить, что наш датасет является одним из самых больших русскоязычных датасетов, содержащих пары “текстовое описание-изображение”, но на фоне существующих англоязычных конкурентов наш сет далек по объёму от лидеров списка, что можно видеть в таблице 1.
Таблица 1 — Сравнение объемов обучающих выборок для различных моделей
|
Модель |
ruCLIP |
||||
|
Количество пар |
3M |
240M |
400M |
1.8B |
6.6B |
Лидерство по объемам данных принадлежит Google с их моделями ALIGN и BASIC. В первой из них данные собраны на основе Conceptual Captions с упрощённой фильтрацией данных. Во второй модели набор данных для ALIGN дополняется приватным датасетом JFT-3B.
Особенности обучения
Процесс обучения был довольно интересный, и о его этапах хочется рассказать подробнее. Начнем с модели, основанной на ViT-Large. На первом этапе проводилось обучение ruCLIP Large [vit-large-patch14-224] с нуля на основе собранного датасета. Обучение этой модели выполнялось в течение 380К итераций. Далее, изменив размер входных данных и проведя обучение в течение еще 15К итераций была получена модель ruCLIP Large [vit-large-patch14-336] exclusive. Что касается ViT-Base версий модели, то они обучались путем тюнинга английской модели в течение 140К итераций. В результате были получены модели ruCLIP Base [vit-base-patch16-224] и ruCLIP Base [vit-base-patch32-224]. Изменив размер входных изображений до 384 и выполнив тюнинг в течение еще 20К итераций были получены модели ruCLIP Base [vit-base-patch32-384] и ruCLIP Base [vit-base-patch16-384] exclusive.
Наглядно процесс обучения представлен ниже на графиках изменения значений loss (рисунок 1). Также для каждого процесса обучения показана методика изменения значений learning rate.

На рисунке 2 показан график изменения среднего значения accuracy для всех датасетов в процессе обучения модели ruCLIP Large [vit-large-patch14-224].
![Рисунок 2 - График изменения среднего значения accuracy для всех датасетов в процессе обучения ruCLIP Large [vit-large-patch14-224] Рисунок 2 - График изменения среднего значения accuracy для всех датасетов в процессе обучения ruCLIP Large [vit-large-patch14-224]](https://habrastorage.org/getpro/habr/upload_files/51c/2a2/58e/51c2a258edf14b857c88fbd78ccf7039.jpg)
Пример работы
Для запуска возьмем изображение жизнерадостного щеночка (рисунок 3) и закинем его в код инференса нашей модели, заранее определив набор классов для zero-shot классификации.

import ruclip import torch import requests from PIL import Image from io import BytesIO url_dog = "https://ichef.bbci.co.uk/news/640/cpsprodpb/475B/production/_98776281_gettyimages-521697453.jpg" response = requests.get(url_dog) image = Image.open(BytesIO(response.content)) device = 'cuda' clip, processor = ruclip.load('ruclip-vit-base-patch32-384', device=device) classes = ['кошка', 'собачка', 'мышка', 'машина', 'стол', 'дом', 'жидкость'] predictor = ruclip.Predictor(clip, processor, device, bs=8) with torch.no_grad(): text_latents = predictor.get_text_latents(classes) pred_labels = predictor.run([image], text_latents) print(f'На изображении {classes[pred_labels[0]]}') -------------------------------------------------- На изображении собачка
В результате получили, что с близкой к наибольшей вероятностью изображение было отнесено к классу “собачка”, что не может не радовать. Дальше мы покажем результаты работы нашей самой большой доступной модели ruCLIP Large [vit-large-patch14-224] на данных из разных доменов и продемонстрируем ее жизнеспособность в задачах zero-shot и few-shot классификации.
В случае, если захочется воспользоваться эксклюзивными версиями модели ruCLIP из DataHub SberCloud ML Space, то с инструкциями можно ознакомиться по ссылкам ruCLIP Base [vit-base-patch16-384] exclusive и ruCLIP Large [vit-large-patch14-336] exclusive.
Оценка качества. Сравнение моделей
В ходе экспериментов мы преследовали несколько целей. Первая – посмотреть насколько хороши разные модели ruCLIP на данных различной природы, а вторая – сравнить качество нашего решения с использованием комбинации переводчика OPUS-MT ru-en и оригинальной модели CLIP. Цифры ниже все скажут за себя.
Про метрики
В первую очередь оценка качества модели проводится с использованием стандартной косинусной метрики. Текстовые описания трансформируются в свои эмбеддинги, изображения — в свои, далее считаем близость и выбираем лучшую пару.
Для демонстрации снова возьмем те же самые изображения, которые использовались в ноутбуке оригинальной модели CLIP и в статье про ruCLIP Small. Среди наших моделей возьмем самую большую открытую модель ruCLIP Large [vit-large-patch14-224] и проверим ее качество. Косинусная близость между текстами и изображениями для модели ruCLIP Large [vit-large-patch14-224] также показана ниже на рисунке 4.

Предсказания топ 5 классов для изображений с помощью ruCLIP Large [vit-large-patch14-224] показаны на рисунке 5.

В таблице 2 приведено сравнение реализаций модели ruCLIP в рамках задачи zero-shot классификации для датасетов разных доменов. Символом ? выделено лучшее значение метрики для каждого из датасетов. В таблице представлены результаты сравнения первой обученной модели ruCLIP Small, всех 6 реализаций модели ruCLIP, модели CLIP original с переводчиком OPUS-MT ru-en и модели CLIP original. В 8 из 18 датасетов модель ruCLIP Large [vit-large-patch14-336] exclusive показывает лучший результат среди всех сравниваемых, а в тех, где проигрывает, разница не очень значительная (пожалуй, кроме MNIST и FGVC Aircraft — здесь еще есть над чем потрудиться). Стоит отметить, что на датасете MNIST даже самым большим моделям ALIGN и BASIC не удается обойти CLIP по качеству. Для большинства датасетов (11 из 18) обученные нами модели обходят по качеству модель CLIP [vit-base-patch16-224] original + OPUS-MT. Преимущество модели CLIP original (правый столбец) можно объяснить существенно большим объемом обучающей выборки (400М vs 240М).
Таблица 2 — Значения точности zero-shot классификации для различных моделей
|
ruCLIP Small [rugpt3-small] |
ruCLIP Base [vit-base-patch32-224] |
ruCLIP Base [vit-base-patch16-224] |
ruCLIP Large [vit-large-patch14-224] |
ruCLIP Base [vit-base-patch32-384] |
ruCLIP Large [vit-large-patch14-336] exclusive |
ruCLIP Base [vit-large-patch16-384] exclusive |
CLIP [vit-base-patch16-224] original + OPUS-MT |
CLIP [vit-base-patch16-224] original |
|
|
Food101, acc |
0.137 |
0.505 |
0.552 |
0.597 |
0.642 |
0.712 ? |
0.689 |
0.664 |
0.883 |
|
CIFAR10, acc |
0.808 |
0.818 |
0.810 |
0.878 |
0.862 |
0.906 ? |
0.845 |
0.859 |
0.893 |
|
CIFAR100, acc |
0.440 |
0.504 |
0.496 |
0.511 |
0.529 |
0.591 |
0.569 |
0.603 ? |
0.647 |
|
Birdsnap, acc |
0.036 |
0.115 |
0.117 |
0.172 |
0.161 |
0.213 ? |
0.195 |
0.126 |
0.396 |
|
SUN397, acc |
0.036 |
0.452 |
0.462 |
0.484 |
0.510 |
0.523 ? |
0.521 |
0.447 |
0.631 |
|
Stanford Cars, acc |
0.023 |
0.433 |
0.487 |
0.559 |
0.572 |
0.659 ? |
0.626 |
0.567 |
0.638 |
|
DTD, acc |
0.169 |
0.380 |
0.401 |
0.370 |
0.390 |
0.408 |
0.421 ? |
0.243 |
0.432 |
|
MNIST, acc |
0.137 |
0.447 |
0.464 |
0.337 |
0.404 |
0.242 |
0.478 |
0.559 ? |
0.559 |
|
STL10, acc |
0.910 |
0.932 |
0.932 |
0.934 |
0.946 |
0.956 |
0.964 |
0.967 ? |
0.970 |
|
PCam, acc |
0.484 |
0.501 |
0.505 |
0.520 |
0.506 |
0.554 |
0.501 |
0.603 ? |
0.573 |
|
CLEVR, acc |
0.104 |
0.148 |
0.128 |
0.152 |
0.188 |
0.142 |
0.132 |
0.240 ? |
0.240 |
|
Rendered SST2, acc |
0.483 |
0.489 |
0.527 |
0.529 |
0.508 |
0.539 ? |
0.525 |
0.484 |
0.484 |
|
ImageNet, acc |
* |
0.375 |
0.401 |
0.426 |
0.451 |
0.488? |
0.482 |
0.392 |
0.638 |
|
FGVC Aircraft, mean-per-class |
0.020 |
0.033 |
0.043 |
0.046 |
0.053 |
0.075 |
0.046 |
0.220 ? |
0.244 |
|
Oxford Pets, mean-per-class |
0.462 |
0.560 |
0.595 |
0.604 |
0.587 |
0.546 |
0.635 ? |
0.507 |
0.874 |
|
Caltech101, mean-per-class |
0.590 |
0.786 |
0.775 |
0.777 |
0.834 |
0.835 ? |
0.835 ? |
0.792 |
0.883 |
|
Flowers102, mean-per-class |
0.063 |
0.401 |
0.388 |
0.455 |
0.449 |
0.517 ? |
0.452 |
0.357 |
0.697 |
|
Hateful Memes, roc-auc |
0.527 |
0.564 |
0.516 |
0.530 |
0.537 |
0.519 |
0.543 |
0.579 ? |
0.589 |
Ниже на рисунках 6 и 7 показаны результаты экспериментальных исследований zero-shot и few-shot классификации 10 моделями на 16 датасетах. Так же, как и в оригинальной статье, на признаках, которые извлекает CLIP для изображений, были обучены линейные классификаторы с использованием 1, 2, 4, 8 и 16 изображений для каждого класса. Это достаточно простой и понятный подход transfer learning, называемый linear probe, при котором обученная модель используется для извлечения признаков, и далее доучивается “голова” для необходимого количества классов при ограниченном наборе изображений для каждого класса. Поскольку признаки, которые извлекаются у моделей CLIP original и CLIP original + OPUS-MT одинаковые — для CLIP original + OPUS-MT нет отдельного графика few-shot классификации. Также мы посчитали усредненный few-shot график для лучшей модели ruCLIP Large exclusive без учета трех датасетов — PCam, Oxford Pets и FGVC Aircraft, на которых модель проигрывает достаточно сильно, и можно видеть (пунктирная линия), что среднее качество даже немного превосходит ruCLIP Small. Звездочками показаны значения средней zero-shot оценки моделей.

Отдельно для каждого датасета картина выглядит следующим образом (рисунок 7).

Почему же ruCLIP Small имеет такие хорошие показатели качества в результате few-shot классификации? Такой результат обусловлен тем, что при реализации ruCLIP Small использовался Image Encoder, состоящий из замороженных весов модели CLIP original и двух дополнительных линейных слоев, которые и подвергались обучению. Ввиду того, что для linear probe эксперимента используется только визуальная составляющая модели, качество ruCLIP Small должно быть очень близко к CLIP original. Посмотреть детальное сравнение всех 6 обученных моделей можно в нашем репозитории на GitHub.
В таблице 3 приведено сравнение значений метрики few-shot классификации для восьми моделей на разных датасетах. В составе сравнительной базы также выступают модели ruCLIP Small и CLIP original. И снова преимущество модели CLIP original (правый столбец) можно объяснить существенно большим объемом обучающей выборки (400М vs 240М).
Таблица 3 — Усредненные значения качества few-shot классификации для различных моделей
|
ruCLIP Base [vit-base-patch32-224] |
ruCLIP Base [vit-base-patch16-224] |
ruCLIP Large [vit-large-patch14-224] |
ruCLIP Base [vit-base-patch32-384] |
ruCLIP Large [vit-large-patch14-336] exclusive |
ruCLIP Base [vit-large-patch16-384] exclusive |
ruCLIP Small [rugpt3-small] |
CLIP [vit-base-patch16-224] original |
|
|
Food101 |
0.765 |
0.827 |
0.840 |
0.851 |
0.896 ? |
0.890 |
0.874 |
0.901 |
|
CIFAR10 |
0.917 |
0.922 |
0.927 |
0.934 |
0.943 |
0.942 |
0.948 ? |
0.953 |
|
CIFAR100 |
0.716 |
0.739 |
0.734 |
0.745 |
0.770 |
0.773 |
0.794 ? |
0.808 |
|
Birdsnap |
0.347 |
0.503 |
0.567 |
0.434 |
0.609 |
0.612 ? |
0.584 |
0.664 |
|
SUN397 |
0.683 |
0.721 |
0.731 |
0.721 |
0.759 ? |
0.758 |
0.753 |
0.777 |
|
Stanford Cars |
0.697 |
0.776 |
0.797 |
0.766 |
0.831 |
0.840 ? |
0.806 |
0.866 |
|
DTD |
0.690 |
0.734 |
0.711 |
0.703 |
0.731 |
0.749 ? |
0.738 |
0.770 |
|
MNIST |
0.963 |
0.974 |
0.949 |
0.965 |
0.949 |
0.971 |
0.985 ? |
0.989 |
|
STL10 |
0.957 |
0.962 |
0.973 |
0.968 |
0.981 ? |
0.974 |
0.977 |
0.982 |
|
PCam |
0.827 |
0.823 |
0.791 |
0.835 |
0.807 |
0.846 ? |
0.833 |
0.830 |
|
CLEVR |
0.356 |
0.360 |
0.358 |
0.308 |
0.318 |
0.378 |
0.524 ? |
0.604 |
|
Rendered SST2 |
0.603 |
0.655 |
0.651 |
0.651 |
0.637 |
0.661 ? |
0.568 |
0.606 |
|
FGVC Aircraft |
0.254 |
0.312 |
0.290 |
0.283 |
0.341 |
0.362 |
0.500 ? |
0.604 |
|
Oxford Pets |
0.774 |
0.820 |
0.819 |
0.730 |
0.753 |
0.856 |
0.895 ? |
0.931 |
|
Caltech101 |
0.904 |
0.917 |
0.914 |
0.922 |
0.937 ? |
0.932 |
0.937 |
0.956 |
|
HatefulMemes |
0.545 |
0.568 |
0.563 |
0.581 |
0.585 |
0.578 |
0.638 ? |
0.645 |
В дополнение мы еще посчитали корреляцию значений качества zero-shot и few-shot классификаций для разных моделей. Значение коэффициента корреляции нашей лучшей модели ruCLIP Large [vit-large-patch14-336] exclusive ближе других к значению оригинальной модели CLIP (рисунок 8), что говорит о хорошей обобщающей способности при переходе от zero-shot к few-shot задаче.

Что получили в итоге?
Нам удалось обучить несколько разных версий ruCLIP, которые на ряде датасетов успешно обошли оригинальную англоязычную модель CLIP с русско-английским переводчиком. Все обучение строилось на самостоятельно собранном датасете из 240 млн пар и заняло 12 дней на 256 Tesla GPU A100 суперкомпьютера Christofari Neo. Обширные исследования на датасетах из различных доменов показали применимость ruCLIP в задачах zero-shot и few-shot классификации. Это безусловно можно назвать успешным переносом на русский язык модели CLIP (еще один пример работы модели ruCLIP на рисунке 9).
В задачах zero-shot и few-shot классификации версии модели ruCLIP проигрывают оригинальной модели CLIP в связи с тем, что для обучения использовался датасет меньшего объема. Следует также отметить тенденцию к росту качества моделей с ростом объема обучающих выборок, что подтверждается преимуществом ALIGN и BASIC над CLIP ввиду существенно большего объема использованных данных.
Успешное обучение ruCLIP и доступность моделей в open source позволит эффективно решать многие задачи компьютерного зрения в различных продуктах и сервисах в режиме «zero-shot», то есть без необходимости дорогостоящего дообучения. Нам бы очень хотелось, чтобы все заинтересованные читатели загрузили себе доступные модели, потестировали их в режиме zero-shot и предложили свои идеи по дальнейшему развитию/применению проекта. В дополнение на платформе SberCloud ML Space для первых 100 клиентов-юридических лиц доступен грант в 180 000 руб. на тестовый доступ и дообучение моделей, а в модуле DataHub размещены open source и эксклюзивные реализации модели ruCLIP.

Коллектив авторов: @shonenkov@ddimitrov@Danyache@NastyaMittseva@boomb0om@Rybolos@king_menin@oulenspiegel@Gugutse@achertok
ссылка на оригинал статьи https://habr.com/ru/company/sberbank/blog/646447/
Добавить комментарий