Привет, Хабр! Я Кирилл, работаю в техподдержке Selectel. Как-то я решил посмотреть легендарное аниме 1995 года «Призрак в доспехах» и не смог сдержать слез. В первую очередь оттого, что частота кадров в этом аниме – убийственные для моего зрения 23 кадра в секунду. В силу особенностей жанра аниме частота кадров на некоторых отрезках видео может достигать до 12 в секунду.
Страдать я не хотел, поэтому начал гуглить, какое решение может предложить мне мир IT. В итоге наткнулся на крайне интересную технологию — интерполяцию, которая используется почти везде, но мы о ней очень мало знаем. Под катом рассказываю, как она, нейросеть RIFE и сервер с GPU помогли мне посмотреть «Призрака» без головной боли.
Немного теории
Начнем с самого главного — с понятия, вокруг которого построена статья.
Интерполяция кадров видео, или Video Frame Interpolation (VFI), — это обобщенное название целого ряда различных подходов, ориентированных на то, чтобы выполнить одну единственную цель — улучшить качество видеоконтента путем добавления промежуточных кадров в видеоряд. Суть подхода в том, чтобы взять два ключевых кадра и создать на их основе промежуточный. Так, в перспективе, их общее число увеличивается в несколько раз.
Стандартный метод интерполяции
Стандартная интерполяция использует метод преобразования видеопотока. Сама по себе технология довольно старая и уходит корнями в 90-е годы. Главным недостатком метода является то, что стандартные алгоритмы интерполяции состоят только из математической модели и не подразумевают анализ содержимого кадра, его глубину и движение объектов внутри него. Это зачастую приводит к неприятным артефактам в обработанном видео. Лучше всего иллюстрируют пример таких артефактов видео с котиками.
У такого подхода есть и плюсы: стандартная межкадровая интерполяция не требует больших мощностей для эффективной работы, что делает ее очень распространенной в различных видеокодеках.
Еще технология повсеместно используется в современных телевизорах и проекторах: различие между герцовкой экрана и скоростью видеопотока, по словам производителей, вызывает ощущение рваной картинки, поэтому телевизоры автоматически интерполируют кадры, чтобы этот эффект нивелировать.
Однако это может нарушить планы некоторых режиссеров. В особенности это раздражает создателей боевиков, специально снимающих свои фильмы с 30 FPS. Дело в том, что во многих современных телевизорах опция интерполяции кадров включена по умолчанию. Картинка становится слишком плавной, из-за чего фильм выглядит совсем не так, как он был изначально задуман, а зритель перестает верить в происходящее.
В 2018 году Том Круз высказывался в пользу отключения данной функции перед просмотром полнометражного кино. Картинка действительно выглядит странно и неестественно, будто снята на цифровую камеру, а не на пленку. У этого явления даже появилось название — «Эффект мыльной оперы». Я не удержался и сделал на эту тему мем.
Современный метод интерполяции
Современные методы интерполяции основаны на слаженной работе сразу нескольких алгоритмов, включающих в себя стандартный анализ видеопотока и связки различных нейросетей.
Этот метод решает часть недостатков стандартной интерполяции — например, неприятные артефакты, появляющиеся на фоне кадра, когда на экране происходит движение.
Но как? Давайте разберемся.
Современные алгоритмы представляют из себя своеобразный многослойный пирог из программных решений. На каждом слое происходит обработка кадра с помощью нейросетей и сложных математических моделей. Этот подход дает ряд преимуществ перед стандартным методом:
- Картинка становится намного плавнее и выглядит естественнее.
- На выходе алгоритм выдает меньше артефактов за счет более глубокого анализа.
- Такой подход дает нам возможность увеличивать количество кадров неограниченное количество раз. То есть с помощью этих алгоритмов можно сделать slow motion 5 000 кадров в секунду из двухсекундного видео.
Окей, звучит очень складно. А недостатки у этого метода есть? Да, и они серьезно ограничивают массовое применение этих технологий в устройствах:
- Самым главным недостатком метода является его прожорливость к ресурсам. Чтобы качественно обработать видео в высоком разрешении с помощью нейросетей, понадобится либо очень мощный графический ускоритель, либо значительное количество времени.
- Из первого минуса выходит следующий — высокая стоимость обработки одного кадра.
- Современные алгоритмы еще не научились суперкачественно достраивать кадры, на которых движение каких-либо объектов происходит слишком быстро. Так, например, при интерполяции видео игры в теннис на части кадров мяча не будет видно. Нейросеть просто не дорисует его как незначительный элемент кадра.
Современные методы интерполяции практически не имеют массового применения из-за высокой требовательности к ресурсам. На данный момент в большинстве случаев ее алгоритмы используются для экспериментов.
Но есть исключения. Компания NVIDIA научилась использовать методы, применяемые при анализе кадров, для улучшения картинки в играх. Так появилась технология DLSS, которая одновременно убивает двух зайцев: улучшает картинку в игре и увеличивает частоту кадров в секунду почти в два раза.
Помимо крупных компаний вроде NVIDIA, методы интерполяции с помощью нейросетей используют небольшие стартапы, такие как neural.love. Это проект нашего соотечественника, который применяет современные нейросети для решения целого ряда различных задач — от апскейлинга видео в 4К и интерполяции в 60 FPS до восстановления старинных фотографий. Выглядит как магия.
Этот текст — не ВКР по нейросетям, но чтобы чуть лучше разобраться, на каких нейросетях работает современный метод интерполяции, давайте познакомимся с популярной «исследовательской» нейросетью.
DAIN — самая известная VFI-нейросеть
Эта нейросеть не является готовым продуктом, это исследовательский алгоритм, разработанный с целью пересмотреть подход к интерполяции и сделать ее «произведением искусства». Модель получает на вход видео и проходится по нему несколько раз, применяя к кадрам разные методы. На выходе мы получаем максимально качественно обработанный контент.
DAIN состоит из следующих «слоев»:
Алгоритм преобразования оптического потока
На этом этапе происходит хорошо знакомая нам межкадровая интерполяция «старым» стандартным методом, ничего особенного. Идем дальше.
Построение карты глубины
На этом этапе включается вспомогательная нейросеть, которая берет кадр и выстраивает его карту глубины. Как раз эта особенность алгоритма помогает сделать более качественную картинку на выходе.
Анализ контекста
Алгоритм как правило берет все кадры предоставленного ему видео и интерполирует сразу все. Как правило, это приводит к ситуациям, когда на стыке двух планов (например, герой в анфас → герой со спины) нейросеть выдает кашу из двух сцен, на которой ничего не понятно. При единичном увеличении количества кадров в два раза это практически незаметно. Но при многократном увеличении фреймрейта видео просто невозможно смотреть, так как оно состоит сплошь из мешанины.
Для нивелирования этого эффекта в работу включается вторая нейросеть, которая сравнивает кадры в поисках сильных различий в контексте. Если кадры значительно отличаются, они войдут в разные сцены, а значит, на выходе видео будет смотрибельным.
Интерполяция нейросетью
На этом этапе включается нейросеть, которая берет два соседних изображения, сопоставляет их с картой глубины и анализом оптического потока (их мы получили на предыдущем этапе). Затем генерирует кадры с промежуточным изображением.
Сборка видео
На последнем этапе остается только взять все кадры, предоставленные нейросетью, соединить их с кадрами, которые были в видео изначально, и подобрать правильный фреймрейт. После этого на видео можно со спокойной душой накладывать звук и получать удовольствие от плавной картинки.
Более наглядно это в реализации. Например, вот мое любимое видео, интерполированное с помощью DAIN.
Технологии интерполяции видео развиваются очень быстро, поэтому по меркам искусственного интеллекта DAIN считается устаревшей. В 2020 году группа исследователей из Китая пересмотрела работу ряда похожих алгоритмов — в результате получился RIFE.
Какую нейронную сеть использовал я
Для своей благой цели и сохранения зрения я решил использовать более новый трансформер, занимающийся интерполяцией, – RIFE. Сама по себе нейросеть использует подход, при котором не применяется метод анализа оптического потока (первый слой DAIN).
Разработчики написали собственный алгоритм, который был обучен на двух гигантских датасетах из видео в высоком качестве. Этот алгоритм так же, как в классических нейросетях для интерполяции, строит карту глубины и выделяет на ней отдельные объекты. Но дорисовывает только те части кадров, на которых происходит движение объектов.
Благодаря пересмотру стандартного подхода разработчикам удалось добиться головокружительного успеха: по их слова, RIFE работает в 4 раза (а в некоторых случаях — до 27 раз) быстрее предшественников.
Интерполяция своими руками
Итак, что нам понадобится, чтобы сделать интерполяцию с помощью RIFE самостоятельно?
Первым делом нам нужны достаточные вычислительные мощности. В качестве стенда я выбрал облачный сервер с видеокартой NVIDIA Tesla T4.
После этого переходим в официальный GitHub репозиторий авторов нейросети RIFE и клонируем его себе на сервер:
git clone git@github.com:megvii-research/ECCV2022-RIFE.git && cd ECCV2022-RIFE
Далее для корректной работы нейросети нам понадобится установить необходимые зависимости. Они лежат в файле requirements.txt. Выполняем команду:
pip3 install -r requirements.txt
Для работы алгоритма также необходима обученная модель. Можно обучить самостоятельно или воспользоваться моделью, которую любезно натренировали за нас разработчики RIFE. Скачать модель можно тут.
Скачанную модель необходимо переместить в каталог
train_log/
Дальше все очень просто. Загружаем на сервер необходимое нам видео. После окончания загрузки можно приступать к магии.
Для создания видео с удвоенной частотой кадров запускаем команду:
python3 inference_video.py --exp=1 --video=video.mp4
Процесс пошел! Можно отойти попить чаю или включить очередную серию любимого сериала, если видео длинное: интерполяция с помощью нейросетей — довольно долгий процесс. Например, на полный прогон «Призрака в доспехах» мне понадобилось два с половиной часа.
Когда алгоритм закончит обрабатывать видео, в каталоге, который мы скачали с GitHub, появится готовое видео с увеличенным количеством кадров. Посмотрим на итоги нашей работы:
Слева находится оригинальная запись, в то время как видео справа — результат работы RIFE. Ровно половина кадров этого видео создана нейросетью на основе полученных на входе кадров.
И еще чуть-чуть.
Изображение стало более плавным — все благодаря интерполяции.
Вот так желание смотреть аниме без дискомфорта подтолкнуло меня разобраться в механизмах интерполяции и увеличить FPS аниме с помощью нейросети на облачном сервере с GPU. Пишите в комментариях, знакомы ли с этой технологией и страдаете ли вы при просмотре аниме.
Комментарии (19)
AdVv
07.09.2022 14:35+5Ну так может где-нибудь и результат ваших усилий завалялся ? Примеры уж очень скупые, хХотелось бы посмотреть полный вариант, исключительно в целях оценки качества работы современных нейросетей, конечно.
wtigga
07.09.2022 14:41+7Первое, что я делаю на любом телевизоре, так это выключаю интерполяцию, потому что выглядит это ужасно, особенно в аниме.
На ваших примерах получилось неожиданно хорошо. Хотя GITS надо смотреть так, как сняли. Можно ещё вспомнить Акиру, где в некоторых сценах (например, в первой же мото-погоне) в одном кадре присутствовали элементы, движущиеся с разной частотой кадров - 12 и 24 FPS (второстепенные мотоциклисты и один из главных героев). Это в том числе и художественный приём, который, возможно, будет безвозвратно потерян при подобном увеличении частоты кадров.
Tarakanator
08.09.2022 09:08а я стал смотреть фильмы на телеке как раз потому, что его интерполяция лучше, чем на пк. Хотя я аниме не смотрю.
ruvlad
07.09.2022 15:05Для домашнего просмотра GPU Tesla T4 может быть избыточна. RIFE v4, прикрученная к SVP, уже сейчас спокойно справляется в реал-тайме с большинством 24-30fps видео до 1080p, проверено на 3060 Ti.
Flux
07.09.2022 16:28Но статья-то рекламирует сервера с T4 а не потребительские видюхи.
Или вы думали что статья про нейронки, "продающие" кейворды разбросаны по ней чисто случайно а сотрудники селектела совершенно рандомно каждые пару дней сталкиваются с чисто бытовыми задачами которые отлично решаются продуктами компании?)
Tarakanator
08.09.2022 09:12опачки, спасибо за информацию, надо попробовать.
А то в моём тесте SVP проиграл уплавнялке lg49nano866na. А теперь SVP наносит ответный удар.
nidalee
08.09.2022 18:31Если есть возможность прогнать файл через не-реалтаймовую сетку, то результат однозначно будет в ее пользу.
RIFE > DAIN/TOPAZ > SVP > Optical Flow
nick-for-habr
07.09.2022 16:29+2Первое, что нужно делать при просмотре «старого» чересстрочного контента — это синхронизировать частоту обновления устройства отображения (телевизор, монитор) с кадровой частотой проигрываемого видео. Да и для прогрессивной развёртки очень рекомендуется это делать.
Иначе в первом случае (чересстрочная развёртка) будет просто «ужОс-ужОс», во втором — очень дискомфортные подёргивания каждые пару секунд.
Проблема в том, что большинство мониторов не поддерживают никакой другой частоты обновления, кроме базовых 60 Гц, и сделать это на них физически невозможно. С телевизорами проще, обычно они поддерживают все нужные режимы.
Ну и т.к. каждый раз устанавливать нужный режим при просмотре может быть неудобно — желательно что бы плеер поддерживал эту возможность и сам переключал частоту обновления на нужную для этого видео в режиме «full screen».
Эта нехитрая процедура даёт наилучший результат, по сравнению со всеми испробованными мной методами «программной коррекции FPS». Да, аниме не станет выглядеть как «нативный 4k & 60fps», но это и не нужно, если оно интересное ))
Ещё лет 5-7 занимался подобными экспериментами по повышению частоты кадров видео — но тогда в целом результат был либо около нуля (нет эффекта), либо удаление одних артефактов привносило ещё больше других.
По этому прочитал статью с интересом: нейросети, диплёрнинг и всё такое, чем чёрт не шутит: вдруг «прорыв»?!
Нет, пока не случилось прорыва (((
На предложенных примерах как ни старался (честно) — не увидел разницы. Возможно причина в моём не самом новом мониторе 60 Гц, и на другом девайсе результат будет лучше, но… Для меня различие в тестовых отрывках на уровне самовнушения, проще говоря — не вижу разницы.
Пока смотрю хорошее видео на телевизоре, подключенном по HDMI к компьютеру(серверу) с автопереключением видеорежимов на «родной» для видео — и так выходит лучше всего.Rampages
07.09.2022 21:45На моем мониторе очень странно выглядит пример с Rick Astley, то ли глаза не воспринимают, то ли что-то не так с настройкой, как будто видео немного ускорено, но при этом песня не ускорена и все синхронизировано... монитор 60hz (wacom cintiq 22).
А так помню старая статья была как бороться с интерлейсом и на хабре и на всяких анимешных риперских сайтах типо: http://tp7.ruanime.org/IVTC/index.html (скрины не грузятся, но в статье о работе masktools http://tp7.ruanime.org/masktools/index.html даже скрины грузятся, эх столько лет прошло уже) да и тут на хабре куча статей была об IVTC.
Rampages
07.09.2022 22:36+4В примерах что-то немного лучше стало, но не критично. Мне интересно посмотреть на покадровое сравнение или на кадры добавленные RIFE, то есть например 1 и 2 кадр оригинального видео и кадры которые добавили между ними.
Вообще замечал проблемы с низким FPS только в сценах где режиссер хотел по "операторски" сделать плавную проводку камеры. В полнометражных аниме вообще почти проблем нету, в сериалах да, бывают местами экономят на ключевых кадрах и раскадровке, потом что-то доделывают в Blu-Ray версиях.
Вообще меня больше напрягает значительная разница в BD vs TV (blu-ray vs broadcast):
Nisekoi вообще стало другим аниме после релиза Blu-ray
Shingeki no Kyojin (Attack on Titan) сильно перерисовали персонажей
/
Berserk (2016) тоже сильно перерисовали другие лица и эмоции
Tiger & Bunny вообще другие эмоции на лицах
Они не только добавляют "детали", "тени" и убирают цензуру, зачастую меняют композицию сцены, прически, мимику, форму лица, форму глаз, форму рта и освещение и как в том же Nisekoi вообще все задники убрали.
Amil_Gaoul
08.09.2022 18:18Конкретно в берсерке избавились от 3д моделей во многих сценах. Многих это кстати бесило что в аниме много кривой графики, в то время как оригинал божественно нарисован, многие хотели от аниме подобного видимо.
7313
А как же модель Cronos v3 в Topaz VEAI? Она вроде только очень хорошо промежуточные кадры выдумывает?
7313
Примерно вот так в топазе получается
https://disk.yandex.ru/i/8aMUmihjMS5Izg
suncru Автор
Безусловно, Topaz Labs делают достаточно хорошие и качественные, на мой взгляд, вещи, однако VEAI — готовый программный продукт, который стоит 200 баксов, поэтому я не стал бы сравнивать "голый" алгоритм с этой программой. Хотя результат получился крутой, как мне кажется)
nidalee
На практике получается, что RIFE поднимает частоту кадров лучше всех.
У Topaz-а нет универсальной сетки для планов с быстрым движением и для планов с медленным. У него две разные. Поэтому, чтобы получить наилучший результат, видео нужно нарезать по отдельным планам и интерполировать каждый отдельно в зависимости от того, какое движение в кадре — быстрое или медленное. Тогда можно приблизиться к результату RIFE.
Но тогда у Topaz всплывает вторая проблема — он почему-то очень часто теряет кадры. То есть на входе файл на 100 кадров, а на выходе их 98. Я когда последний раз что-то им интерполировал, мог с точностью до кадра найти, где всплыл этот баг: примерно на 90% хронометража один кадр фризился и повторялся несколько раз, а оригинальные терялись.
Учитывая, что видео желательно порезать по отдельным планам, мы получаем потерю пары кадров с каждого плана. Это либо рассинхрон аудио с видео, либо ручная работа по исправлению этого недоразумения. С получасового видео потерять 2 кадра в конце — фигня, можно плюнуть. А если у тебя 50 фрагментов и 50 раз пропущено по 2 кадра…
В общем оно того не стоит.
nidalee
Добавлю еще сравнение и показательные скриншоты.
У RIFE больше артефактов, у Topaz-а больше размыливания.