Создание видео zoom in и zoom out с помощью inpainting в Kandinsky

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

Развитие text2image-моделей открывает новые интересные возможности для создания креативного контента. Функция inpainting в Kandinsky от Sber AI позволяет создавать видео zoom in и zoom out с иллюзией приближения или отдаления от единого изображения.

Код проекта по созданию видео zoom in и zoom out доступен на GitHub и на Kaggle, там можно создать видео по своим промптам.

1. Квадратное видео zoom in/zoom out 

Рассмотрим метод создания квадратного видео на основе операции inpainting. Операция outpainting позволяет дорисовывать изображение за его границами. На рис. 1.1 показан пример использования outpainting по промпту «Картина на стене». Начальное изображение размером 1024 x 1024 уменьшено до 683 x 683, а затем дорисовано до 1024 x 1024.

Рис. 1.1. Пример работы outpainting по промпту «Картина на стене».
Рис. 1.1. Пример работы outpainting по промпту «Картина на стене».

И, казалось бы, всё, проще некуда: берём начальное изображение, уменьшаем его в размере и дорисовываем образовавшуюся пустоту; затем итеративно повторяем эту процедуру, получая последовательность ключевых кадров (рис. 1.2). Для удобства объяснения зафиксируем коэффициент уменьшения размера изображения перед outpainting k=3/2, хотя в коде проекта этот параметр можно изменять.

На следующем этапе возьмём начальный ключевой кадр, увеличенный в 1,5 раза, и будем постепенно уменьшать его до исходного размера, каждый раз при этом вырезая центр кадра 1024 x 1024. При достижении исходного размера начальный ключевой кадр полностью совпадает с вырезаемой областью. В этот момент подменяем начальный ключевой кадр на увеличенный в 1,5 раза следующий. Таким образом создается N кадров для интерполяции между соседними ключевыми кадрами. Итеративно повторяя эту процедуру, получим кадры для полноценного видео zoom in/zoom out с переходом между всеми ключевыми кадрами. 

Рис. 1.2. Основной принцип создания видео zoom in с помощью inpainting.
Рис. 1.2. Основной принцип создания видео zoom in с помощью inpainting.

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

Рис. 1.3. В произвольный момент времени кадр видео — это линейная комбинация двух соседних ключевых кадров.
Рис. 1.3. В произвольный момент времени кадр видео — это линейная комбинация двух соседних ключевых кадров.

В ходе экспериментов обнаружилось одно «но»: из-за особенностей декодера MoVQ функция inpainting слегка меняет контрастность исходного изображения. После outpainting результат выглядит очень гармонично, но при наложении начального кадра поверх дорисованного видны чёткие границы контраста (рис. 1.4). Это ломает ту самую иллюзию zoom out из единой картинки: при переходе между ключевыми кадрами будут видны сильно выраженные скачки яркости. И, конечно же, так оставлять нельзя.

Рис. 1.4. Наглядный пример изменения яркости изображения при outpainting.
Рис. 1.4. Наглядный пример изменения яркости изображения при outpainting.

Для исправления предлагается корректировать ключевые кадры в два этапа: сначала править границы, а затем менять центры кадров (рис 1.5). Почему это разные этапы? Потому что граница исправляется одномоментно, а центр меняется постепенно с течением времени (со сменой кадров в нашем случае).

Рис. 1.5. Разбиение изображения для исправления яркости в два этапа.
Рис. 1.5. Разбиение изображения для исправления яркости в два этапа.

Давайте наглядно рассмотрим, как исправляются границы (рис. 1.6). Начальное изображение под номером 1 это первый ключевой кадр. Под номером 2 — следующий ключевой кадр после применения к нему outpainting и со слегка изменённой цветовой гаммой. Из этого изображения вырезается середина — получается изображение, которое почти полностью совпадает с начальным, но слегка светлее и с разрешением похуже. Далее берётся маска под номером 4 и накладывается на изображение 3: таким образом вырезается граница более светлой версии начального ключевого кадра. После этого вырезанная граница 5 накладывается на начальное изображение 1, и получается исправленный начальный ключевой кадр 6. Этот кадр вставляется в следующий ключевой кадр под номером 2 без каких-либо видимых артефактов, и результат будет выглядеть единой картинкой.

Рис. 1.6. Схема исправления границ ключевых кадров.
Рис. 1.6. Схема исправления границ ключевых кадров.

Теперь рассмотрим, как исправляется центр ключевого кадра вставкой предыдущего. На этом этапе берётся маска, обратная показанной на рис. 1.6, и с её помощью вырезается центр ключевого кадра (рис. 1.7)

Рис. 1.7. Извлечение центра кадра при помощи добавления альфа-канала.
Рис. 1.7. Извлечение центра кадра при помощи добавления альфа-канала.

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

Рис. 1.8. Схема корректировки яркости в центре кадра.
Рис. 1.8. Схема корректировки яркости в центре кадра.

После исправления границ всех ключевых кадров и проведения постепенной корректировки яркости их центров получается гармоничная последовательность кадров для видео zoom in или zoom out, которая будет выглядеть как zoom в единую картинку.

