- PVSM.RU - https://www.pvsm.ru -

Автокодируем «Бегущего по лезвию»

Реконструкция фильмов при помощи искусственных нейросетей

Предлагаю вашему вниманию перевод авторского описания работы алгоритма автокодировщика, использовавшегося для создания реконструкции фильма “Бегущий по лезвию”, о котором я уже делал статью [1].В ней была описана общая история создания фильма и то, как Warner подала, а затем отозвала иск о нарушении копирайта. Здесь же вы найдёте более подробное техническое описание алгоритма и даже его код.

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

Используемый тип нейросетей называется автокодировщиком. Автокодировщик – тип нейросети с очень малым размером скрытого слоя. Он кодирует порцию данных в гораздо более короткое представление (в данном случае – в набор из 200 чисел), а затем реконструирует данные наилучшим возможным образом. Реконструкция не идеальна, но проект был по большей части творческим исследованием возможностей и ограничений данного подхода.

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

Автокодируем «Бегущего по лезвию» - 1
Реконструкция глаза Роя Батти, смотрящего на Лос-Анджелес в первой сцене


Сравнение оригинального трейлера «Бегущего по лезвию» с реконструкцией


Первые 10 минут реконструкции фильма

Техническое описание

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

Автокодируем «Бегущего по лезвию» - 2
Изображения спальных комнат, созданные DCGAN

В ноябре 2015 Рэдфорд с соавторами [2]чрезвычайно удивили сообщество интересующихся данной темой, использовав нейросети для создания реалистичных изображений спальных комнат и лиц, используя состязательный метод обучения нейросетей. Сеть создаёт случайные примеры, а сравнивающая сеть (дискриминатор) пытается отличить сгенерированные картинки от настоящих изображений. Со временем генератор начинает производить всё более реалистичные изображения, которые дискриминатор уже не в состоянии отличить. Состязательный метод впервые был предложен Гудфелло [3]с соавторами в 2013 году, но до работы Рэдфорда не представлялось возможным создавать реалистичные изображения при помощи нейросетей. Важным прорывом, сделавшим это возможным, стало использование «свёрточного автокодировщика» [convolutional autoencoder] для создания изображений. До этого предполагалось, что такие нейросети не могут эффективно создавать картинки, поскольку использование накапливающихся слоёв приводит к потере информации между слоями. Рэдфорд отмёл использование накапливающихся слоёв и просто использовал пошаговое обратное свёрточное кодирование [strided backwards convolutions]. (Для незнакомых с понятием «свёрточного автокодировщика» я подготовил визуализацию [4]).

Автокодируем «Бегущего по лезвию» - 3

Я изучал создающие модели и до работы Рэдфорда, но после её опубликования стало очевидно, что это правильный подход. Однако создающие состязательные сети не умеют реконструировать картинки, а лишь создают примеры из случайного шума. Поэтому я начал изучать возможности тренировки вариационного автокодировщика [5]– который умеет восстанавливать изображения – с дискриминирующей сетью, использующейся для состязательного подхода, или даже с сетью, оценивающей схожесть реконструированной картинки и реального примера. Но я даже не успел этим заняться, а Ларсен с соавторами [6]уже опубликовали в 2015 году работу, комбинирующую оба этих подхода весьма элегантным способом – сравнивая разницу в реакциях на реальные и реконструированные изображения в верхних слоях дискриминирующей сети. Они смогли выдать выученную метрику схожести [learned similarity metric], кардинально первосходящую попиксельное сравнение ошибок восстановления (иначе процедура ведёт к размытой реконструкции – см. картинку выше).

Автокодируем «Бегущего по лезвию» - 4
Общая схема вариационного автокодировщика, скомбинированного с дискриминирующей сетью

Модель Ларсена состоит из трёх отдельных сетей – кодировщика, декодировщика и дискриминатора. Кодировщик кодирует набор данных x в скрытое представление z. Раскодировщик пытается воссоздать набор данных из скрытого представления. Дискриминатор обладает как оригинальным, так и реконструированным наборами, и определяет, являются ли они настоящими или поддельными. Реакция на них в верхних слоях сети сравнивается, чтобы определить, как близко реконструкция подошла к оригиналу.

