Полное руководство по созданию генерирующей состязательной сети (GAN), чтобы создавать собственных аниме-персонажей с Керасом.
В этом посте мы научимся разрабатывать генеративную состязательную сеть (GAN) для создания реалистичных персонажей манги или аниме.
Меня всегда поражала яркая анимация, особенно манга, ее смелый вид и штрихи. Разве не было бы здорово иметь возможность нарисовать несколько штук самостоятельно, испытать острые ощущения от их создания с помощью собственной нейронной сети ?!
Так что же отличает GAN от других?
Лучший способ овладеть каким-либо навыком - практиковать и импровизировать, пока вы не будете удовлетворены собой и своими усилиями. Для машины или нейронной сети лучший результат, который она может сгенерировать, - это тот, который соответствует результатам, созданным человеком, или даже обманом заставить человека поверить, что человек на самом деле произвел результат. Именно этим и занимается GAN - ну, по крайней мере, образно;)
Генеративные состязательные сети в последнее время стали горячей темой в глубоком обучении. Представленные Яном Гудфеллоу и др., Они имеют возможность генерировать выходные данные с нуля.
Краткий обзор генерирующих состязательных сетей
В генерирующих враждебных сетях две сети тренируются и соревнуются друг с другом, что приводит к взаимной импровизации. Генератор вводит дискриминатор в заблуждение, создавая убедительные поддельные входные данные, и пытается обмануть дискриминатор, заставляя их думать о них как о настоящих входных данных . Дискриминатор сообщает, является ли вход настоящим или поддельным.
В обучении GAN есть 3 основных шага:
- Использование генератора для создания поддельных входных данных на основе случайного шума или, в нашем случае, случайного нормального шума.
- Обучение дискриминатора как с реальными, так и с поддельными входными данными (либо одновременно путем объединения реальных и поддельных входных данных, либо один за другим, последний предпочтительнее).
- Обучите всю модель: модель построена с дискриминатором, совмещенным с генератором.
Важно отметить, что веса дискриминатора замораживаются на последнем этапе.
Причина объединения обеих сетей в том, что нет обратной связи на выходах генератора. ЕДИНСТВЕННОЕ руководство - если дискриминатор принимает выходной сигнал генератора.
Можно сказать, что это соперники, предназначенные друг для друга. Главный герой - это генератор, который стремится быть все лучше и лучше для реализации нашей цели, извлекая уроки из битвы со своим соперником, дискриминатором.
Это был краткий обзор архитектуры GAN. Если этого недостаточно, вы можете обратиться к этому подробному введению.
Глубокое обучение - для экспертов, экспертами. Мы используем наш многолетний опыт, чтобы еженедельно доставлять в ваш почтовый ящик лучшие ресурсы для глубокого обучения.
Наш GAN
Для поставленной задачи мы используем DCGAN (глубокая сверточная порождающая состязательная сеть).
Несколько рекомендаций, которым следует следовать при работе с DCGAN:
- Замените весь максимальный пул сверточными шагами
- Используйте транспонированную свертку для повышения частоты дискретизации.
- Удалите полностью связанные слои.
- Используйте пакетную нормализацию, за исключением выходного слоя для генератора и входного слоя дискриминатора.
- Используйте ReLU в генераторе, за исключением вывода, в котором используется tanh.
- Используйте в дискриминаторе LeakyReLU.
Детали установки
- Версия Keras == 2.2.4
- TensorFlow == 1.8.0
- Блокнот Jupyter
- Matplotlib и другие служебные библиотеки, такие как NumPy, Pandas.
- Python == 3.5.7
Набор данных
Набор данных для лиц аниме можно создать, просматривая различные веб-сайты манги и загружая изображения, вырезая из них лица и изменяя их размер до стандартного размера. Ниже приведена ссылка на код Python, изображающий то же самое:
Мне посчастливилось найти предварительно обработанный (с обрезанными лицами) набор данных со следующих сайтов:
Взгляд на набор данных-
Модель
Теперь давайте посмотрим на архитектуру нашей нейронной сети! Не забывайте, что мы обсуждали ранее о DCGAN.
В этой реализации GAN используются слои деконфигурации в Keras. Я пробовал различные комбинации слоев, такие как:
- Конв + повышающая дискретизация
- Conv + билинейный
- Conv + субпиксельное масштабирование
Примечание. Полный код можно найти в моем репозитории.
Генератор
Генератор состоит из слоев свертки и транспонирования, за которыми следует пакетная нормализация и функция активации ReLU с повышенной частотой дискретизации. Мы будем использовать параметр strides в сверточном слое. Это сделано для того, чтобы избежать нестабильных тренировок. Leaky ReLU - это одна из попыток решить проблему умирающего ReLU. Вместо того, чтобы функция была равна нулю, когда x
Код
Дискриминатор
Дискриминатор также состоит из слоев свертки, где мы используем шаги для понижения дискретизации и пакетной нормализации для стабильности.
Код
Скомпилированный GAN
Чтобы выполнить обратное распространение для генератора, чтобы контролировать его выходы, мы составляем сеть в Keras - генератор , за которым следует дискриминатор.
В этой сети входом является случайный шум для генератора, а выходом будет выход генератора, подаваемый на дискриминатор, сохраняя веса дискриминатора замороженными , чтобы избежать состязательного коллапса . Звучит круто, правда? "Поищи это!"
Код
Обучение модели
Основные конфигурации модели
- Генерация случайного нормального шума для ввода
2. Объедините реальные данные, взятые из набора данных, с генерируемым шумом.
3. Добавьте шум к метке ввода.
4. Тренировка только генератора
5. Тренировка только дискриминатора
6. Обучите комбинированный GAN
7. Сохранение экземпляров генератора и дискриминатора.
Я обучил этот код на моем Acer-Predator helios 300, что заняло почти полчаса на 10000 шагов и около 32000 изображений с графическим процессором Nvidia GTX GeForce 1050Ti.
Результаты манги-генератора
После тренировки на 10000 шагов результаты оказались довольно крутыми и удовлетворительными. Посмотри!
Что касается улучшения модели, я думаю, что обучение в течение более длительного времени и с большим набором данных улучшило бы результаты еще больше (некоторые лица были ужасно странными! Не в обычной манге, я должен сказать: D)
Заключение
Задача создания лиц в стиле манга была, безусловно, интересной.
Но есть еще немало возможностей для улучшения за счет лучшего обучения, моделей и наборов данных. Наша модель не может заставить человека задуматься, были ли эти созданные лица настоящими или фальшивыми; даже в этом случае он заметно хорошо справляется с созданием изображений в стиле манга. Не бойтесь попробовать это и с полными позами манги.
Репозиторий
Вот ссылка на мой репозиторий GitHub. Не стесняйтесь смотреть, клонировать или импровизировать. Приветствуются всевозможные предложения и критические замечания. Пожалуйста, проголосуйте, если вам нравится содержание и реализация.
Источники
- Https://towardsdatascience.com/generate-anime-style-face-using-dcgan-and-explore-its-latent-feature-presentation-ae0e905f3974
- Https://github.com/pavitrakumar78/Anime-Face-GAN-Keras
- 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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.