Совсем недавно компания Сбер представила ряд, адаптированных под русский язык, моделей машинного обучения под названием 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).

Авторы

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

Комментарии (4)


  1. Sychuan
    02.02.2022 04:22

    на гугл колаб про

    Как получить доступ к колабпро вне США?


    1. S_A
      02.02.2022 12:19

      достаточно аккаунта google. вводите zip code 03222. или иной из списка no tax. Россия где-то тоже была в списке доступов, так что это не хак (а лайфхак).

      p.s. отписаться можно на pay.google.com


  1. nikolay_karelin
    02.02.2022 12:28
    +1

    Спасибо за статью, модель и код!
    Сколько машинного времени потребовалось для тренировки??


    1. cene655 Автор
      02.02.2022 12:43
      +1

      10 часов на tesla p100