Пример работы нейронного фоторедактора Neural Photo Editor. По центру — оригинальное изображение. Красными и синими квадратами показаны области скрытого пространства, сгенерированного после обучения нейросети. Ими можно манипулировать и напрямую (как обычно это делается) и косвенно, посредством «контекстной кисти»
Вы думаете, что «Фотошоп» творит чудеса в искажении реальности? Да, он может бесследно удалить человека с фотографии или нарастить волосы на голове, как у Илона Маска, с помощью «контекстной кисти». Но это и рядом не стоит с тем, на что способна нейросеть, если разрешить ей редактирование с контекстным анализом. Это совершенно другая реальность. Нейросеть способна заставить человека на фотографии улыбаться, придать вашей девушке черты Анджелины Джоли и так далее. Возможности безграничны.
Первая ласточка в этой области — нейронный фоторедактор Neural Photo Editor, который разработали сотрудники школы инженерных и физических наук в Университете Хериота-Уатта (Эдинбург, Великобритания) вместе с коллегой из компании Renishaw.
Последние достижения в создании генеративных моделей для изображений привели к появлению нейросетей, которые после обучения генерируют сэмплы и производят интерполяцию высочайшего качества. В данной области применяют два основных метода, изобретённых в 2013-2014 годах: Variational Autoencoder (VAE) и Generative Adversarial Network (GAN). Они показали, что нейросеть способна генерировать сложные, многомерные структуры в натуральных изображениях.
Вариационные автоэнкодеры VAE — это вероятностные графические модели, которые обучаются максимизировать вариационные нижние границы (исходя из вероятности данных), проецируя результат обучения в скрытое пространство (latent space), а затем реконструируя изображение из этого пространства.
Генеративные состязательные сети (GAN) осваивают генеративную модель, тренируя одну сеть («дискриминатор») отличать реальные и сгенерированные данные. Одновременно другая сеть («генератор») обучается генерировать сэмплы, которые дискриминатор не отличит от реальных.
Оба метода подходят для генерации изображений в скрытом пространстве – например, для добавления улыбки на хмурое лицо. У каждого из них свои преимущества и недостатки.
Нейронный фоторедактор Neural Photo Editor — это инновационный интерфейс для работы со скрытым пространством генеративных моделей. Такой метод позволяет осуществлять конкретные семантические правки в изображении с использованием «контекстной кисти», которая опосредованно изменяет собственный вектор.
Ключевая идея в нейронном фоторедакторе — изменять скрытое пространство интуитивно понятным способом, то есть редактированием обычного изображения. Пользователь выбирает цвет и размер кисти — применяет его на результирующем изображении. Нейросеть выполняет обратную свёртку, вычисляя разницу между цветом исходных пикселей и цветом кисти, и изменяет скрытое пространство, чтобы минимизировать эту разницу. В итоге мы получаем семантически осмысленные правки в результирующем изображении — изменения причёски, улыбку, ямочки на щёках и т.д.
Результат изменения фотографии с помощью нейронного фоторедактора
Простой пример. Если мы берём фотографию белого лица с чёрными волосами — и применяем чёрную кисть на лбу, но нейронный фоторедактор автоматически добавит туда волосы. Редактор работает в реальном времени на приличном GPU.
Для улучшения результата редактирования в редакторе есть возможность редактирования реконструкции изображения после трансформации нейросетью (интерполяционная маска). В этом случае результат выходит более качественным (на иллюстрации внизу).
Визуализация интерполяционной маски. Вверху слева направо: реконструкция, дельта (ошибка) реконструкции, оригинальное изображение. Внизу: модицифированная реконструкция, дельта, результирующее изображение
На следующих изображениях показаны примеры работы нейросети в реконструкции и интерполяции фотографий из баз CelebA, ImageNet и SVHN. Слева — исходные изображения, с каждым шагом направо показаны результаты постепенной реконструкции в нейросети.
Свою работу авторы опубликовали 22 сентября 2016 года на arXiv.org.
Код программы Neural Photo Editor опубликован на Github. В том же репозитории опубликован код интроспективной состязательной нейросети, которая представляет собой гибрид вариационных автоэнкодеров (VAE) и генеративных состязательных сетей (GAN).
Для запуска Neural Photo Editor понадобятся:
- Theano, библиотека Python для эффективного определения, оптимизации и оценки математических выражений с использованием многомерных массивов.
- Lasagne, библиотека для создания и обучения нейросетей на Theano.
- Для повышения производительности рекомендуется (но не обязательно) установить cuDNN, библиотеку от Nvidia для аппаратного ускорения стандартных процедур, таких как прямая и обратная свёртка, пулинг, нормализация и активация слоёв. Это часть Nvidia Deep Learning SDK.
- numpy, scipy, PIL, Tkinter и tkColorChooser из комплекта установки Python.
Комментарии (12)
Mad_Quaker
29.09.2016 17:06+4Ну вот и кнопка «сделать красиво» не за горами уже. А вы все «нельзя», да «невозможно»…
osvirt
29.09.2016 18:33на «Спектруме» ещё баловался программой-фотороботом…
В статье куча одинаковых лиц с разными причёсками и бородами. А! ну ещё кучей умных слов же!!!
kalobyte
29.09.2016 20:26+1«Для улучшения результата редактирования в редакторе есть возможность редактирования реконструкции изображения после трансформации нейросетью (интерполяционная маска). В этом случае результат выходит более качественным (на иллюстрации внизу).»
Высочайшие достижения нейтронной мегалоплазмы! — провозгласил он. — Ротор поля наподобие дивергенции градуирует себя вдоль спина и там, внутре, обращает материю вопроса в спиритуальные электрические вихри, из коих и возникает синекдоха отвечания…
вобщем тупым гоимам не понять
hp6812er
30.09.2016 13:37Я так и не понял, как из чёрного муравья могла получиться светлая собака??? (картинка в примере работы сетки...)
amarao
Я правильно понимаю, что это обычные программы морфинга (которые были ещё в моё детство), но оперирующие не с картинкой, а не нейронной сетью? Т.е. в сеть, которая реконструирует одно изображение добавляют N элементов от другой сети?
Sadler
Не совсем так. Это Вам выдают в красивом виде самый короткий скрытый слой сети, каждый параметр в котором теоретически должен давать некие осмысленные изменения изображения, такие как пол, возраст, цвет волос, форма черепа и т. п. К сожалению, эта штука очень специализирована, качество её работы сильно зависит от исходников, на которых её учат. В случае же, если сеть не может выделить осмысленные параметры, она и реализует что-то наподобие обычного алгоритма морфинга.
gsaw
Это реализация алгоритма «померещилось»