Как стать автором
Обновить

RuCLIP tiny — быстрее, чем вы думаете

Время на прочтение2 мин
Количество просмотров4.6K

Совсем недавно компания Сбер представила ряд, адаптированных под русский язык, моделей машинного обучения под названием RuCLIP. Суть их работы заключается в возможности сравнения схожести текстового описания и изображения. Рассматривая результаты тестирования, мы заметили, что их модели довольно большие (150+ миллионов параметров) и при этом занимают довольно много места, связи с чем решили сделать свою маленькую, быструю и масштабируемую версию под названием RuCLIP tiny.

Данные

В наших экспериментах мы попробовали датасеты разного качества и остановились на выборе переведённых наборов COCO и CC12M. Они оба содержат пары текст + картинка. На тот момент CC12M ещё не был переведён, связи с чем пришлось обработать его с использованием гугл переводчика. датасет cc12m гугл переводчиком.

Выбор архитектуры

Архитектура CLIP’а состоит из энкодера для картинок и энкодера для текста. Их задача состоит в том, чтобы уменьшить косинусное расстояние между их выходными векторами.

В начале мы сделали архитектуру с cointegrated/rubert-tiny в качестве текстового энкодера и swin_tiny_patch4_window7_224 в качестве энкодера изображений. Но она показала себя не очень относительно следующей архитектуры.

Тогда мы решили обновить архитектуру. Для текстового энкодера мы выбрали недавно вышедший DeepPavlov/distilrubert-tiny-cased-conversational-v1, а для энкодера изображений - convnext_tiny, который быстрее, чем swin transformer.

Всего в новой архитектуре 38317537 параметров.

Тренировка модели

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

Поскольку мы тренировали на гугл колаб про, то у нас была всего одна NVIDIA Tesla P100 на 16 гб. К сожалению, у нас не получалось сделать размер батча выше, чем 256, а для contrastive loss он очень важен. Тогда мы стали искать различные статьи и наткнулись на эту статью. Там авторы рассказывают, как реализовать накопление градиента для contrastive loss. Мы это реализовали и смогли поставить размер батча равный 2048.

Результаты модели

Для оценки модели мы решили взять Google Colab Pro + с NVIDIA Tesla V100.

На датасете CIFAR100 мы получили 0.4662 top1 accuracy и 0.7318 top5 accuracy.

Скорость модели

batch size

encode_image

encode_text

total

2

11мс

4мс

15мс

8

12мс

4мс

16мс

16

13мс

3мс

16мс

32

12мс

4мс

16мс

64

13мс

4мс

17мс

Подведение итогов

В результате нашей работы мы сделали ru-CLIP-tiny, который способен оценивать схожесть картинок с текстом. Код и веса вы можете найти тут.

Хочется выразить благодарность Sber AI за предоставленные гранты, на которые были проведены исследования, в рамках Artificial Intelligence International Junior Contest (AIIJC).

Авторы

@Арсений Шахматов | @Максим Герасимов

Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Публикации

Истории

Работа

Python разработчик
130 вакансий
Data Scientist
75 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
11 сентября
Митап по BigData от Честного ЗНАКа
Санкт-ПетербургОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн