tgoop.com/jdata_blog/149
Last Update:
И про Patch Embedding.
Patch Embedding — преобразование картинки в матрицу признаков размерностью (n+1, d).
Simple описание преобразования (все цифры 1-7 на картинке 1:
1. Берем картинку (H, W, C) – высота, ширина, число каналов (1)
2. Режем её на N патчей (патч — квадрат меньшего размера), с размерностями (p, p, c), где p — сторона квадрата (2)
3. Эти патчи разглаживаем в вектор, выходит N векторов размерностью p*2xC (3)
4. Массив патчей, размерностью (N, p*2xC) умножается на обучаемый тензор
с размерностями (p*2xC, d) (4)
5. В результате получаем N патчей с размерностями (1, d) (5)
6. Добавляем [cls] токен, аналогичный BERT (картинка и интуитивный ответ тут, храни боже stack overflow) с размерностью (1, d), итого у нас вход – (N+1, d) (6)
6. К каждому патчу добавляем позиционный эмбеддинг с такой-же размерностью (1, d) (7)
Получаем z0 (картинка 2, 1) , вход, который далее проходит в слои энкодера (изучаем более абстрактные признаки в патчах) следующего вида (картинка 2, 2, 3):
MSA здесь multiheaded self-attention, слой же MLP — Multilayer perceptron c двумя слоями. Процесс совсем подробнее можно изучить в оригинале - статье, подробнее также про MSA в ViT описано здесь.
BY Data Blog

Share with your friend now:
tgoop.com/jdata_blog/149