Что будет, если объединить фоторедактор и нейросеть.
Вы думаете, что "Фотошоп" творит чудеса в искажении реальности? Да, он может бесследно удалить человека с фотографии или нарастить волосы на голове, как у Илона маска, с помощью "Контекстной Кисти". Но это и рядом не стоит с тем, на что способна нейросеть, если разрешить ей редактирование с контекстным анализом. Это совершенно другая реальность. Нейросеть способна заставить человека на фотографии улыбаться, придать вашей девушке черты Анджелины Джоли и так далее. Возможности безграничны.
Первая ласточка в этой области - нейронный фоторедактор 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. Источник: {link0}.