Новости ИИ

Marlin-2B компактная VLM для извлечения структурированной информации из видео

Heli
Автор
Heli
Опубликовано 21.05.2026
0,0
Views 11

NemoStation открыли исходники Marlin-2B — компактной визуально-языковой модели заточенной под два вопроса которые разработчики чаще всего задают к видео: что происходит и когда именно. При 2B параметрах модель конкурирует с Gemini-2.5-Flash на задачах временной привязки событий.

Что такое Marlin и какую проблему он решает

Большинство видео-VLM обучены отвечать на общие вопросы о содержимом видео. Для разработческих задач это неудобно: нужны не абзацы описания, а структурированные данные с точными таймкодами.

Marlin решает именно это. Модель обучена в двух режимах и возвращает машиночитаемый вывод который можно сразу использовать в пайплайне без дополнительного парсинга.

Два режима работы

Caption mode — marlin.caption()

Возвращает структурированный JSON со сценой и событиями с таймкодами с точностью до долей секунды:

result = marlin.caption("video.mp4")

print(result["caption"])  # full raw caption text (Scene: ... Events: ...)
print(result["scene"])    # parsed Scene paragraph
for ev in result["events"]:
    print(f"<{ev['start']:.1f} - {ev['end']:.1f}> {ev['description']}")

Где использовать: генерация субтитров для Reels и YouTube, индексация видеобиблиотеки, передача контекста агенту о том что и когда произошло в видеопотоке.

Find mode — marlin.find()

Принимает запрос на естественном языке и возвращает таймкоды начала и конца нужного фрагмента:

result = marlin.find("video.mp4", event="a person enters the room")

print(result["raw"])        # "From 14.3 to 18.2." raw model output
print(result["span"])       # (14.3, 18.2) tuple in seconds, or None on parse failure
print(result["format_ok"])  # True if output matched the trained format

Где использовать: поиск конкретных фрагментов в длинных записях, навигация по видео по смыслу, нарезка клипов по запросу.

Архитектура и обучение

Marlin — файнтюн Qwen3.5-2B с видео-capable визуальной башней. Обучение прошло в два этапа на одном H100.

Stage 1 — SFT. Supervised fine-tuning на корпусе из ~400K высококачественных аннотаций. Данные собраны из публичных датасетов (ActivityNet, Charades, TimeLens, WebVid-10M и других) и переразмечены с помощью Gemini-3-Flash в режиме thinking с последующей человеческой проверкой на критических сплитах. Teacher pipeline настроен на производство темпорально заземлённых атомарных событий с явными <start-end> границами.

Stage 2 — SimPO. Simple Preference Optimization на дистиллированном наборе предпочтений. Для каждого клипа кандидаты из SFT чекпоинта оцениваются более сильным судьёй Gemini-3-Flash по рубрике с фактической точностью, полнотой и темпоральным выравниванием. Получившиеся win/lose пары выравнивают Marlin без референсной модели — это дешевле и стабильнее чем DPO в этом масштабе.

Результаты на бенчмарках

На CaReBench (fine-grained video captioning) Marlin занимает первое место в классе 2B и сидит между Tarsier-34B и Gemini-1.5-Pro.

На DREAM-1K — между Tarsier-34B и Gemini-1.5-Pro, закрывая разрыв до учителя Gemini-2.5-Flash до 0.21/0.43 из 10.

На TimeLens-Bench (temporal grounding на Charades / ActivityNet / QVHighlights) Marlin бьёт Qwen2.5-VL-7B на +6.4 mIoU и матчит Gemini-2.5-Flash (non-thinking). Это при двухкратно меньшем количестве параметров.

Специализированные 7B+ модели (TimeLens-7B/8B, MiMo-VL, Time-R1) держат верхнюю границу за счёт задачно-специфичных данных при обучении. Marlin — сильнейшая общего назначения модель на этих задачах в классе 2B.

Системные требования

  • transformers >= 5.7.0
  • torch >= 2.11.0
  • torchcodec
  • qwen-vl-utils >= 0.0.14
  • Одна потребительская GPU — модель помещается в VRAM

Установить:

pip install "transformers>=5.7.0" "torch>=2.11.0" torchcodec "qwen-vl-utils>=0.0.14" av pillow

Важный момент про лицензию

Лицензия BSL-1.1 — не полностью открытая. Для коммерческого использования нужно проверить условия. Для исследований и некоммерческих проектов модель свободно доступна.

Быстрый Старт

Модель поставляется с пользовательским кодом для моделирования, который добавляет два удобных метода (caption и find) непосредственно в объект модели. При загрузке с помощью trust_remote_code=True возвращается готовый к использованию экземпляр.

import torch
from transformers import AutoModelForCausalLM

marlin = AutoModelForCausalLM.from_pretrained(
    "NemoStation/Marlin-2B",
    trust_remote_code=True,
    dtype=torch.bfloat16,
    device_map={"": "cuda"},
)
marlin.compile()  # optional — wraps torch.compile, faster after first call

Демо версия тут

Оф. статья модели

Авторизуйтесь, чтобы оставить комментарий.

Комментариев: 0

Нет комментариев.

Тут может быть ваша реклама

Пишите info@aisferaic.ru

Похожие новости