Я сделал эту модель на базе библиотеки TensorFlow [7], намереваясь расширить её с помощью LSTM [8]для создания видеопредсказаний. Из-за временных ограничений мне этого сделать не удалось. Но это привело меня к созданию модели для генерации больших не-квадратных изображений. Предыдущие модели описывали изображения разрешения 64х64, с 64 картинками для пакетной обработки. Я расширил сеть до картинок с разрешением 256х144 с пакетами по 12 картинок (с большим количеством мой GPU NVIDIA GTX 960 просто не справился). У скрытого представления было 200 переменных, а значит, модель кодировала картинку 256х144 с тремя цветовыми каналами (110 592 переменных) в представление из 200 чисел перед реконструкцией изображения. Сеть тренировалась на наборе данных из всех кадров «Бегущего по лезвию», обрезанных и масштабированных до 256х144. Сеть тренировалась в 6 эпох, что заняло у меня 2 недели.

Художественная мотивация

Автокодируем «Бегущего по лезвию» - 5
Реконструкция второго теста Войта-Кампфа

Фильм Ридли Скотта «Бегущий по лезвию» 1982 года – это адаптация классического научно-фантастического произведения «Мечтают ли андроиды об электроовцах?» Филиппа Дика (1968). В фильме Рик Декард (Харрисон Форд) – охотник за головами, зарабатывающий охотой и убийствами репликантов – андроидов, которые так хорошо сделаны, что их невозможно отличить от людей. Декарду необходимо проводить тесты Войта-Кампфа, чтобы различить андроидов и людей, задавая всё более сложные вопросы из области морали и изучая зрачки подопытных, с намерением вызвать эмпатическую реакцию в людях, но не в андроидах.

Один из главных вопросов истории – задача определения того, что является человеком, а что – нет, становится всё более сложной по мере увеличения сложности технологических разработок. Новые андроиды «Нексус-6», созданные корпорацией Tyrell, со временем вырабатывают эмоциональные реакции, а новый прототип Рейчел содержит имплантаты памяти, из-за которых она считает себя человеком. Метод отделения людей от не-людей, несомненно, позаимствован у методологического скептицизма великого французского философа Рене Декарта. Даже имя Декард очень похоже на Декарта [9]. Декард на протяжении фильма пытается определить, кто человек, а кто – нет, при этом не высказанным остаётся предположение, что Декард и сам сомневается в том, является ли он человеком.

Не стану углубляться в философские проблемы, рассмотренные в фильме (по этому поводу есть [10]две неплохие статьи [9]), скажу лишь следующее. Успехи систем глубокого обучения проявляются в том, что системы становятся всё более вовлечёнными в окружающую их среду [11]. При этом, виртуальная система, распознающая изображения, но не вовлечённая в окружение, представляемое этими изображениями – это модель, характеристики которой похожи на картезианский дуализм, в котором тело и дух разделены.

Нейросеть – сравнительно простая математическая модель (если сравнивать её с мозгом [12]), и излишняя антропоморфизация этих систем может привести к проблемам. Несмотря на это, продвижения в деле глубокого обучения значат, что предмет включения моделей в среду их окружения и их соотношения с теориями о природе разума следует рассматривать в контексте технических, философских и художественных последствий.

Автокодируем «Бегущего по лезвию» - 6
Автокодируем «Бегущего по лезвию» - 7
Автокодируем «Бегущего по лезвию» - 8
Автокодируем «Бегущего по лезвию» - 9
Автокодируем «Бегущего по лезвию» - 10

Реконструкция «Бегущего по лезвию»

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

Статичные и высококонтрастные сцены, мало меняющиеся со временем, реконструированы очень хорошо. Это оттого, что, по сути, модель «видела» один и тот же кадр гораздо чаще, чем просто 6 тренировочных эпох. Это можно рассматривать как избыток данных, но поскольку набор тренировочных данных намеренно искажён, об этом не стоит волноваться.

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

Также модели с трудом удаётся сделать различимую реконструкцию сцен с малым контрастом, особенно с присутствием лиц. Также она с трудом реконструирует лица, когда изменений очень много – при движении или вращении головы. Это не удивительно, учитывая ограничения модели и чувствительность людей в распознавании лиц. Недавно появились успехи в разработке при помощи объединения [13]создающих моделей и сетей с изменением пространственных моделей [spatial transformer networks], которые могут помочь с этими вопросами, но их описание выходит за рамки этой статьи.

Автокодируем «Бегущего по лезвию» - 11
Автокодируем «Бегущего по лезвию» - 12
Автокодируем «Бегущего по лезвию» - 13
Реконструкция сцен фильма «Койяанискаци» с использованием сети, натренированной на «Бегущий по лезвию»

