Аниме и генеративно-состязательная сеть: в чём связь?

Перевод
2
3827
Добавить в избранное

Генеративно-состязательная сеть, которую вы построите, создаёт персонажей из манги и аниме. Рисуйте вайфу в своё удовольствие!

Аниме и генеративно-состязательная сеть: в чём связь?

Давно хотели создать своих Аску, Код 002 или Канеки Кена? У вас появилась отличная возможность это сделать 🙂

Что такое генеративно-состязательная сеть?

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

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

Аниме и генеративно-состязательная сеть: в чём связь?

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

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

Помните, что весовые коэффициенты дискриминатора «заморожены» во время последнего шага.

Причина сочетания обоих сетей состоит в отсутствии обратной связи на выходах генератора. Единственный ориентир – если дискриминатор принимает выходы генератора.

Генеративно-состязательная сеть

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

Наша сеть

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

Вот несколько рекомендаций для таких сетей:

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

Детали сетапа

  • версия Keras==2.2.4
  • TensorFlow==1.8.0
  • Jupyter Notebook
  • Matplotlib и другие библиотеки типа NumPy, Pandas
  • Python==3.5.7

Набор данных

Набор данных для лиц из аниме можно собрать на тематических сайтах, скачивая картинки и вырезая лица. Код Python, который демонстрирует это.

Также доступны обработанные и обрезанные лица.

Аниме и генеративно-состязательная сеть: в чём связь?

Генератор

Он состоит из сверточных слоёв, пакетной нормализации и функции активации Leaky ReLU для повышения частоты дискретизации. Мы используем параметр шагов в сверточном слое, чтобы избежать нестабильной обучаемости GAN. Функция не будет равно нулю, если x < 0, вместо этого Leaky ReLU имеет небольшое отрицательное отклонение (0.01 и так далее).

Аниме и генеративно-состязательная сеть: в чём связь?

Код

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

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

Аниме и генеративно-состязательная сеть: в чём связь?

Код

Полная GAN

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

Код

Аниме и генеративно-состязательная сеть: в чём связь?

Тренировка модели

Генеративно-состязательная сеть

Базовая конфигурация модели

Аниме и генеративно-состязательная сеть: в чём связь?

1. Сгенерируйте случайный нормальный шум для входа:

2. Объедините реальные данные из набора с шумом:

3. Подайте шум на вход:

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

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

6. Тренируем совмещённую GAN:

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

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

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

Генеративно-состязательная сеть Аниме и генеративно-состязательная сеть: в чём связь?

Более длительная тренировка с большим набором данных приведёт к лучшим результатам. (Некоторые лица получились страшными, это правда :D)

Заключение

Наверняка задача генерации лиц в стиле аниме интересна.

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

Исходный код проекта доступен на GitHub.

А что бы вы улучшили в этой нейронной сети?

Интересуетесь Data Science?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 2

  1. Айзек Венс

    >>> Рисуйте вайфу
    >>> Канеки Кена

    😀

    1. Мейл версия 😀 Не тян же едиными)

Добавить комментарий