Авторы: Ксения Рябинова, Марк Страхов

Редактура: Тимур Фатыхов, Павел Батырь

ViT — сокращение от Vision Transformer. Это полноценный трансформер, способный работать с изображениями. Авторы ставили себе цель внести как можно меньше изменений в архитектуру. Поэтому в модели практически полностью сохранились особенности из NLP.

Модель состоит из 3 основных блоков:

Давайте рассмотрим все блоки по порядку.

Linear Projection

Трансформер работает с векторами, а у нас картинки размерности W x H x C. Чтобы преобразовать картинку в векторы для трансформера, в ViT используется блок Linear Projection.

Перед Linear Projection нам нужно выполнить такие шаги:

  1. Разрезаем картинку размерности (W x H x С) на патчи размерности (P x P x С);
  2. Патчи размерности (P x P x С) решейпим в вектора размерности (1 x (PPС)).

После того как мы получили векторы, передаем их в Linear Projection:

  1. Вектора размерности (1 x (PPС)) переводим в вектора размерности (1 x D) с помощью матрицы $E$ — это обычный линейный слой, только без функции активации;
  2. Складываем вектора размерности (1 x D) с векторами некоторой матрицы $E_{pos}$(обсудим ее чуть позже).

На рисунке 1 показано, как именно мы режем картинку на патчи и решейпим в вектор. В итоге мы получим набор векторов $[x^1_p;x^2_p;...;x^N_p]$, каждый из которых имеет размерность (1 x (PPС)).

Рисунок 1 - Преобразование входного изображения в векторы патчей

Рисунок 1 - Преобразование входного изображения в векторы патчей