Тут я расскажу про основные подходы в генерации видео, материал будет полезен 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 подаются уже чуть расшумленные кадры, где просвечивается конь. Чтобы преобразовать картиночную модель в видео модель, делается тот же самый трюк, с решейпом
Читай про сравнение работы в Яндексе и Сбере, с точки зрения МЛщика у меня в телеграм-канале
Буду рад вашей подписке!
Пишите в комментарии, чтобы было непонятно и про чтобы хотелось еще узнать