🤖 Создание Vision Transformer с нуля: глубокое погружение 0:00
Vision Transformer (ViT) сегодня радикально меняет сферу компьютерного зрения, привнося механизмы самовнимания (self-attention) в обработку изображений. В данном руководстве Tunga Barak демонстрирует процесс создания модели Vision Transformer (ViT) с нуля. В ходе обучения разбираются ключевые компоненты: от патч-эмбеддингов (patch embeddings) и многоголового внимания (multi-head attention) до сборки полноценной архитектуры, а также проводится сравнение с известными моделями, такими как CLIP и SigLIP.
🧩 Основы работы Vision Transformer 0:39
В отличие от языковых моделей (LLM), работающих с текстовыми токенами, Vision Transformer (ViT) обрабатывает изображения, разбивая их на отдельные патчи (фрагменты).
- Разбиение на патчи: Изображение представляется как пазл, где каждый фрагмент является отдельным токеном.
- Эмбеддинги: Каждый патч преобразуется в вектор, отражающий его смысл, с добавлением позиционных эмбеддингов, чтобы модель понимала расположение фрагмента в исходном изображении.
- Самообслуживание (Self-attention): Позволяет патчам взаимодействовать друг с другом и учитывать контекст всей сцены.
- CLS-токен: Специальный токен, который собирает информацию со всех патчей, формируя итоговое представление всего изображения в одном векторе.
💡 Особенности модели SigLIP 2:41
В качестве основного примера для реализации выбрана модель SigLIP (Sigmoid Loss for Language Image Pre-training) от Google — улучшенная версия знаменитой модели CLIP от OpenAI.
По словам ведущего, ключевая проблема оригинального CLIP заключается в использовании функции потерь softmax, которая требует сравнения каждого изображения со всеми текстовыми описаниями в пакете (batch), что крайне затратно вычислительно. SigLIP заменяет это на sigmoid loss, позволяя модели фокусироваться на индивидуальных парах «изображение-текст», не отвлекаясь на весь остальной пакет.
Это делает процесс обучения:
- Более эффективным: Не нужно сравнивать всё сразу.
- Гибким: Позволяет параллелить вычисления, распределяя матрицы по разным устройствам.
🛠 Процесс реализации: шаг за шагом 11:58
Разработка ViT ведется с использованием библиотеки Transformers от Hugging Face. Процесс можно разделить на несколько ключевых этапов:
1. Подготовка данных 15:27
Изображения нельзя подавать в модель напрямую. Необходима предобработка:
- Изменение размера: До 224x224 пикселей.
- Нормализация: Используются средние значения и стандартные отклонения из датасета
ImageNet, что считается отраслевым стандартом. - Размерности: Добавляется
batch dimension, даже если обрабатывается всего один объект, так как трансформеры ожидают данные «пачками».
2. Архитектура эмбеддингов 19:34
Для преобразования изображения в эмбеддинги используется convolutional 2D слой.
- Размер ядра (kernel) и шаг (stride) устанавливаются равными размеру патча (в данном случае 16x16), что предотвращает их перекрытие.
- В результате изображение размером 224x224 дает 196 патчей (14x14) с вектором размерностью 768.
3. Механизм внимания (Self-Attention) 32:12
Это «ядро» модели, где каждый патч генерирует три вектора:
- Key (ключ): Информация, которую содержит токен.
- Query (запрос): Информация, которую токен ищет.
- Value (значение): Информация, которая агрегируется, если запрос и ключ совпадают.
Для соответствия весам оригинальных моделей Hugging Face реализация многоголового внимания (multi-head attention) выполняется векторизованно, что эффективнее с точки зрения работы с памятью.
🏁 Итоги разработки 56:19
На финальном этапе все компоненты (эмбеддинги, энкодер из 12 слоев и выходная нормализация) объединяются в единый класс SigLip Vision Transformer. Успешность реализации подтверждается проверкой: при загрузке предобученных весов Hugging Face разница между результатами собственной модели и оригинальной практически нулевая.
Готовая модель может использоваться как классификатор изображений или как «зрение» для мультимодальных языковых моделей.