Реализация кода позволяет влиять на скорость погружения в видео, а также на качество самих кадров.

2. Широкоформатное видео (4096x1024)

В основе этого метода разбивка всего кадра на пять квадратов с небольшими пересечениями (рис. 2.1). Здесь красный квадрат — начальное изображение, далее выделяются жёлтые, а затем синие квадраты.

Рис. 2.1. Разбиение широкого кадра на квадраты.
Рис. 2.1. Разбиение широкого кадра на квадраты.

Квадраты склеиваются наложением их друг на друга по схеме, показанной на рис. 2.1, с добавлением специфических альфа-каналов (рис. 2.2). Никаких стыков на финальном кадре не видно, и создаётся иллюзия единого изображения.

Рис. 2.2. Склейка фрагментов в единый кадр наложением друг на друга с добавлением специфических альфа-каналов.
Рис. 2.2. Склейка фрагментов в единый кадр наложением друг на друга с добавлением специфических альфа-каналов.

Что касается следующих ключевых кадров, то всё немного сложнее, чем в квадратном видео, но общая схема остаётся примерно такой же. Уменьшаем в размере начальный кадр (рис. 2.3а), разбиваем на пять квадратов (рис. 2.3б), определяем маску для каждого из них (рис. 2.3в) и дорисовываем каждый по какому-либо текстовому описанию (рис. 2.3г). Вообще говоря, здесь для каждого квадрата можно задать свой промпт и, например, добавить детали с одного края кадра. В конце склеиваем все эти квадраты в один кадр по схеме на рис. 2.2.

Рис. 2.3а. Уменьшенный начальный кадр.
Рис. 2.3а. Уменьшенный начальный кадр.
Рис. 2.3б. Разбиение кадра на квадраты.
Рис. 2.3б. Разбиение кадра на квадраты.
Рис. 2.3в. Маски для каждого квадрата.
Рис. 2.3в. Маски для каждого квадрата.
Рис. 2.3г. Outpainting квадратов по соответствующим маскам.
Рис. 2.3г. Outpainting квадратов по соответствующим маскам.

И таким образом мы получаем последовательность ключевых кадров для видео zoom in (рис 2.4).

Рис. 2.4. Последовательность ключевых кадров для широкоформатного видео zoom in.
Рис. 2.4. Последовательность ключевых кадров для широкоформатного видео zoom in.

Осталось лишь выполнить такую же интерполяцию, показанную на рис. 1.6 и рис. 1.8, для создания промежуточных кадров, изменив маски для альфа-каналов под прямоугольный формат видео.

3. Примеры

Ниже показан короткий пример квадратного видео zoom out по следующим промптам:

  1. "black dog wearing sunglasses"

  2. "graffiti of a black dog on a blue wall"

  3. "graffiti on a blue wall"

  4. "graffiti on a wall"

  5. "a house with graffiti"

  6. "a house with graffiti"

  7. "a house in the forest"

  8. "a house in the forest"

Ниже показан пример широкоформатного видео с разрешением (4096 x 1024), сгенерированного по промптам:

  1. "Room in a fantasy elven city, vivid colours, bright light, photorealistic painting, sharp focus, 8k, perfect composition, trending on artstation, award-winning photograph, unreal engine 5, cinematic smooth, intricate detail, studio photo, highly detailed"

  1. "fantasy elven city, vivid colours, bright light, photorealistic painting, sharp focus, 8k, perfect composition, trending on artstation, award-winning photograph, unreal engine 5, cinematic smooth, intricate detail, studio photo, highly detailed" 

  1. "fantasy elven forest, vivid colours, bright light, photorealistic painting, sharp focus, 8k, perfect composition, trending on artstation, award-winning photograph, unreal engine 5, cinematic smooth, intricate detail, studio photo, highly detailed"

  1. "Neon forest, vivid colours, bright light, photorealistic painting, sharp focus, 8k, perfect composition, trending on artstation, award-winning photograph, unreal engine 5, cinematic smooth, intricate detail, studio photo, highly detailed"

  1. "Neon cyberpunk city, beautiful scenery, vivid colours, bright light, photorealistic painting, sharp focus, 8k, perfect composition, trending on artstation, award-winning photograph, unreal engine 5, cinematic smooth, intricate detail, studio photo, highly detailed"

Источник: https://habr.com/ru/articles/774236/


Интересные статьи

Интересные статьи

Здесь и сейчас мы продолжаем наше путешествие во времени, где мы изучаем путь игр, основанных на всеми любимой D&D. Без длинных предисловий: если не читали прошлую часть — исправляемся, осталь...
Плагин под названием DoubleSubs предназначен для улучшения навыков аудирования и словарного запаса, просто просматривая видео и сериалы с двойными субтитрами.Это расширение предназначено для помощи в ...
После переписывания Cyberscore я захотел отправить на сайт какие-нибудь результаты. Последнее, во что я играл, это Pokémon Legends: Arceus, по которой на Cyberscore есть около 3000 таблиц результато...
Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоеди...
Ошибки и ПО шли рука об руку с самого начала эпохи программирования компьютеров. Со временем разработчики выработали набор практик по тестированию и отладке программ до их развёртывания, однако э...