Как работает Q-Former в BLIP-2 и зачем он нужен?

Краткий тезис

Q-Former (Querying Transformer) — это лёгкий модуль-мост между замороженным vision encoder (ViT) и замороженным LLM в модели BLIP-2. Он использует небольшое количество обучаемых query tokens (обычно 32), которые через механизм cross-attention извлекают из визуальных признаков только релевантную информацию и передают её в LLM в виде фиксированного по длине вектора. Главная цель — дать возможность LLM «понимать» изображения без дорогостоящего дообучения большой языковой модели, сохраняя её исходные знания и снижая вычислительные затраты. Недостаток — bottleneck: информация сжимается в малое число токенов, что может приводить к потере деталей.


1. Контекст: проблема мультимодального понимания

До BLIP-2 существовало два основных подхода к объединению зрения и языка:

  • Fine-tuning всей модели (например, LLaVA, Flamingo) — требует огромных вычислительных ресурсов и может испортить предобученные знания LLM.
  • Прямое конкатенирование визуальных признаков (например, VisualGPT) — приводит к несоответствию размерностей и требует адаптации LLM.

BLIP-2 предложил компромисс: оставить и encoder|vision encoder, и LLM frozen (замороженными), а обучать только маленький мост — Q-Former. Это позволяет использовать мощные предобученные компоненты без их изменения, экономя память и время.

Термин «Frozen» — параметры модели не обновляются во время обучения, они фиксированы. Это снижает риск катастрофического забывания и ускоряет обучение.


2. Архитектура Q-Former

Q-Former состоит из двух ключевых частей:

  • Набор обучаемых query tokens — обычно 32 токена, каждый размером d_model (например, 768). Они инициализируются случайно и в ходе обучения учатся «запрашивать» нужную информацию из изображения.
  • Трансформер с cross-attention — стандартный трансформер-декодер, который на каждом слое выполняет:
    1. Self-attention между query tokens (чтобы они обменивались информацией).
    2. Cross-attention с выходом vision encoder (ViT) — query tokens «смотрят» на карту признаков изображения и выбирают, что взять.
    3. Feed-forward слой.

Выход Q-Former — те же 32 токена, но уже обогащённые визуальной информацией. Они подаются на вход LLM (обычно через проекционный слой, если размерности не совпадают).

Схема работы

Изображение → ViT (frozen) → карта признаков (N x d_v)
Query tokens (32 x d_q) → Q-Former (cross-attn с картой) → 32 токена → проекция → LLM (frozen) → ответ

3. Зачем нужны query tokens, а не просто усреднение признаков?

Если бы мы просто усреднили все визуальные признаки (global average pooling), мы бы потеряли пространственную структуру и детали. Query tokens действуют как «внимательные фильтры»: каждый токен может специализироваться на определённом аспекте изображения (объект, цвет, текст, фон). Благодаря cross-attention они динамически выбирают, какие области изображения важны для текущего запроса (если есть текстовый запрос, он может влиять на query tokens через дополнительный cross-attention с текстом — в BLIP-2 это используется для задач VQA).

Пример: Для вопроса «Какого цвета машина?» один query token может сфокусироваться на области машины, другой — на цвете, третий — на фоне. LLM получает компактное, но релевантное представление.


4. Обучение Q-Former (три этапа в BLIP-2)

BLIP-2 обучает Q-Former в три этапа, каждый со своей целью:

ЭтапЧто замороженоЧто обучаетсяЦель
1. Предобучение на изображенияхViTQ-FormerНаучить query tokens извлекать визуальные признаки (задачи: ITC, ITM, ITG)
2. Выравнивание с LLMViT + Q-FormerПроекция на LLMНаучить LLM понимать выход Q-Former (задача: language modeling на текстах с изображениями)
3. (Опционально) Fine-tuning под задачуViT + Q-Former + LLM (LoRA)LoRA-адаптерыАдаптация под конкретную задачу (VQA, captioning)

Термин «ITC» (Image-Text Contrastive) — контрастивное обучение: сближать эмбеддинги изображения и текста в едином пространстве. ITM (Image-Text Matching) — бинарная классификация: соответствует ли изображение тексту. ITG (Image-grounded Text Generation) — генерация текста на основе изображения (например, captioning).


5. Преимущества Q-Former

  • Экономия ресурсов: не нужно дообучать LLM с миллиардами параметров. Обучается только Q-Former (сотни миллионов параметров вместо миллиардов).
  • Сохранение знаний LLM: frozen LLM не забывает свои исходные способности (логика, факты, языковые навыки).
  • Гибкость: можно заменить LLM на другую (например, LLaMA вместо OPT) без переобучения Q-Former, достаточно переобучить только проекцию.
  • Фиксированная длина входа для LLM: 32 токена — это мало, LLM не перегружается визуальными данными.

