«Любой из живущих в наше время может претендовать на участие в киносъёмке»,  Вальтер Беньямин, основоположник современной теории фотографии.

В последние несколько лет активно развиваются генеративные модели, причём синтезировать с хорошим качеством уже сейчас получается и тексты, и аудио, и изображения, и видео, и 3D, и другие модальности. Если говорить про генерацию изображений, то стремительность прогресса в этом направлении обусловлена развитием диффузионного подхода и успехами при обучении больших диффузионных моделей (таких как DALL•E 2/3, Imagen, Stable Diffusion, Kandinsky 2.X). Этот тип моделей показывает также отличное качество синтеза видео (ImagenVideo, Make-a-Video, Video LDM, GEN-1, GEN-2, Pika Labs, ZeroScope) и 3D-объектов (DreamFusion, Magic3D). При этом каждый месяц мы можем наблюдать за появлением новых open source (и не только) решений и сервисов, которые обеспечивают очень высокое визуальное качество генераций. 

Несмотря на стремление исследователей создать единую модель для синтеза видео, есть не менее элегантные подходы к генерации видеороликов. В этой статье речь пойдёт как раз о таком способе создания анимированных видео на основе модели генерации изображений по тексту — в нашем случае, это, как вы уже успели догадаться, модель Kandinsky 2.2. В деталях изучив направление моделирования различных визуальных эффектов вокруг генеративной модели, которая обладает способностью преобразования изображений (image-to-image) и механизмами дорисовки (inpainting/outpainting), мы разработали решение, которое расширяет границы статичных генераций и даёт возможность синтеза так называемых анимационных видео. В качестве такого фреймворка, где имплементированы различные варианты анимаций, мы взяли широко известный deforum, который хорошо зарекомендовал себя в связке с моделью Stable Diffusion. И поверьте, задача скрещивания deforum с Kandinsky была отнюдь не простой. Об этом и поговорим далее!

Описание метода

Идея анимирования картинки довольно проста: из исходного 2D-изображения мы получаем псевдо-3D-сцену и затем моделируем облёт камерой этой сцены. Эффект псевдо-3D возникает ввиду восприятия глазом человека динамики движения через пространственные преобразования. Используя различные механики анимации движения, мы получаем последовательный набор кадров, как будто бы снятый на камеру от первого лица. Процесс создания такого набора кадров разбивается на 2 этапа:

  1. создание псевдо-3D-cцены и имитация облёта камеры (получение последовательных кадров);

  2. применение подхода image-to-image для дополнительной коррекции полученных изображений.

    Пример анимирования с эффектом движения камеры вправо
    Пример анимирования с эффектом движения камеры вправо

Облёт камерой псевдо-3D-сцены

Рассмотрим подробнее как работает создание сцены и имитация съемки её камерой.

  • Псевдо-3D-сцену мы получаем при помощи модели MiDaS, которая генерирует карту глубины по 2D-изображению. Диапазон значений этой карты по оси z ("вглубину") лежит на некотором отрезке [znear, zfar] (в системе координат, о которой речь будет чуть ниже).

    Сверху: исходные изображения.Посередине: карты глубины, построенные с помощью модели MiDaS.Внизу: соответствующие изображениям облака точек (отрендеренные с новых точек обзора).Изображение было взято из следующей статьи.
    Сверху: исходные изображения.
    Посередине: карты глубины, построенные с помощью модели MiDaS.
    Внизу: соответствующие изображениям облака точек (отрендеренные с новых точек обзора).
    Изображение было взято из следующей статьи.
  • Камера характеризуется координатами положения в пространстве сцены (x, y, z), и направлением взгляда, которое задаётся тремя углами (????, ????, ????). Соответственно, для задания траектории движения камеры необходимо определить зависимости x = x(t), y = y(t), z = z(t), ???? = ????(t), ???? = ????(t), ???? = ????(t).

  • Импровизированная съёмка сцены камерой от первого лица представляет из себя операцию перспективных проективных преобразований. Изначально камера зафиксирована в начале координат, а сцена удалена на расстояние znear от неё.

    Положение камеры и псевдо-3D-сцены в начальный момент времени
    Положение камеры и псевдо-3D-сцены в начальный момент времени

