GAN – генеративно-состязательная нейросеть (Generative adversarial network, GAN) – один из алгоритмов классического машинного обучения, обучения без учителя. Суть идеи в комбинации двух нейросетей, при которой одновременно работает два алгоритма “генератор” и “дискриминатор”. Задача генератора – генерировать образы заданной категории. Задача дискриминатора – пытаться распознать созданный образ.

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

Каким образом нейросеть может что-то генерировать и распознавать?

Дискриминатор. Для распознавания используются сверточные нейронные сети (CNN). Принципы работы и применение CNN описаны в отдельной статье. Для понимания “на пальцах”: CNN может распознавать образы на картинках, например, выделять из всего изображения лица, цифры и т.п. Для того, чтобы нейронная сеть научилась что-то распознавать, ей нужно обработать большое количество изображений, где содержатся искомые образы.

Простым языком: вы даете нейронной сети большое количество картинок котиков, на которых отмечаете в какой части изображения находятся котики (это называется “разметка”), и потом нейросеть уже сама способна сказать есть ли на картинке котики и где они находятся.

Генератор. Формирование изображений начинается с генерации произвольного шума, на котором постепенно начинают проступать фрагменты искомого изображения. Представьте себе, что вы трясете тарелку с песком, пока не удается “натрясти” что-то, отдаленно напоминающее цифру. А затем продолжаете трясти пока контуры цифры не станут более явными.  Нейросеть запоминает каким именно образом вы трясли тарелку, чтобы добиться такого результата, и в следующий раз воспроизводит ваши действия.

Генератор изображений CNN

Естественно, это иллюстративный пример и в реальных моделях применяются более разумные подходы. В качестве генерирующей нейронной сети могут использоваться (и часто используются) сети FFNNнейронные сети прямого распространения (feed forward neural networks).

Как и где применяются GAN и генеративные модели?

Создание контента и данных:  например, создание картинок для интернет-магазина, аватаров для игр, видеоклипов, сгенерированных автоматически, исходя из музыкального бита произведения, или даже виртуальных ведущих для ТВ-программ. Благодаря работе GAN и генеративных моделей возникает синтез данных, на которых потом будут обучаться другие системы.

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

Применение GAN нейросетей – реальные вдохновляющие примеры

Генерация потрясающе реалистичных изображений “знаменитостей” (а на самом деле – несуществующих людей) с помощью PG GAN от nVidia. C помощью этой сети можно также генерировать изображения любых других категорий.

Генерация лиц

https://medium.com/

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

генерация изображений предметов

https://towardsdatascience.com/

Модель Everybody Dance Now, созданная группой ученых из Университета Беркли, представляет простой метод на основе генеративных нейронных сетей передачи движения «сделай как я». Дано: исходное видео танцующего человека. Достигнутый результат: мы заставляем изображение другого человека танцевать. Это называется “перенос движения”.

Перенос стиля из одного изображения на другое позволяет при помощи нейросетей делать такие впечатляющие вещи как “превратить лошадь в зебру”

Генератор изображений CNN

https://kharshit.github.io/

Или генерировать “аниме-портреты” по фотографии. На этой картинке видно, как с этой задачей справляются разные виды ГАНов.

Изменение лица

https://towardsdatascience.com/

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

Изменение эмоций CNN

https://towardsdatascience.com/

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

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

Переобразование набросков в картинку

https://affinelayer.com/pixsrv/

Вместо заключения: что конкретно можно разработать, используя нейронные сети GAN

Поскольку GAN – довольно молодой метод (он появился только в 2014 году, а первые “приличные” результаты появились в 2016-2017 годах), еще никто не знает достоверно, что можно, а чего нельзя сделать с помощью GAN. Обзорам новых вариаций GAN и способам их применения посвящено много статей, мы же соберем самые интересные из них и будем публиковать их в нашем блоге.

Для чего мы в Evergreen планируем применять нейронные сети GAN? Основная идея – автоматизация производства контента, который раньше требовал усилий дизайнеров.

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

28.01.2019
Используемые в статье картинки взяты из открытых источников и используются как иллюстрации.