中文翻译暂不可用,显示俄语原文。
Как работает vision encoder в GPT-4V / LLaVA?
Краткий тезис
Vision encoder — это компонент мультимодальной LLM, который преобразует изображение в последовательность визуальных токенов. В GPT-4V и LLaVA используется ViT-L/14 (Vision Transformer) на базе CLIP, который разбивает изображение на патчи 14×14 пикселей, проецирует их в эмбеддинги через линейный слой, добавляет позиционные кодировки и пропускает через трансформер. Полученные эмбеддинги затем через MLP-проектор отображаются в пространство LLM, где они обрабатываются как обычные текстовые токены. Это позволяет LLM понимать визуальную информацию без модификации архитектуры.
1. Термин: Vision Encoder и его роль в мультимодальных LLM
Vision encoder — это нейросеть, которая извлекает векторные представления (эмбеддинги) из изображений. В контексте мультимодальных LLM (Large Language Models) он выполняет функцию «моста» между пикселями и языковым пространством.
Роль
- Преобразовать изображение произвольного размера в фиксированное количество токенов (обычно 256–576 для ViT-L/14).
- Сохранить пространственную структуру и семантику сцены.
- Обеспечить совместимость с LLM: выходные эмбеддинги должны быть той же размерности, что и эмбеддинги текстовых токенов.
Без vision encoder LLM не может «видеть» — она работает только с текстом. Поэтому vision encoder — критический компонент для задач VQA (Visual Question Answering), image captioning, мультимодального RAG.
2. Архитектура Vision Transformer (ViT) — основа vision encoder
ViT (Vision Transformer) адаптирует архитектуру Transformer для изображений. Основные шаги:
- Разбиение на патчи (patch embedding): изображение делится на квадратные патчи фиксированного размера (например, 14×14 пикселей). Для изображения 224×224 получается (224/14)² = 256 патчей.
- Линейная проекция: каждый патч (3 канала × 14×14 = 588 значений) преобразуется в одномерный вектор размерности
d(обычно 1024) через обучаемый линейный слой. - Добавление позиционных эмбеддингов: поскольку Transformer не учитывает порядок, к каждому вектору патча прибавляется обучаемый позиционный вектор (1D или 2D).
- [[Вики/Добавление [CLS] токена|Добавление [CLS] токена]]: специальный токен, который агрегирует информацию со всех патчей и используется для классификации (в CLIP — для контрастивного обучения).
- Пропуск через Transformer encoder: стандартные блоки self-attention + MLP (обычно 24 слоя для ViT-L).
Формула для одного патча
x_patch = Flatten(patch) # размер 588
h = W @ x_patch + b # линейная проекция, размер d
h += pos_embedding # позиционный эмбеддинг
Пример кода (PyTorch-like):
class PatchEmbedding(nn.Module):
def __init__(self, img_size=224, patch_size=14, in_chans=3, embed_dim=1024):
super().__init__()
self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size)
def forward(self, x):
# x: (B, 3, 224, 224) -> (B, embed_dim, 16, 16) -> (B, 256, embed_dim)
x = self.proj(x)
x = x.flatten(2).transpose(1, 2)
return x
3. CLIP: предобучение vision encoder через контрастивное обучение
CLIP (Contrastive Language-Image Pre-training) — модель OpenAI, которая учит vision encoder и text encoder совместно. Vision encoder (ViT-L/14) обучается так, чтобы эмбеддинги изображений были близки к эмбеддингам соответствующих текстовых описаний в общем пространстве.
Процесс обучения
- Берётся батч из N пар (изображение, текст).
- Vision encoder и text encoder порождают эмбеддинги размерности d.
- Считается матрица косинусных сходств N×N.
- Применяется контрастивная loss (InfoNCE): диагональные элементы (правильные пары) должны быть максимальны, остальные — минимальны.
Результат vision encoder научается выделять семантически значимые признаки, инвариантные к стилю, освещению, ракурсу. Именно этот предобученный encoder используется в GPT-4V и LLaVA.
Параметры ViT-L/14
- Размер патча: 14×14
- Число слоёв Transformer: 24
- Размерность эмбеддингов: 1024
- Число голов внимания: 16
- Входное разрешение: 224×224 (но может быть адаптировано)
4. GPT-4V: как используется vision encoder (известные детали)
OpenAI не раскрыла полную архитектуру GPT-4V, но по косвенным данным (статьи, утечки, анализ поведения) можно восстановить:
- Vision encoder: CLIP ViT-L/14 (возможно, более новая версия ViT-bigG или SigLIP).
- Проектор: двухслойный MLP с GELU-активацией, который отображает эмбеддинги патчей (1024-d) в пространство LLM (например, 4096-d для GPT-4).
- Входной формат: изображение сначала ресайзится до 224×224 (или 336×336), затем encoder выдаёт 256 (или 576) токенов. Эти токены вставляются в последовательность текстовых токенов перед ответом.
- Обработка: LLM (GPT-4) видит эти токены как обычные текстовые — cross-attention не используется, только self-attention внутри LLM. Это значит, что визуальные токены участвуют в вычислении внимания наравне с текстовыми.
Особенности GPT-4V
- Поддержка нескольких изображений в одном запросе.
- Возможность указывать bounding boxes, маски, стрелки на изображении (через специальные токены).
- Высокое качество понимания сцены, но ограниченное разрешение (детали мелких объектов могут теряться).
5. LLaVA: архитектура и этапы обучения
LLaVA (Large Language and Vision Assistant) — открытая мультимодальная модель, построенная по принципу «vision encoder + проектор + LLM». Архитектура:
- Vision encoder: CLIP ViT-L/14 (заморожен на первом этапе).
- Проектор: простой двухслойный MLP (размерность 1024 → 4096 для LLaMA-2).
- LLM: Vicuna (на базе LLaMA-2) или LLaMA-3.
Обучение в два этапа
-
Pre-training (выравнивание): на датасете CC3M (Conceptual Captions) — 3 млн пар изображение-подпись. Замораживается vision encoder и LLM, обучается только проектор. Цель: научиться проецировать визуальные эмбеддинги в пространство LLM так, чтобы LLM могла генерировать осмысленные подписи.
-
Fine-tuning (инструкция): на датасете LLaVA-Instruct-150k — вопросы и ответы по изображениям. Размораживается LLM (или часть слоёв) и проектор, vision encoder остаётся замороженным. Цель: научиться отвечать на вопросы, следовать инструкциям, поддерживать диалог.
Формат входных данных
USER: <image>\nWhat is in this image?
ASSISTANT: A cat sitting on a mat.
Токен <image> заменяется на 256 визуальных токенов от проектора.
6. Проектор (MLP): преобразование визуальных эмбеддингов в токены LLM
Проектор — это небольшая нейросеть (обычно 1–2 слоя MLP), которая отображает эмбеддинги vision encoder в пространство LLM. Зачем он нужен?
- Размерность эмбеддингов vision encoder (1024) отличается от размерности LLM (4096 для LLaMA-2, 768 для GPT-2).
- LLM ожидает на входе токены определённой размерности, поэтому нужно линейное преобразование.
- Проектор также может выполнять нелинейное преобразование, чтобы лучше адаптировать визуальные признаки к языковому контексту.
Пример проектора в LLaVA
class Projector(nn.Module):
def __init__(self, vision_dim=1024, llm_dim=4096):
super().__init__()
self.fc1 = nn.Linear(vision_dim, llm_dim)
self.gelu = nn.GELU()
self.fc2 = nn.Linear(llm_dim, llm_dim)
def forward(self, x):
# x: (B, num_patches, vision_dim)
x = self.fc1(x)
x = self.gelu(x)
x = self.fc2(x)
return x
Количество визуальных токенов для изображения 224×224 с патчем 14×14 получается 256 токенов. Это сопоставимо с длиной текстового запроса (обычно 100–500 токенов). Такое количество позволяет LLM обрабатывать изображение без перегрузки контекста.
7. Сравнение GPT-4V и LLaVA
| Характеристика | GPT-4V | LLaVA |
|---|---|---|
| Vision encoder | CLIP ViT-L/14 (предп.) | CLIP ViT-L/14 |
| Проектор | MLP (2 слоя) | MLP (2 слоя) |
| LLM | GPT-4 (проприетарная) | Vicuna / LLaMA-2/3 (открытая) |
| Разрешение | 224×224 (адапт.) | 224×224 |
| Количество токенов | 256–576 | 256 |
| Обучение | Неизвестно (вероятно, end-to-end) | 2 этапа: pre-train + fine-tune |
| Доступность | API (платный) | Открытые веса |
| Производительность | Высокая (SOTA) | Хорошая (близка к GPT-4V на многих бенчмарках) |
| Поддержка нескольких изображений | Да | Да (в LLaVA-1.5) |
Ключевое различие GPT-4V, вероятно, обучался end-to-end (vision encoder тоже дообучался), что даёт более глубокую интеграцию. LLaVA замораживает vision encoder, что упрощает обучение, но может ограничивать качество.
8. Ограничения vision encoder
- Фиксированное разрешение: ViT-L/14 работает на 224×224. Если изображение больше, его приходится ресайзить, теряя детали. Мелкие объекты (текст, лица) могут стать неразличимыми.
- Потеря пространственной информации: хотя позиционные эмбеддинги сохраняют грубую структуру, детали расположения объектов могут размываться.
- Ограниченное количество токенов: 256 токенов — это компрессия изображения в ~16×16 сетку. Для сложных сцен этого может не хватить.
- Зависимость от предобучения: CLIP обучался на парах изображение-текст из интернета, поэтому может быть смещён в сторону западного контента и не понимать специфические домены (медицина, спутниковые снимки).
- Отсутствие cross-attention: в отличие от моделей типа Flamingo, где визуальные токены взаимодействуют с текстом через cross-attention, в GPT-4V/LLaVA они просто вставляются в последовательность. Это может снижать способность LLM фокусироваться на конкретных регионах изображения.
9. Альтернативные подходы: Q-Former и другие vision encoders
Q-Former (Querying Transformer) — используется в BLIP-2. Это лёгкий трансформер, который «запрашивает» информацию из vision encoder через обучаемые query-токены. Преимущества:
- Меньше визуальных токенов (32–64), что снижает нагрузку на LLM.
- Лучшая компрессия и извлечение релевантных признаков.
- Возможность дообучать Q-Former без изменения vision encoder.
Другие vision encoders
- SigLIP (Google) — улучшенная версия CLIP с сигмоидной loss, более эффективен.
- InternViT (InternLM) — большой ViT с 6 млрд параметров, используется в InternVL.
- DINOv2 — self-supervised ViT, хорош для понимания структуры, но хуже для семантики.
Сравнение подходов
| Модель | Vision encoder | Проектор | Число токенов | Особенность |
|---|---|---|---|---|
| GPT-4V | CLIP ViT-L/14 | MLP | 256 | End-to-end обучение |
| LLaVA | CLIP ViT-L/14 | MLP | 256 | Простота, открытость |
| BLIP-2 | ViT-g/14 | Q-Former | 32 | Компактность, эффективность |
| Flamingo | NFNet-F6 | Perceiver Resampler | 64 | Cross-attention с текстом |
10. Роль vision encoder в Agentic RAG (мультимодальный retrieval)
В Agentic RAG агент может получать изображения от пользователя или извлекать их из базы знаний. Vision encoder используется для:
- Индексации изображений: эмбеддинги изображений (от vision encoder) сохраняются в векторной БД.
- Поиска по изображению: query-изображение кодируется, ищутся похожие изображения.
- Мультимодального поиска: комбинированный запрос (текст + изображение) — эмбеддинги объединяются (конкатенация, взвешенная сумма) и ищутся в едином пространстве.
- Извлечения информации: vision encoder может выделять текст на изображении (OCR), объекты, сцены, которые затем передаются LLM для ответа.
Пример пайплайна
- Пользователь загружает фото товара.
- Vision encoder (CLIP) превращает фото в эмбеддинг.
- Retrieval находит похожие товары в БД.
- LLM (с vision encoder) анализирует найденные изображения и генерирует ответ.
11. Пет-проект для закрепления
Задача Реализовать простую мультимодальную модель «vision encoder + проектор + LLM» для ответов на вопросы по изображениям (VQA). Использовать предобученный CLIP ViT и небольшую LLM (например, GPT-2 или TinyLLaMA).
Инструменты
- Python, PyTorch, Hugging Face Transformers, CLIP (openai/clip-vit-large-patch14).
- Датасет: COCO VQA (или его подмножество).
- Библиотека для обучения: Hugging Face Trainer или собственный цикл.
Шаги:
- Загрузить CLIP vision encoder и заморозить его.
- Создать проектор (MLP 1024 → 768 для GPT-2).
- Загрузить GPT-2 (или TinyLLaMA) и заморозить её (кроме embedding layer, если нужно).
- Написать класс MultimodalModel, который:
- Принимает изображение и текст вопроса.
- Кодирует изображение через CLIP → проектор → визуальные токены.
- Добавляет токены вопроса и визуальные токены в одну последовательность.
- Пропускает через LLM и получает ответ.
- Обучить проектор на датасете VQA (1000–5000 примеров) с loss cross-entropy на токенах ответа.
- Протестировать на новых изображениях.
Ожидаемый результат Модель сможет отвечать на простые вопросы («Что на картинке?», «Какого цвета объект?») с точностью ~60–70% на тестовой выборке. Вы получите практическое понимание, как работает проекция визуальных признаков в языковое пространство.
12. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 537 | Как работает мультимодальный эмбеддинг? |
| 539 | Как обучать vision encoder для RAG? |
| 540 | Что такое Q-Former и как он используется? |
| 541 | Как интегрировать изображения в RAG-систему? |
| 542 | Сравнение GPT-4V и LLaVA: производительность и стоимость |
| 543 | Как fine-tune vision encoder под специфический домен? |
Навигация
- Предыдущий: 537
- Следующий: 539
- Индекс: 00. Индекс разборов