Найти тему
Droider

DAIN: Нейросеть, которая увеличивает FPS c 16 до 7680 кадров!

Оглавление

Наверняка вы натыкались на видеоролики в YouTube: вот Нью Йорк 1911 года, было так: плохое качество, много шума и мало цвета, МАГИЯ и стало 4K-разрешение и 50/60 кадров в секунду. Или улица Тверская в 1896 году - ЩЁЛК - и она преображается!

На этих записях люди не скачут по кадру как в комедиях Чарли Чаплина или вайнах с Instagram. А вполне себе плавно перемещаются как мы с вами в жизни. Всё потому что фреймрейт этих видео был увеличен до 60 fps - c пятнадцати в исходниках.

Как такое возможно? Нейросети в помощь, но что если я скажу, что сегодня каждый дома сможет сделать такое?

Сегодня мы расскажем вам как работает самый продвинутый алгоритм интерполяции кадров, разберемся в сути технологии и, главное, научимся делать это дома на своём компьютере!

Старые методы интерполяции

В конце прошлого года мы уже делали ролик про крутые алгоритмы Google, которые прокачивают видео. И самым интересным был алгоритм интерполяции кадров под названием DAIN.

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

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

Уже масса людей выложили свои эксперименты в сеть. Есть даже плейлист с такими видосами.

Но естественно, интерполяция кадров - не новая задача. Все, кто монтировал видео, помнят плагин Twixtor. Да и в каждом современном телевизоре, по умолчанию, включена это дурацкая функция плавного движения. Те, кто выключает её на всех телевизорах, даже в гостях, даже без спроса, даже вопреки воли хозяев - красавцы.

Все эти методы интерполяции основаны на вычислении оптического потока. Сравнив положения каждого пикселя на соседних кадрах можно вычислить вектор движения объекта.

Всё просто, когда движения в кадре мало. Например, какой-либо объект движется в одной плоскости на статичном кадре.

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

Но как минимизировать такие ошибки? Ответ на этот вопрос может дать вот такое простое схематичное изображение работы алгоритма DAIN.

-2

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

Потом в дело вступают 4 промежуточные нейросетки, каждая из которых генерирует свой тип данных.

1. Оптический поток

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

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

2. Карта глубины

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

Это основная фишка алгоритма DAIN, который так и расшифровывается Depth-Aware Video Frame Interpolation, т.е. интерполяция кадров с учетом глубины.

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

3. Контекстные особенности

Часто бывает такое, что от кадра к кадру объект сильно меняется. Например, человек на одном кадре может стоять в профиль, а на втором анфас. И для интерполяции это становится большой проблемой. Как нарисовать промежуточное состояние?

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

Условно говоря, она понимает, ага тут были какие-то контрастные области значит в промежуточном кадре надо бы их сохранить. И чёрт-побери сохраняет!

Вот пример: слева простая интерполяция, а справа с учётом контекста и карты глубины. Это наука, ребята! Погнали дальше.

-3

4. Ядра интерполяции

Итак, у нас уже есть много информации по двум соседним кадрам: это оптический поток, карта глубины и контекстные особенности. Но нам надо как-то использовать эти данные для создания промежуточного состояния. То есть вычислить нечто среднее между ними.

И тут как раз вступает четвёртая нейронка. Она предполагает, где будут находиться объекты в промежуточном кадре и генерирует некий скелет на который натягиваются данные с предыдущих этапов.

5. Объединение

На этом подготовительная работа заканчивается и все данные попадают, куда бы вы думали? В пятую нейросеть, которая и генерирует промежуточный кадр!

Да схемка замороченная и очень ресурсоёмкая. Но! Результаты получаются феноменальные. Иногда просто невозможно отличить искусственный кадр от настоящего.

Инструкция

И тем удивительнее, что пользоваться этим чрезвычайно сложным алгоритмом проще простого. Что надо сделать?

Для начала скачаем приложение с сайта разработчика. Сразу оговорюсь, что пока доступна только версия под Windows, для нормальной работы которой будет необходима видеокарта NVIDIA с 4-8 Гб памяти. Приложение очень прожорливо до видеопамяти.

-4

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

Единственный момент, если вы получаете сообщение о нехватке памяти, пробуйте нажать на галочку: Split frames into sections.

Либо можно задаунскейлить видео на выходе - галочка Downscale Video.

Вариантов применения такого алгоритма масса!

Можно повысить плавность любимого мультфильма или сделать крутейший слоу-моушн, а можно пойти дальше. Только представьте, если нейронный модуль телефона будет восстанавливать потерянные кадры в видеостримах. Или даже маскировать просадки FPS в играх!

Ну а если вы аниматор или делаете стоп-моушн - то эта штука вообще меняет правила игры.

И всё это доступно совершенно бесплатно! Для каждого желающего!

Правда автору приложения можно сделать поощрение, также известное как донат на Patreon.