Реконструкция других фильмов


Пример реконструкции фильма «Койяанискаци» с использованием сети, натренированной на «Бегущий по лезвию»

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

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


Реконструкция рекламы Apple 1984 года с использованием сети, натренированной на «Бегущий по лезвию»


Реконструкция Matrix III Джона Уитни с использованием сети, натренированной на «Бегущий по лезвию»

Кроме «Койяанискаци» я проверил сеть на реконструкции ещё двух фильмов. Это известная реклама 1984 года Apple Macintosh, снятая тем же Ридли Скоттом. Стив Джобс нанял его, когда посмотрел «Бегущий по лезвию» в кино. У рекламы много общего с «Бегущим по лезвию» в визуальном смысле, поэтому выбор этого видео был оправдан.

Другой фильм – анимация Джона Уитни " Matrix III". Он был пионером компьютерной анимации и первым штатным художником IBM с 1966 по 1969 года. Matrix III (1972) был одним из серии фильмов, демонстрировавших принципы гармонической прогрессии. Он был выбран для проверки того, как модель справится с реконструкцией абстрактных неестественных изображений.

Автокодируем «Бегущего по лезвию» - 14
Автокодируем «Бегущего по лезвию» - 15
Автокодируем «Бегущего по лезвию» - 16

Автокодирование «Помутнения»

После «Бегущего по лезвию» я хотел посмотреть, как модель поведёт себя, если её потренировать на другом фильме. Я выбрал фильм 2006 года «Помутнение» [A Scanner Darkly]. Это ещё одна экранизация романа Филиппа Дика, и стилистически она весьма отличается от «Бегущего по лезвию». «Помутнение» был снят методом ротоскопирования – он был снят на камеру, а затем каждый кадр был прорисован художником.

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


Трейлер «Бегущего по лезвию», реконструированный с использованием сети, тренированной на «Помутнении»


Фрагмент «Койяанискаци», реконструированный с использованием сети, тренированной на «Помутнении»

Опять-таки, реконструкция одних фильмов моделями, тренированными на других, практически мало распознаваема. Результаты не такие связные, как с моделью «Бегущего по лезвию», возможно из-за наличия гораздо большего количества цветов в «Помутнении», и в том, что моделирование естественных изображений, для этой модели является более сложным. С другой стороны, изображения необычные и сложные, что приводит к появлению малопредсказуемого видеоряда.

Заключение

Честно говоря, я был сильно удивлён тем, как модель повела себя, когда я начал тренировать её на «Бегущем по лезвию». Реконструкция фильма вышла лучше, чем я мог представить, и я удивляюсь тому, что получилось при реконструкции других фильмов. Обязательно буду делать больше экспериментов с тренировками на большем количестве фильмов, чтобы поглядеть на результат. Я хотел бы адаптировать процедуру тренировки, чтобы она принимала во внимание последовательность кадров, чтобы сеть лучше различала длинные последовательности схожих кадров.

Код проекта доступен на GitHub [15]. Подробности есть также на моём сайте [16].

Автор: SLY_G

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/129840

Ссылки в тексте:

[1] я уже делал статью: https://geektimes.ru/post/276880/

[2] Рэдфорд с соавторами : http://arxiv.org/abs/1511.06434

[3] Гудфелло : http://arxiv.org/abs/1406.2661

[4] подготовил визуализацию: http://terencebroad.com/convnetvis/vis.html

[5] вариационного автокодировщика : https://en.wikipedia.org/wiki/Autoencoder

[6] Ларсен с соавторами : http://arxiv.org/abs/1512.09300

[7] TensorFlow: https://www.tensorflow.org/

[8] LSTM : https://en.wikipedia.org/wiki/Long_short-term_memory

[9] имя Декард очень похоже на Декарта: http://www.br-insight.com/what-defines-human

[10] есть : http://www.annhetzelgunkel.com/film/asma.htm

[11] вовлечёнными в окружающую их среду: https://arxiv.org/abs/1602.01783

[12] мозгом: http://www.braintools.ru

[13] успехи в разработке при помощи объединения : https://arxiv.org/abs/1603.05106

[14] работе по переносу художественного стиля: https://www.youtube.com/watch?v=Khuj4ASldmU

[15] доступен на GitHub: https://github.com/terrybroad/Learned-Sim-Autoencoder-For-Video-Frames

[16] моём сайте: http://terencebroad.com/

[17] Источник: https://geektimes.ru/post/277006/