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

В этом посте мы научимся разрабатывать генеративную состязательную сеть (GAN) для создания реалистичных персонажей манги или аниме.

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

Так что же отличает GAN от других?

Лучший способ овладеть каким-либо навыком - практиковать и импровизировать, пока вы не будете удовлетворены собой и своими усилиями. Для машины или нейронной сети лучший результат, который она может сгенерировать, - это тот, который соответствует результатам, созданным человеком, или даже обманом заставить человека поверить, что человек на самом деле произвел результат. Именно этим и занимается GAN - ну, по крайней мере, образно;)

Генеративные состязательные сети в последнее время стали горячей темой в глубоком обучении. Представленные Яном Гудфеллоу и др., Они имеют возможность генерировать выходные данные с нуля.

Краткий обзор генерирующих состязательных сетей

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

В обучении GAN есть 3 основных шага:

  1. Использование генератора для создания поддельных входных данных на основе случайного шума или, в нашем случае, случайного нормального шума.
  2. Обучение дискриминатора как с реальными, так и с поддельными входными данными (либо одновременно путем объединения реальных и поддельных входных данных, либо один за другим, последний предпочтительнее).
  3. Обучите всю модель: модель построена с дискриминатором, совмещенным с генератором.

Важно отметить, что веса дискриминатора замораживаются на последнем этапе.

Причина объединения обеих сетей в том, что нет обратной связи на выходах генератора. ЕДИНСТВЕННОЕ руководство - если дискриминатор принимает выходной сигнал генератора.

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

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

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

Наш GAN

Для поставленной задачи мы используем DCGAN (глубокая сверточная порождающая состязательная сеть).

Несколько рекомендаций, которым следует следовать при работе с DCGAN:

  1. Замените весь максимальный пул сверточными шагами
  2. Используйте транспонированную свертку для повышения частоты дискретизации.
  3. Удалите полностью связанные слои.
  4. Используйте пакетную нормализацию, за исключением выходного слоя для генератора и входного слоя дискриминатора.
  5. Используйте ReLU в генераторе, за исключением вывода, в котором используется tanh.
  6. Используйте в дискриминаторе LeakyReLU.

Детали установки

  1. Версия Keras == 2.2.4
  2. TensorFlow == 1.8.0
  3. Блокнот Jupyter
  4. Matplotlib и другие служебные библиотеки, такие как NumPy, Pandas.
  5. Python == 3.5.7

Набор данных

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



Мне посчастливилось найти предварительно обработанный (с обрезанными лицами) набор данных со следующих сайтов:





Взгляд на набор данных-

Модель

Теперь давайте посмотрим на архитектуру нашей нейронной сети! Не забывайте, что мы обсуждали ранее о DCGAN.

В этой реализации GAN используются слои деконфигурации в Keras. Я пробовал различные комбинации слоев, такие как:

  • Конв + повышающая дискретизация
  • Conv + билинейный
  • Conv + субпиксельное масштабирование

Примечание. Полный код можно найти в моем репозитории.

Генератор

Генератор состоит из слоев свертки и транспонирования, за которыми следует пакетная нормализация и функция активации ReLU с повышенной частотой дискретизации. Мы будем использовать параметр strides в сверточном слое. Это сделано для того, чтобы избежать нестабильных тренировок. Leaky ReLU - это одна из попыток решить проблему умирающего ReLU. Вместо того, чтобы функция была равна нулю, когда x

Код

Дискриминатор

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

Код

Скомпилированный GAN

Чтобы выполнить обратное распространение для генератора, чтобы контролировать его выходы, мы составляем сеть в Keras - генератор , за которым следует дискриминатор.

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

Код

Обучение модели

Основные конфигурации модели

  1. Генерация случайного нормального шума для ввода

2. Объедините реальные данные, взятые из набора данных, с генерируемым шумом.

3. Добавьте шум к метке ввода.

4. Тренировка только генератора

5. Тренировка только дискриминатора

6. Обучите комбинированный GAN

7. Сохранение экземпляров генератора и дискриминатора.

Я обучил этот код на моем Acer-Predator helios 300, что заняло почти полчаса на 10000 шагов и около 32000 изображений с графическим процессором Nvidia GTX GeForce 1050Ti.

Результаты манги-генератора

После тренировки на 10000 шагов результаты оказались довольно крутыми и удовлетворительными. Посмотри!

Что касается улучшения модели, я думаю, что обучение в течение более длительного времени и с большим набором данных улучшило бы результаты еще больше (некоторые лица были ужасно странными! Не в обычной манге, я должен сказать: D)

Заключение

Задача создания лиц в стиле манга была, безусловно, интересной.

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

Репозиторий

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



Источники

  1. Https://towardsdatascience.com/generate-anime-style-face-using-dcgan-and-explore-its-latent-feature-presentation-ae0e905f3974
  2. Https://github.com/pavitrakumar78/Anime-Face-GAN-Keras
  3. Https://medium.com/@jonathan_hui/gan-dcgan-deep-convolutional-generative-adversarial-networks-df855c438f

Надеюсь, вам понравилась моя первая статья о генеративных состязательных сетях для создания манга-лиц! Не забудьте нажать кнопку "Проголосовать и подписаться"!

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

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.