Отметим, что движение и повороты камеры эквиваленты тем же движениям и поворотам нашей сцены, взятыми со знаком минус. Соответственно преобразования поворота и трансляции мы можем применять к нашей сцене, а камеру зафиксировать в начале координат.

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

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

Оно применяется к каждой точке для того, чтобы посмотреть на неё с камеры (x, y, z) под направлением взгляда (????, ????, ????). Подробнее про операцию перспективного проецирования также можно прочитать в статье.

Некоторые частные случаи (примеры 2D-перспективных проекций)

Отдаление: преобразование трансляции вдоль оси, проходящий через камеру и центр сцены. Трансляция производится в сторону удаления от камеры. Динамика движения камеры описывается следующими уравнениями ????(t), ????(t), ????(t), x(t), y(t) = 0, z(t)=z_0+v*t, где v — скорость движения, откуда выводится динамика каждого пикселя исходного изображения (см. формулу выше).

Поворот: преобразования поворота вдоль одной оси, проходящей через центр сцены. Динамика описывается следующими уравнениями: ????(t), ????(t), x(t), y(t) = 0, z(t)=z_0, ????(t)= w*t, где w — угловая скорость вращения, откуда выводится динамика каждого пикселя исходного изображения (см. формулу выше).

Отметим, что карта глубины одной картинки всё же не является полноценной 3D-сценой и небольшие отклонения камеры от исходной проекции будут давать искажения, как это видно на картинках выше. Поэтому есть два необходимых дополнения к этим рассуждениям:

  • каждое из последовательных преобразований должно незначительно менять положение сцены, т. е. применяемые операции должны быть инфинитезимальными преобразованиями для получения проекции без сильного искажения;

  • после каждого такого преобразования необходимо применять подход image-to-image для устранения на изображении возможных искажений.

Как устроен режим image-to-image

Сначала небольшое напоминание, как работают диффузионные модели. Диффузионный процесс представляет собой два процесса: прямой и обратный.

В ходе прямого процесса мы добавляем шум к входным данным, приводя их распределение шаг за шагом к стандартному нормальному. Обратный процесс представляет из себя пошаговое восстановление исходного распределения.

Эволюция распределений в рамках диффузионного процесса
Эволюция распределений в рамках диффузионного процесса

Оба процесса являются гауссовскими со следующими параметрами:

Дисперсия прямого процесса ????_t задается нами, а дисперсия обратного выражается через ????_t и не зависит от данных. В обратном процессе обучаемым является среднее значение ????_????(xt, t) - именно оно моделируется глубокой нейронной сетью (обычно это UNet). Подробнее про диффузионный процесс и обучение диффузионных моделей можно прочитать в статьях Kandinsky 2.0, Kandinsky 2.1 и Kandinsky 2.2.

Стоит отметить две вещи:

• В силу случайности как прямого, так и обратного процессов мы не вернёмся в исходное состояние после последовательного их прохождения (см. изображение с распределениями выше).

• если наша нейронная сеть обучена хорошо предсказывать среднее значение в обратном процессе, то на каждом шаге мы будем получать семпл с высокой вероятностью q(x_t).

Идея реализации подхода image-to-image проста. Мы не будем проходить весь прямой процесс диффузии до конца, а сделаем лишь несколько шагов зашумления. Далее относительно полученного состояния начнём обратный процесс и в конечном итоге получим картинку, сильно похожую на исходное изображение.

Применение метода image-to-image для моделирования облёта камеры является необходимым шагом, так как нам нужно получить картинку, похожую на реальную, после применения проективного преобразования. Если остановиться на шаге с получением проекции после преобразования псевдо-3D-сцены, полученной из карты глубины изображения, то синтезированное изображение будет содержать артефакты на краях, т. е. сильно отличаться от того, что можно считать  эстетически красивым. Однако, сделав после этого несколько шагов прямого процесса и столько же шагов в обратном направлении, можно получить существенно более красивую сцену (за счёт того, что проекция h_0, возможно, с низкой вероятностью q преобразуется после этого в p_0 уже с высокой вероятностью q, то есть становится больше похожа на обычное изображение). На картинке эти манипуляции можно представить следующим образом:

