English translation is not available yet. Showing Russian content.
Как работает модели типа Kosmos-2 (grounding объектов на изображении)?
Краткий тезис
Kosmos-2 (Microsoft) — это мультимодальная языковая модель (VL-LLM), которая умеет не только описывать изображение, но и точно указывать, где на картинке находятся упомянутые объекты — то есть выполнять grounding. Для этого модель генерирует текст вместе с координатами bounding boxes, закодированными специальными токенами. Kosmos-2 обучается на парах «изображение — текст с разметкой» (COCO, Visual Genome) и может отвечать на вопросы вроде «Где кошка?», возвращая bounding box. Это ключевой шаг к RAG|agentic RAG — модель может «смотреть» на изображение и ссылаться на конкретные области.
1. Термин: Grounding (привязка к изображению)
Grounding — это способность модели связать текстовое упоминание объекта с его пространственным расположением на изображении. В отличие от простого распознавания объектов (object detection), grounding выполняется в контексте естественного языка: модель не просто выдаёт список объектов, а отвечает на вопрос или генерирует описание, одновременно указывая координаты.
Зачем grounding в RAG
В RAG|agentic RAG агент может получать изображения как часть запроса. Если агент умеет локализовать объекты, он может:
- уточнить вопрос («А какой именно стол?»);
- передать bounding box в другой инструмент (например, обрезку изображения);
- повысить интерпретируемость ответа.
2. Архитектура Kosmos-2
Kosmos-2 построена на основе трансформерной архитектуры с кросс-модальным вниманием. Основные компоненты:
| Компонент | Описание |
|---|---|
| Vision Encoder | CLIP ViT-L/14 — извлекает признаки из изображения (patch embeddings). |
| Resampler | Слой, который преобразует последовательность визуальных признаков в фиксированное число токенов (например, 64 или 256). |
| Language Model | Большая языковая модель (LLM) на основе трансформера (например, 1.3B или 7B параметров). |
| Grounding Head | Дополнительный линейный слой, который предсказывает координаты bounding box для каждого специального токена <box>. |
Отличие от Flamingo Kosmos-2 использует прямую токенизацию координат (см. раздел 3), а не отдельный детектор. Это позволяет модели генерировать bounding boxes авторегрессивно, как часть текста.
3. Токенизация bounding boxes
Kosmos-2 вводит токены|специальные токены для кодирования координат:
<box>— начало bounding box;<x1>,<y1>,<x2>,<y2>— координаты левого верхнего и правого нижнего углов, нормализованные к диапазону [0, 1] и дискретизированные (например, 0–1000);</box>— конец bounding box.
Пример сгенерированного текста
На изображении кошка <box><x1>120</x1><y1>50</y1><x2>400</x2><y2>350</y2></box> сидит на диване.
Как это работает на уровне токенов?
Координаты квантуются в целые числа от 0 до 999 (1000 значений). Каждое число представляется отдельным токеном из специального словаря (например, <loc_120>, <loc_50> и т.д.). Таким образом, bounding box занимает 4 токена + 2 токена-скобки.
Преимущество модель учится генерировать координаты так же, как обычные слова, используя ту же функцию потерь (cross-entropy). Не требуется отдельный детектор или дополнительная loss-функция для регрессии.
4. Обучение Kosmos-2
Модель обучается в два этапа:
4.1 Предобучение (Pre-training)
- Данные большие корпуса пар «изображение — текст» (LAION-5B, CC12M) без grounding разметки.
- Задача языковое моделирование с визуальным контекстом (image captioning, VQA).
- Цель научить LLM понимать изображения.
4.2 Fine-tuning на grounding данных
- Данные COCO (с bounding boxes), Visual Genome (с региональными описаниями), Flickr30k Entities.
- Формат каждое предложение содержит ссылки на объекты с координатами.
- Задача генерация текста с вставленными
<box>токенами. - Loss: стандартный cross-entropy на все токены, включая координатные.
Важно модель не использует отдельный детектор на этапе инференса — она генерирует bounding boxes авторегрессивно, опираясь на визуальные признаки и контекст.
5. Инференс (как модель отвечает на вопрос)
Рассмотрим запрос: «Где кошка?» + изображение.
- Кодирование изображения Vision Encoder + Resampler → последовательность визуальных токенов.
- Формирование промпта токены изображения + текстовый запрос.
- Авторегрессивная генерация: LLM генерирует токены один за другим. Когда модель решает, что нужно указать местоположение, она выводит
<box>, затем четыре координатных токена, затем</box>. - Постобработка координаты декодируются из токенов обратно в числа, умножаются на ширину/высоту изображения для получения пиксельных координат.
Пример вывода
Кошка находится <box><loc_120><loc_50><loc_400><loc_350></box>.
6. Сравнение с альтернативными подходами
| Подход | Пример модели | Grounding | Требует детектор | Генерация координат |
|---|---|---|---|---|
| Токенизация координат | Kosmos-2 | Встроенное | Нет | Авторегрессивная |
| Отдельный детектор | Flamingo + DETR | Внешнее | Да | Отдельный модуль |
| Prompt-based grounding | GPT-4V (через API) | Косвенное | Нет | Только текст (не координаты) |
| Referential language | OFA, UniTAB | Встроенное | Нет | Токенизация (аналогично Kosmos-2) |
Kosmos-2 выигрывает в простоте пайплайна (end-to-end) и возможности fine-tuning под конкретные домены.
7. Применение в agentic RAG
В контексте agentic RAG (вопросы 561–570) Kosmos-2 может выступать как инструмент агента:
- Поиск по изображению агент получает картинку, Kosmos-2 находит объекты, агент формирует запрос к векторной БД по описанию объекта.
- Уточнение запроса пользователь спрашивает «Что написано на вывеске?», Kosmos-2 локализует вывеску, затем OCR-модуль читает текст.
- Мультимодальный RAG изображение разбивается на регионы, каждый регион индексируется отдельно; Kosmos-2 помогает выбрать релевантные регионы.
Пример пайплайна
Пользователь: "Найди документ, где упоминается красная машина на картинке"
Агент:
1. Запускает Kosmos-2 на изображении → получает bounding box красной машины
2. Обрезает изображение по боксу
3. Отправляет обрезок в VLM (например, LLaVA) для описания
4. Использует описание как запрос к векторной БД
8. Ограничения и вызовы
- Точность координат дискретизация 0–999 даёт грубую привязку; для мелких объектов может не хватить.
- Длина контекста bounding boxes добавляют много токенов, что увеличивает затраты на генерацию.
- Обучение требует дорогой разметки (bounding boxes + текст).
- Сложные сцены модель может путать объекты при большом количестве перекрытий.
- Языковая зависимость grounding качество падает для редких языков (Kosmos-2 обучался в основном на английском).
9. Пет-проект для закрепления
Задача Реализовать простой grounding-сервис на основе Kosmos-2 (или его open-source аналога — например, Groma или Shikra).
Инструменты
- Python, PyTorch, Transformers (Hugging Face)
- Модель:
microsoft/kosmos-2-patch14-224(доступна на HF) - FastAPI для веб-сервиса
Шаги:
- Загрузить модель и процессор из transformers.
- Написать функцию
ground(image, query), которая:- принимает изображение (PIL.Image) и текстовый запрос;
- генерирует ответ с bounding boxes;
- парсит токены
<box>и извлекает координаты; - рисует bounding boxes на изображении (PIL.ImageDraw).
- Обернуть в FastAPI endpoint
/ground. - Протестировать на изображениях из COCO.
Ожидаемый результат
Веб-сервис, который по картинке и вопросу «Где ...?» возвращает изображение с нарисованным прямоугольником вокруг объекта.
Дополнительно интегрировать с простым RAG-агентом (например, на LangChain), который использует Kosmos-2 как инструмент для локализации.
10. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 561 | Что такое Agentic RAG и как он отличается от обычного RAG? |
| 562 | Как работает ReAct (Reasoning + Acting) в контексте RAG? |
| 563 | Как агент выбирает, какой инструмент использовать? |
| 565 | Как работает Visual RAG (изображения как источник знаний)? |
| 566 | Как объединять текстовую и визуальную информацию в RAG? |
Навигация
- Предыдущий: 563
- Следующий: 565
- Индекс: 00. Индекс разборов