В 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, но и оценили их производительность на датасете CIFAR100 с использованием Nvidia-V100. Результаты оценки инференса реализаций показаны в таблице 4.
Таблица 4 - Оценка скорости работы (в iter/sec) реализаций модели ruCLIP на датасете CIFAR100
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  | 
|
|---|---|---|---|---|---|---|
iter/sec  | 
308.84 ????  | 
155.35  | 
49.95  | 
147.26  | 
22.11  | 
61.79  | 
Что получили в итоге?
Нам удалось обучить несколько разных версий 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.

Коллектив авторов: Алексей Шоненков, Андрей Кузнецов, Денис Димитров, Татьяна Шаврина, Даниил Чесаков, Анастасия Мальцева, Алёна Феногенова, Игорь Павлов, Антон Емельянов, Сергей Марков, Дарья Бакшандаева, Вера Шибаева, Андрей Черток
          
 
Nehc
В целом это очень правильно и нужно.
Вот в этой реплике: Нам удалось обучить несколько разных версий ruCLIP, которые на ряде датасетов успешно обошли оригинальную англоязычную модели CLIP с русско-английским переводчиком. Не хватает сопоставления, что бы понять на каких именно датасетах и насколько обогнали. Что бы понимать ради чего все это.
kuznetsoff87 Автор
В статье есть таблица сравнительная по различным датасетам - там сравниваются 6 версий наших и оригинальный CLIP с переводчиком OPUS-MT. Там как раз все видно
Nehc
Да, не увидел — мелким шрифтом в описании к таблице же: В 8 из 18 датасетов модель ruCLIP Large [vit-large-patch14-336] exclusive показывает лучший результат среди всех сравниваемых… Принято.
Ну т.е. для энтузиастов, для которых exclusive модели не доступны, как я понимаю, вариант «оригинальный CLIP с переводчиком OPUS-MT» — предпочтительнее, чем выложенные модели? ;)
kuznetsoff87 Автор
Нет, это не так) Если вы возьмете модель large-14-224, то получите результат, на уровне CLIP+OPUS-MT, а для ряда датасетов даже лучше, например, CIFAR10, Birdsnap, SUN397 и др.