С помощью такой «коррекции» проекций на основе метода image-to-image, получается алгоритм генерации  анимации из 2D-изображения:

В качестве иллюстрации рассмотрим, как end-to-end устроены, например, операции отдаления и поворота (на очень наглядной картинке ниже):

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

Бот — это наша основная площадка, где можно воспользоваться моделью. Пока что доступ на тестирование модели открыт только самым активным пользователям модели Kandinsky 2.2, но каждый может оставить заявку на получение доступа (внутри бота доступна кнопка «Оставить заявку»). Каждую неделю мы будем давать доступ к боту новым людям (как из числа активных пользователей Kandinsky 2.2, так и из этого списка). Более того, мы работаем над тем, чтобы доступ к генерации видео до конца года получили абсолютно все. 

Для запуска бота необходимо ввести команду /start в меню, затем отправить текстовое описание и выбрать один из 16-ти эффектов анимации, после чего нажать «завершить сценарий» и выбрать разрешение изображения или ввести следующее описание и выбрать следующий эффект (всего для ввода доступны максимум 3 описания и эффекта).

По одному текстовому описанию генерируется 4-х секундное видео. Генерация 1 секунды видео занимает около 20 секунд, но ожидание может длиться дольше из-за очереди. Если вы ждёте слишком долго, не паникуйте и попробуйте сбросить генерацию командой /start и начать заново.

Доступно три разрешения для генерации: горизонтальное (832х448 пикселей), квадратное (640х640 пикселей) и вертикальное (448х832 пикселей). 

Как было сказано выше, всего нами реализовано 16 режимов анимации, каждый из которых — это некоторое движение камеры внутри сцены. Камера может погружаться вглубь изображения, обозревать объект на генерации с разных сторон, вращаться на 360 градусов от первого лица и так далее. Посмотреть примеры движения камерой можно в боте по команде /examples.

Подробнее с каждым режимом можно также ознакомиться тут:

Примеры генераций с первыми десятью режимами
Примеры генераций с первыми десятью режимами
Примеры генераций с оставшимися шестью режимами
Примеры генераций с оставшимися шестью режимами

Как создавать сюжетные видео

Анимированное изображение, конечно, выглядит красиво, но киношедевр не может существовать одним статичным кадром в 4 секунды, где ничего не происходит, кроме, например, небольших движений милого котика. Кино — это в первую очередь история, разложенная покадрово.

Наша главная фича, достойная отдельного обзора, — возможность генерировать 2-3 сцены за одну генерацию, что позволяет создавать мини-сценарии в меру своей фантазии. Переходы между сценами происходят с помощью склейки наплывом. Это значит, что один кадр плавно преобразуется в другой. Пример:

Данное видео получено по следующим промптам c выбранным режимом «на месте»:

  1. «Jungle with flowers, graphic artist Magali Villeneuve, flowers, Pixar art, green and pink colors, highly detailed leaves, Lin Tinggui style, intricate oil painting, epic, delight»

  2. «Bird of paradise painting, graphic artist Magali Villeneuve, flowers, Pixar art, green and pink colors, highly detailed leaves, Lin Tinggui style, intricate oil painting, epic, delight»

У генераций в 2-3 промпта есть свои особенности, которые нужно учитывать, чтобы создавать красочные видеоролики: промпты рекомендуется писать похожие или одного и того же стиля; режимы движения камеры должны развивать сюжет и логично продолжать друг друга. В противном случае у вас может получиться…что-то такое:

1. Промпт: «Сat in realism style». Режим: «повернуть налево». 2. Промпт: «Painting by Picasso, portrait of a woman». Режим: «обойти справа».
1. Промпт: «Сat in realism style».
Режим: «повернуть налево».
2. Промпт: «Painting by Picasso, portrait of a woman».
Режим: «обойти справа».

Поэтому для каждого кадра продумывайте, как он объединится с предыдущим и как раскроется в художественном смысле. Советуем также сначала проверять промпты в Kandinsky 2.2 и уже потом генерировать видео, чтобы не тратить время на ожидание и получить не то, что представляли.

Примеры сюжетов