6. Недостатки и ограничения

  • Bottleneck: 32 токена — это сильное сжатие. Мелкие детали (текст на изображении, мелкие объекты) могут теряться.
  • Зависимость от vision encoder: качество признаков ViT напрямую влияет на результат. Если ViT плохо видит, Q-Former не сможет «вытянуть» информацию.
  • Сложность обучения: три этапа требуют тщательной настройки гиперпараметров и больших датасетов.
  • Не подходит для задач, где нужно точное пространственное соответствие (например, детекция объектов) — Q-Former не выдаёт bounding boxes.

7. Сравнение с альтернативными подходами

ПодходПримерFrozen компонентыОбучаемые компонентыРазмер bottleneck
Q-Former (BLIP-2)BLIP-2ViT + LLMQ-Former + проекция32 токена
Прямая конкатенация (Flamingo)FlamingoViTLLM + cross-attn слои~256 токенов (больше)
Vision Encoder + Adapter (LLaVA)LLaVAViTLLM + проекционный слой1 токен (CLS)
Fine-tuning всей моделиMiniGPT-4ничеговсе параметрынет bottleneck

Q-Former занимает промежуточное положение: bottleneck меньше, чем у Flamingo, но больше, чем у LLaVA. Это даёт баланс между сжатием и выразительностью.


8. Связь с RAG и Agentic RAG

В контексте Agentic RAG Q-Former может использоваться как мост между мультимодальными данными и LLM-агентом. Например, агент получает изображение, Q-Former преобразует его в компактное представление, которое затем подаётся в LLM вместе с retrieved текстовыми документами. Это позволяет агенту «видеть» и принимать решения на основе визуальной информации без необходимости хранить большие изображения в контексте.

Также Q-Former можно рассматривать как аналог retriever в RAG: он «извлекает» из изображения только релевантные признаки, сжимая их, подобно тому, как retriever выбирает релевантные чанки из базы.


9. Пример кода (упрощённый, с использованием transformers)

import torch
from transformers import Blip2Processor, Blip2ForConditionalGeneration

# Загрузка модели BLIP-2
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")

# Подготовка изображения и текста
image = processor.image_processor(images=..., return_tensors="pt").pixel_values
text = "What is in the image?"

# Генерация
inputs = processor(images=image, text=text, return_tensors="pt")
out = model.generate(**inputs, max_new_tokens=50)
print(processor.decode(out[0], skip_special_tokens=True))

Внутри Blip2ForConditionalGeneration Q-Former работает автоматически: он принимает признаки ViT и query tokens, выполняет cross-attention и передаёт результат в OPT (LLM). Пользователь не видит деталей, но понимание архитектуры помогает отлаживать и модифицировать модель.


10. Когда стоит использовать Q-Former, а когда нет?

Использовать Q-Former, если:

  • Нужно быстро добавить визуальное понимание в существующий LLM без его дообучения.
  • Есть ограничения по GPU (нельзя обучать LLM).
  • Задача не требует высокой детализации (captioning, VQA общего характера).

Не использовать, если:

  • Нужно точное распознавание текста на изображении (OCR) — bottleneck потеряет символы.
  • Требуется генерация изображений (Q-Former не предназначен для этого).
  • Можно позволить себе дообучить LLM (например, с LoRA) — тогда прямое конкатенирование признаков даст меньше потерь.

Пет-проект для закрепления

Задача Реализовать упрощённую версию Q-Former для задачи image captioning на небольшом датасете (например, Flickr8k).

Инструменты

  • Python, PyTorch
  • Предобученный ViT (например, google/vit-base-patch16-224)
  • Предобученный LLM (например, distilgpt2)
  • Датасет: nlphuji/flickr8k (Hugging Face)

Шаги:

  1. Заморозить ViT и LLM.
  2. Создать класс QFormer с learnable query tokens (32 токена, размер 768) и трансформером с cross-attention.
  3. Написать forward: ViT → карта признаков → Q-Former → проекция (линейный слой) → LLM.
  4. Обучить только Q-Former на задаче генерации подписи (cross-entropy loss).
  5. Оценить качество (BLEU, CIDEr) и сравнить с baseline (простое усреднение признаков).

Ожидаемый результат Q-Former покажет более высокие метрики, чем усреднение, и будет обучаться быстрее, чем fine-tuning всей модели.


Связь с другими вопросами

ВопросТема
539Архитектура Agentic RAG
541Multi-modal RAG с изображениями
520Fine-tuning LLM (LoRA, адаптеры)
530Vision Transformers (ViT)
500Механизм внимания (attention)
510Cross-attention в трансформерах

Навигация