Тут я расскажу про основные подходы в генерации видео, материал будет полезен ML/Computer vision разработчикам, чтобы держать руку на пульсе, и людям интересующимся нейросетями + AI

План следующий:

  • Методы адаптации T2I в T2V: AnimateDiff, Text2Video Zero

  • Обзор классических подходов: Stable Video Diffusion, CogVideo

  • Новые модельки 2025: Wan2.1, HunyuanVideo, FramePack

Это первая часть из списка статей, тут будет только про T2I в T2V

Intro

Сфера генеративного computer vision, особенно в задачах генерации видео, развивается сверхбурно в последние годы. Даже мне, как человеку, работающему в этой области, просто физически не удаётся читать все новые статьи вовремя. Поэтому я решил разобраться и отобрал ключевые методы и общие практики, знание которых позволит оставаться в теме по состоянию на май 2025 года.

Вот, для примера, количество ключевых статей по теме генерации видео за последние годы (из этой статьи)

Ключевые статьи по теме генерации видео
Ключевые статьи по теме генерации видео

И это только малая часть от всего огромного объема новых подходов в этой сфере, поэтому дальше я кратко перескажу ключевые аспекты:

Прервращаем T2I в T2V

Тут разбираем два подхода:

  1. AnimateDiff

  2. Text-2-Video Zero

AnimateDiff 2024

ссылка на статью

демо, можно погенерить видео самим

AnimateDiff — это plugin-подход: он не обучает диффузионную модель генерации видео с нуля, а расширяет уже обученные модели, чтобы они могли генерировать последовательности кадров, формируя видео.

Применение AnimateDiff
Применение AnimateDiff

Мы можем взять любую версию Stable Diffusion с civit.ai, дообучить свою собственную версию, например генерировать все в стиле аниме Наруто, и прибавив к нашему картиночному генератору Motion Modeling блок, получить видео на выходе.

Как это устроено?

Схема работы AnimateDiff
Схема работы AnimateDiff

Подход построен на том, что мы отдельно обучим встраиваемый модуль (Motion module) на генерацию видео, и он не зависит от конкретной модели Stable Diffusion, можем его переиспользовать с любой другой версией.

Обучение состоит из двух этапов (опционально из трех):

  1. Domain-модуль, показанный розовым цветом на первом изображении, — это LoRa, добавленная к модели Stable Diffusion. Его обучают на видеокадрах с учётом того, что в видео часто встречаются дефектные фреймы: с вотермарками, блюром от движения, размытием и другими артефактами, поскольку кадры извлекаются случайным образом.

    LoRA-модули специально учатся «впитывать» в себя все эти негативные эффекты. А во время инференса их отключают, чтобы они не влияли на результат, и итоговое видео получилось более чистым и качественным

  2. Motion module — это блоки на основе архитектуры трансформеров (обозначены голубым цветом на схемах) без каких-либо особых усложнений. Возникает логичный вопрос: каким образом Stable Diffusion, изначально предназначенная для работы с изображениями, сможет генерировать последовательности кадров, то есть видео?

    По умолчанию вход в Stable Diffusion имеет размерность:
    [batch, channels, height, width].

    А в случае видеогенерации нам нужен формат:
    [batch, time, channels, height, width].

    Чтобы решить это, используется простой и одинаковый трюк на всём протяжении архитектуры:
    видеотензоры "сплющиваются" во временном измерении —
    [batch, time, channels, height, width] → [(batch * time), channels, height, width].

    Таким образом, motion-модуль обучается так, чтобы модель могла сразу генерировать набор кадров в виде последовательности.

  3. [Опционально] — Motion LoRA. Чтобы получать более контролируемые и интересные кадры, предлагается обучить дополнительную LoRA (обозначенную зелёным цветом), имитирующую определённые движения камеры. Такой датасет легко собрать: достаточно синтетически сгенерировать типовые движения вроде Zoom-in, Zoom-out и другие, используя простые инструменты для видеомонтажа.


Если вы ещё не знакомы с тем, что такое LoRA, то вскоре я сделаю об этом отдельный пост — отпишитесь в комментариях, если вам это актуально.

А пока можете посмотреть вот это видео — на мой взгляд, оно объясняет всё довольно доступно: ссылка.

Результат

Базовая генерация
Базовая генерация
Базовая генерация
Базовая генерация

И вот генерация с Motion LoRa на Zoom-out

Motion LoRa Zoom-out
Motion LoRa Zoom-out

Как видим, качество пока оставляет желать лучшего, но по мере перехода к более современным моделям мы увидим, как качество видео постепенно улучшается.

Text-2-Video Zero 2023

ссылка на статью

Этот метод позволяет вообще ничего не дообучать и просто сделать небольшой трюк над входными тензорами шума.

Но качество его конечно печальное.

Схема работы Text-2-Video Zero
Схема работы Text-2-Video Zero

Схема работы:

  1. На вход хотим подать набор тензоров шума N штук, из которых будет создано N кадров итогового видео. Поэтому начальный шум N(0,1) мы расшумим немного через обученную Stable diffusion.

  2. Затем на расшумленные картинки мы применим операцию связывающую все входные шумные тензоры между собой через матричное преобразование зависящий о гипперпараметра Lambda

На схеме видно, что в Stable Diffusion подаются уже чуть расшумленные кадры, где просвечивается конь. Чтобы преобразовать картиночную модель в видео модель, делается тот же самый трюк, с решейпом


Читай про сравнение работы в Яндексе и Сбере, с точки зрения МЛщика у меня в телеграм-канале


Буду рад вашей подписке!
Пишите в комментарии, чтобы было непонятно и про чтобы хотелось еще узнать

Комментарии (0)