Превращаем античную статую женщины в Медузу Горгону

1. Промпт: statue of a woman with flowers on her head, vapor wave composition, Pinterest photo, facial symmetry, 1820, 90's aesthetic, twisted gardens, inspired by Antonio Canova, 3d, Aesthetic illustration. Режим: «на месте».2. Промпт: sculpture of Medusa Gorgon with flowers in her hair, snakes on her head, surreal sculpture, sad jellyfish, hybrid of snake and human, vapor wave composition, Pinterest photo, facial symmetry, 1820, 90's aesthetic, twisted gardens, inspired by Antonio Canova, 3d, Aesthetic illustration. Режим: «на месте».
1. Промпт: statue of a woman with flowers on her head, vapor wave composition, Pinterest photo, facial symmetry, 1820, 90's aesthetic, twisted gardens, inspired by Antonio Canova, 3d, Aesthetic illustration. Режим: «на месте».
2. Промпт: sculpture of Medusa Gorgon with flowers in her hair, snakes on her head, surreal sculpture, sad jellyfish, hybrid of snake and human, vapor wave composition, Pinterest photo, facial symmetry, 1820, 90's aesthetic, twisted gardens, inspired by Antonio Canova, 3d, Aesthetic illustration.
Режим: «на месте».

Спускаемся с небес на землю на воздушном шаре

1. Промпт: steam hot air balloon flying through cloudy sky, by Radi Nedelchev, fantasy art, rich and elegant, epic 3D illustrations, amazing craftsmanship. Режим: «вниз».2. Промпт: steampunk city, by Radi Nedelchev, fantasy art, epic 3D illustrations, amazing craftsmanship. Режим: «вниз».
1. Промпт: steam hot air balloon flying through cloudy sky, by Radi Nedelchev, fantasy art, rich and elegant, epic 3D illustrations, amazing craftsmanship.
Режим: «вниз».
2. Промпт: steampunk city, by Radi Nedelchev, fantasy art, epic 3D illustrations, amazing craftsmanship.
Режим: «вниз».

Взмываем ввысь по лестнице к древу жизни

1. Промпт: «A stairway leading to the stars in the sky, fantasy art, orange and blue ice, harmony of neon glow». Режим: «поворот вверх».2. Промпт: «A tree that is in cloud, fantasy art, orange and blue ice, harmony of neon glow». Режим: «отдалить».
1. Промпт: «A stairway leading to the stars in the sky, fantasy art, orange and blue ice, harmony of neon glow».
Режим: «поворот вверх».
2. Промпт: «A tree that is in cloud, fantasy art, orange and blue ice, harmony of neon glow».
Режим: «отдалить».

И немного научной фантастики

1. Промпт: «Black and white microbe drawing, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness». Режим: «отдалить».2. Промпт: «Black and white human skeleton drawing, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness». Режим: «отдалить».3. Промпт: «Black and white cyborg robot drawing, Jason A. Engle, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness». Режим: «отдалить».
1. Промпт: «Black and white microbe drawing, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness».
Режим: «отдалить».
2. Промпт: «Black and white human skeleton drawing, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness».
Режим: «отдалить».
3. Промпт: «Black and white cyborg robot drawing, Jason A. Engle, DNA, elaborate illustration, vertical wallpaper, medical diagram, fusion, consciousness».
Режим: «отдалить».

Оценить возможности модели и создать свой сценарий можно через Telegram-бот, а обсудить генерации и посмотреть работы тех, у кого уже есть доступ, можно в ветке «Создаём AI-ролики c Kandinsky» нашего сообщества в Telegram и в чате «Создаём AI-ролики c Kandinsky» в ВК. Примеры промптов и генераций также есть в галерее на сайте rudalle.ru.

Выводы

В статье мы постарались в деталях описать, как насыщаем модель Kandinsky 2.2 новыми возможностями, выходя за границы статичных генераций и наделяя её возможностью создавать анимированные видео. Данный подход предопределён набором механик анимации, что является его заметным ограничением. Тем не менее создаваемые видео выглядят эффектно и демонстрируют уже проверенные навыки модели генерации изображений как в части качества картинки, так и в части скорости синтеза. Напомню, что 1 секунда 24 FPS видео генерируется около 20 секунд, то есть каждый кадр видеоролика создаётся меньше, чем за 1 секунду. Особенно интересно выглядит режим режиссёра, где пользователь может создать ролик из нескольких текстовых описаний (сцен), дополнительно применив к этим сценам различные виды анимаций.

