Vision Transformers (ViT)
Patch embeddings, ViT архитектура, position embeddings, сравнение с CNN по эффективности и качеству.
Vision Transformers — трансформеры покоряют CV
В 2020 году Google Brain опубликовал ViT (Vision Transformer) — и доказал, что трансформеры, изначально созданные для NLP, могут работать с изображениями не хуже (а часто лучше) CNN. Это перевернуло CV: с тех пор трансформерные архитектуры доминируют на бенчмарках классификации, детекции и сегментации.
Как ViT видит изображение
Ключевая идея ViT — разбить изображение на патчи (обычно 16×16 пикселей) и подать их как последовательность токенов в стандартный Transformer encoder. Каждый патч проецируется в эмбеддинг фиксированной размерности. Добавляется [CLS] токен для классификации и positional embeddings для кодирования позиции.
- Patch Embedding — изображение 224×224 → 196 патчей 16×16. Каждый патч → линейная проекция → вектор размерности D (768 для ViT-Base). Это аналог токенизации в NLP.
- Positional Embeddings — обучаемые (learnable) позиционные эмбеддинги. Без них модель не знает, где расположен каждый патч. В отличие от CNN, ViT не имеет inductive bias про пространственную структуру.
- [CLS] Token — специальный токен, prepend к последовательности. Его финальное представление используется для классификации (через MLP head).
- Transformer Encoder — стандартные блоки: Multi-Head Self-Attention (MHSA) + FFN + LayerNorm + Residual connections. ViT-Base: 12 блоков, ViT-Large: 24, ViT-Huge: 32.
Достоинства и ограничения
ViT не имеет inductive bias CNN (locality, translation equivariance). Это и сила, и слабость:
- Глобальный контекст с первого слоя — self-attention видит все патчи сразу, в отличие от CNN, где receptive field растёт постепенно.
- Нужно МНОГО данных — оригинальный ViT обучался на JFT-300M (300M изображений). На ImageNet-1K без предобучения ViT уступал ResNet. DeiT решил эту проблему через knowledge distillation и аугментации.
- Квадратичная сложность — self-attention O(n²) по числу патчей. Для 224×224 это 196 токенов — терпимо. Для 1024×1024 — уже 4096 токенов, что дорого.
- Масштабируемость — ViT прекрасно масштабируется: больше данных и параметров → стабильный рост качества. Scaling laws работают для ViT так же хорошо, как для LLM.
DeiT — ViT для смертных
DeiT (Data-efficient Image Transformer) от Facebook показал, что ViT можно эффективно обучить на ImageNet-1K (без JFT). Ключевые ингредиенты: сильные аугментации (RandAugment, CutMix, Mixup), Stochastic Depth, knowledge distillation от RegNet. DeiT-Base достиг 81.8% top-1 на ImageNet — на уровне EfficientNet, но без предобучения на огромных данных.
ViT vs CNN — когда что использовать
- Много данных (>10M) → ViT побеждает. Глобальный контекст + масштабируемость.
- Мало данных (<100K) → CNN/гибриды лучше. Inductive bias CNN помогает при дефиците данных.
- Edge / mobile → CNN (MobileNet) или гибриды (EfficientFormer). Чистый ViT слишком тяжёлый.
- Dense prediction (detection, segmentation) → гибриды (Swin, ViTDet). Чистый ViT не имеет иерархии feature maps.
- Практика: в 2024+ большинство SOTA моделей — гибриды или чистые трансформеры. Знание ViT обязательно.
🎯 На собеседовании
Частые вопросы
Материалы
Оригинальная статья ViT от Google. Обязательное чтение.
DeiT — как обучить ViT на ImageNet-1K без JFT. Knowledge distillation + аугментации.
Подробный разбор ViT от Yannic Kilcher. Отлично объясняет архитектуру и мотивацию.