Тут я расскажу про основные подходы в генерации видео, материал будет полезен 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
Тут разбираем два подхода:
AnimateDiff
Text-2-Video Zero
AnimateDiff 2024
ссылка на статью
демо, можно погенерить видео самим
AnimateDiff — это plugin-подход: он не обучает диффузионную модель генерации видео с нуля, а расширяет уже обученные модели, чтобы они могли генерировать последовательности кадров, формируя видео.

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

Подход построен на том, что мы отдельно обучим встраиваемый модуль (Motion module) на генерацию видео, и он не зависит от конкретной модели Stable Diffusion, можем его переиспользовать с любой другой версией.
Обучение состоит из двух этапов (опционально из трех):
-
Domain-модуль, показанный розовым цветом на первом изображении, — это LoRa, добавленная к модели Stable Diffusion. Его обучают на видеокадрах с учётом того, что в видео часто встречаются дефектные фреймы: с вотермарками, блюром от движения, размытием и другими артефактами, поскольку кадры извлекаются случайным образом.
LoRA-модули специально учатся «впитывать» в себя все эти негативные эффекты. А во время инференса их отключают, чтобы они не влияли на результат, и итоговое видео получилось более чистым и качественным
-
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-модуль обучается так, чтобы модель могла сразу генерировать набор кадров в виде последовательности.
[Опционально] — Motion LoRA. Чтобы получать более контролируемые и интересные кадры, предлагается обучить дополнительную LoRA (обозначенную зелёным цветом), имитирующую определённые движения камеры. Такой датасет легко собрать: достаточно синтетически сгенерировать типовые движения вроде Zoom-in, Zoom-out и другие, используя простые инструменты для видеомонтажа.
Если вы ещё не знакомы с тем, что такое LoRA, то вскоре я сделаю об этом отдельный пост — отпишитесь в комментариях, если вам это актуально.
А пока можете посмотреть вот это видео — на мой взгляд, оно объясняет всё довольно доступно: ссылка.
Результат


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

Как видим, качество пока оставляет желать лучшего, но по мере перехода к более современным моделям мы увидим, как качество видео постепенно улучшается.
Text-2-Video Zero 2023
ссылка на статью
Этот метод позволяет вообще ничего не дообучать и просто сделать небольшой трюк над входными тензорами шума.
Но качество его конечно печальное.

Схема работы:
На вход хотим подать набор тензоров шума N штук, из которых будет создано N кадров итогового видео. Поэтому начальный шум N(0,1) мы расшумим немного через обученную Stable diffusion.
-
Затем на расшумленные картинки мы применим операцию связывающую все входные шумные тензоры между собой через матричное преобразование зависящий о гипперпараметра Lambda
На схеме видно, что в Stable Diffusion подаются уже чуть расшумленные кадры, где просвечивается конь. Чтобы преобразовать картиночную модель в видео модель, делается тот же самый трюк, с решейпом
Читай про сравнение работы в Яндексе и Сбере, с точки зрения МЛщика у меня в телеграм-канале
Буду рад вашей подписке!
Пишите в комментарии, чтобы было непонятно и про чтобы хотелось еще узнать