Несмотря на высокое качество генераций, с рядом артефактов ещё предстоит бороться, а неумолимое развитие end-to-end моделей синтеза видео вовлекает и нас в этот исследовательский стрим. Продолжая исследования в части высококачественной генерации видеороликов, мы непременно будем делиться получаемыми результатами. Цель таких исследований в конечном итоге перейти от анимации статических сцен к генерации по текстовому описанию полноценных сюжетов, в которых каждый объект и фон могут существовать и изменяться во времени самостоятельно, при этом не нарушая общую композицию сцены.

Обязательно будем держать вас в курсе :)

Лирический P.S.

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

Разработчикам пора погрузиться в картины Василия Кандинского, а креаторам — разобраться в генеративных моделях (особенно диффузионных)!

Поэтому и текущая статья устроена так, что первая часть достаточно техническая, а вторая — достаточно креативная (статью прочитать целиком будет полезно всем — и специалистам в области DL, и креаторам).

Очень приятно отметить, что у нас получилось собрать именно такую команду - состоящую как из технических специалистов, так и из креаторов (Ангелина Куц, Татьяна Паскова ????????), которые показывают наши модели всему миру с их лучшей стороны.

Следите за новостями на каналах «Градиентное погружение», CompleteAI, AbstractDL, Dendi Math&AI и на канале Сергея Маркова.

Авторы и контрибьют

Функциональность синтеза анимированных видео на основе Kandinsky 2.2 разработана и исследована командой Sber AI.

Коллектив авторов: Саид Азизов*, Арсений Шахматов*, Ангелина Куц (SberDevices), София Кириллова, Владимир Архипкин, Игорь Павлов, Татьяна Паскова, Михаил Шойтов, Сергей Нестерук, Андрей Кузнецов, Денис Димитров.
* — equal contribution

Контакты для коммуникации

По всем возникающим вопросам и предложениям по развитию модели, добавления новых фичей и сотрудничеству в части использования наших разработок можно писать Денису или Андрею.

Полезные ссылки

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


  1. Dmittry_B
    12.10.2023 15:56

    Это первый опыт пользования. Спасибо за ранний доступ. Из того что я увидел в тестах (генераций 10-15). Абстракция наше всё - здесь самые логичные переходы (первый пример). Сеть облегчает работу и соберет сама несколько изображений в клип с плавными переходами. Из каких изображений будет состоять клип можно протестить в К2.2 (и это хорошо, так как генерить картинки быстрей). Что не хорошо, это фантомы при переходе от одной сцены к другой. Заметно на втором клипе (мне не нужны два разных персонажа в первой генерации). А если делать поворот камерой, фантомов ещё больше. Не хватает "вариации" по уже существующему изображению или какой то связки с ботом K2.2. (возможно смогу найти решение через костыли). На ноги и пальцы внимания не обращал.


  1. murkin-kot
    12.10.2023 15:56

    Переход через условно белый шум, это конечно занимательно (без шуток), но почему не потренировать сеть на самый обычный морфинг? В 90-е уже точно было что-то подобное, но выполнялось вручную, обводились контуры, указывались связи между точками на начальном и конечном контурах, ну а промежуточные результаты заполнял компьютер (по цвету, географии, узору фона).

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

    Зато будет плавность, которой в случае с переходом через нормальное распределение быть не может.


  1. little_thing
    12.10.2023 15:56

    Получила ранний доступ. Друзья, это улёт! Не знаю, с чем сравнить, это новый опыт для меня, и удовольствие! Спасибо разработчикам, никаким ‘миджорням’ и не снилось, какая то новый инструмент креатива!


  1. toivo61
    12.10.2023 15:56

    "Все уже украдено до вас"

    Рекомендую прочесть всё. Издавалось в семидесятых, писалось раньше:

    https://habr.com/ru/companies/sberbank/articles/766968/