Автор: Герман Петров Редактура: Дмитрий Раков, Булат Бадамшин

<aside> 💙 Небольшое обращение к читателям В посте есть тогглы с кодом на случай, если захочется разобраться в деталях. Их можно пропускать — понимание общей картины не ухудшится. Вопрос к аудитории: поделитесь, пожалуйста, удобен ли вам формат со вставками кода и полезны ли они? Мы открыты к идеям по улучшению подачи материала. Вы также можете предложить свои темы для статей в комментариях под нашим постом в телеграме. Так мы сможем учитывать ваши пожелания по материалу, который было бы интересно изучать 😊

</aside>

Пререквизиты

Что можно прочитать, чтобы лучше и проще понять эту статью:

  1. FastVit — прямое продолжение идей MobileOne, поэтому крайне рекомендуем сначала ознакомиться с этим постом. Важно разобраться со следующими моментами (далее они будут использоваться без дополнительных пояснений):
    1. Термины: FLOPs, NMP, MAC, DOP, latency;
    2. Преимущества и недостатки multi-branch компонент в архитектурных блоках;
    3. Как репараметризация нивелирует недостатки multi-branch.
  2. В статье будет часто упоминаться архитектура трансформера в контексте CV. Есть пост с детальным разбором ViT: там раскрываются основные моменты работы трансформеров в целом, и в CV в частности.
  3. Дополнительно к пункту 2 — разбор работы Attention.

Введение

Архитектуры на базе трансформеров уже достигли SOTA-качества не только в родном для них NLP, но и в Computer Vision. Они равны или даже превосходят по качеству CNN модели в задачах классификации, детекции и сегментации. При этом традиционно такие модели требуют много вычислительных ресурсов как во время обучения, так и во время инференса. Авторы статьи FastViT ставили задачу совместить сильные стороны свёрточных и трансформерных архитектур для решения широкого круга CV задач в real-time и мобильных сценариях работы.

ViT: напоминание

Для начала вспомним, как устроена ViT. Модель состоит из 3-х основных блоков:

Рисунок 1. Архитектура FastViT. Слева: архитектура ViT целиком, справа: схема трансформер энкодера

Рисунок 1. Архитектура FastViT. Слева: архитектура ViT целиком, справа: схема трансформер энкодера

Рассмотрим основную часть модели ViT — энкодер трансформера. Он состоит из L трансформер-блоков. Каждый из блоков получает на вход и возвращает на выход эмбеддинги патчей, при этом ****число эмбеддингов и их размерность не меняется при прохождении через все энкодер-блоки сети.

Multi-Head Self-Attention отвечает за учет локальной и глобальной информации вместо сверток — это и есть концептуальное отличие трансформера от CNN архитектур. Делает он это путем перевзвешивания эмбеддингов скорами, которые меняются в зависимости от входных данных. Другими словами, Self-Attention осуществляет обмен информации между пространственными токенами. Поэтому его еще называют token mixer. Это важный момент, который пригодится в дальнейшем.

Также стоит немного поговорить о вычислительной сложности слоя Self-Attention. Она квадратная или O(n^2), где N — количество токенов в последовательности (количество патчей), так как мы должны посчитать скор попарно между всеми токенами. К тому же, не будем забывать, что Query, Key и Value — обучаемые параметры, которые вносят свой вклад в увеличение latency через MAC.

Таким образом, вычислительная сложность Self-Attention — это боттлнек, если мы хотим спроектировать модель, которая сможет работать на мобильных устройствах и несильно мощных CPU-ядрах.

MobileOne block: напоминание