🎬 Как дать VLM понять длинное видео и не потерять смысл
5 минут видео при одном кадре в секунду — это 300 кадров. Если кодировать каждый в 280 визуальных токенов, получаем 84K. При 30 fps — уже 2,52 млн токенов! Снизить частоту кадров можно, но вместе с ними легко выбросить короткое событие, о котором спрашивает пользователь.
На AI RnD Day Никита Сидоров рассказал, как команда обходила эту проблему: от прореживания визуальных токенов до просмотра видео через инструменты и/или агентную систему. А DeepMind недавно выпустил хороший репорт со схожей идеей, мы писали об этом ранее.
📌 TLDR
Не обязательно отправлять весь ролик в VLM одним запросом. Можно удалять избыточные токены внутри кадров, научить модель запрашивать нужные временные фрагменты или распределить просмотр между агентами. В экспериментах команды tool-call режим сократил потребление контекста почти в 6 раз относительно бейзлайна. Агентная система оказалась точнее, особенно в подсчёте объектов и действий, но использовала в 7,3 раза больше токенов, чем tool-call. Это разные компромиссы между полнотой просмотра, качеством и стоимостью.
✂️ Убирать токены, а не целые кадры
Первый вариант — прунинг визуальных токенов без дообучения модели.
Подход DivPrune оставляет максимально непохожие друг на друга токены: вместо множества похожих оставляем разнообразие. HiPrune использует внимание разных слоёв визуального энкодера. Из средних слоёв выбираются object-centric anchors, рядом сохраняются буферные токены для локального окружения, а из глубоких слоёв — register-токены для глобального контекста. Остальные токены удаляются перед LLM.
В показанных экспериментах HiPrune сократил потребление контекста на 36%, DivPrune — на 27%. А качество на бенчмарках даже слегка подросло.
🔎 Дать модели инструмент "посмотреть сюда"
Следующий шаг — считать видео средой, к которой можно обращаться повторно. Модель обучают вызывать crop_video: передать путь к ролику и границы временного интервала, получить визуальные токены фрагмента и продолжить рассуждение. Если данных недостаточно — запросить ещё один участок.
Вместо одного фиксированного семплирования получается цикл: рассуждение → выбор интервала → просмотр → следующий запрос или ответ. Но у него своя точка отказа: модель может ошибиться в вызове инструмента.
А если просмотренные фрагменты всё равно заполняют контекст? Их содержание записывается в структурированную память: span, place, subjects, actions, details (время, место, участники, действия и детали). Затем ненужные фрагменты удаляются из контекста. Так не приходится держать всю визуальную историю одновременно, хотя сохранность деталей зависит уже и от качества этих записей.
По результатам команды, такой режим потреблял в 5,8 раз меньше контекста, с небольшим преимуществом по качеству: +1,2 п.п. относительно бейзлана!
🧩 Внимательно смотрим видео
Агентная схема устроена иначе. Видео делится на фрагменты (например, по 15 сек). Captioner-ы описывают фрагменты, Caption Inspector-ы анализируют описания, а главная модель собирает ответ на вопрос пользователя. Вместо выборочного просмотра обрабатываются все фрагменты, но между уровнями передаются уже текстовые описания и результат.
Такая агентная система дала +3,6 п.п. по качеству, а на задачах подсчёта объектов и действий +20 п.п. Важно: выигрыш именно на отдельном классе задач, а не на всём тесте. Обратная сторона — расход токенов: в 7,3 раза больше, чем у tool-call, и он растёт с длиной видео.
🔚 Выводы
Уменьшать fps — не единственный способ сэкономить (и жертвовать качеством): можно сокращать представление кадров или учить модель выбирать, какие фрагменты смотреть. Для поиска локального события полезен выборочный просмотр, а для подсчёта по всему ролику — полный проход с агентами, если бюджет это позволяет.
🔗 Более подробно — в презентации Никиты (в комментариях файлом) и в записи выступления (тайминг: 2:36:30).
#vlm #video #agents #multimodal #conference #paperwatch
Post #497
866

- ❤ 5
- ⚡ 4
- 👍 2
- 🔥 2