Генератор жанровых постеров для фильмов и перенос стиля картинки — проекты студентов курса «Нейронные сети» Техносфера

pbfsqi8eth0t8sgl31y0uwng-1o.jpeg

Мы рассказали про выпускные проекты выпускников семестровых курсов по мобильной разработке Технопарка (МГТУ им. Баумана) (предыдущие публикации: «Разработка приложений на iOS», «Разработка приложений на Android»). Сегодня делимся интересными проектами студентов второго семестра Техносферы — совместного с МГУ образовательного проекта с годовой программой обучения в области анализа и работы с большими объемами данных. Студенты проходят курсы по машинному обучению, инфопоиску, нейронным сетям и другим дисциплинам. В обучении применён проектный метод, поэтому итоги семестра мы подводим на защитах студенческих проектов.

В образовательном процессе большую роль играют эксперименты. Студенческие проекты без них не обходятся: ребята пробуют разные подходы, методы, архитектуры, инструменты. Часто после эксперимента студенты отказываются от выбора технологии и алгоритма в пользу нового подхода. Это большая часть опыта и обучения. Ниже мы расскажем о таких этапах в разработке двух студенческих проектах.

  • Проект Movie posters GAN/embed.
  • Проект Cyrclegan on cartoon series.


CycleGAN on cartoon series


Авторы этого проекта решили использовать технику CycleGAN для перевода картинок из одного анимационного фильма в другой. GAN (Generative adversarial network) — методика обучения моделей image-to-image. Обучаются две нейронные сети: дискриминатор и генератор, которые находятся в соперничающих отношениях. Генератор пытается увеличить ошибку классификации, дискриминатор — уменьшить. А CycleGAN — методика передачи обучения imag-to-image в режиме без учителя.

Допустим, есть два домена картинок — A и В. Создаются два генератора и два дискриминатора: gen_A2B, gen_B2A, disc_A, disc_B. Нужно, чтобы по картинке из A генератор gen_A2B создавал эту же картинку, но так, чтобы она была в домене B. Для этого вводят cycle consistency loss:

l1loss(gen_b2a(gen_a2b(a)), a)


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

Архитектура решения:

Генератор:

648cc3ad95d327e8436d44ffbfe2d866.png


Resnet-блоки позволяют запоминать изначальную картинку. Также использовались instance normalization вместо batch normalization, потому что последний добавляет шумы из других картинок.

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

a87fd9462ea7e781bc1ebb3b0eaa9646.png


Готового набора изображений не нашлось, поэтому выбрали картинки из ключевых кадров анимешных полнометражек: для А использовали «Унесенные призраками» Хаяо Миядзаки, а для B — «Твоё имя» Макото Синкая. Поскольку CycleGAN не очень подходят для кардинальных изменений (например, формы), авторы взяли оба домена из аниме.

В качестве функции потерь использовали сначала LSGAN, а потом WGAN GP, потому что LSGAN в процессе обучения создавал странные артефакты и терял цвета.

Для обучения использовали предобученную на horse2zebra модель (веса найдены лишь для генераторов). Она уже имеет понимание, что ей надо сохранять содержимое картинки, поэтому авторы в самом начале получили неплохой autoencoder, который оставалось только научить обманывать дискриминатор.

В самом начале обучения выставляли большое значение для cycle loss identity loss и gradient clipping, но когда прошло достаточно эпох, решили понемногу уменьшать эти значения, чтобы генератор стал чуть больше пытаться обманывать дискриминатор.

Также пытались в качестве дискриминатора использовать большие предобученные сети (VGG, RESNET, Inception), но они очень большие и обучение сильно замедлялось.

В результате работе удалось достичь того, что, стиль переносится близко к оригиналу, с сохранением общей цветовой гаммы (сверху оригиналы, снизу сгенерированные картинки):

8e5652998c04421ca756e43a08f61193.jpg


54cc62a5c381c23186a3696fee552afd.jpg


ff3b59b6e938e8eb1f9a31960ea7be72.jpg


83b3fa71103c1a46ca9ea6c26fd2bd59.jpg


Код проекта: https://github.com/IlyasKharunov/Cyclegan_project

Команда проекта: Ильяс Харунов, Олег Вербин.

Видео с защитой проекта.

Movie posters GAN/embed


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

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

С сайта IMDB автор взял 41 тыс. постеров для фильмов в двадцати жанрах за период 1970–2020. Позднее выяснилось, что для некоторых жанров изображений слишком мало, поэтому Дмитрий сбалансировал набор по жанрам, и в итоге осталось 32 тыс. постеров.

Затем для безжанрового генерирования картинок студент применил нейросеть с архитектурой DCGAN. Она работала с постерами размера 64×128.

5898d9df746ac8334ce216b7942e6c7c.png


Результаты получились криповатые:

71e8f0de4bdc65e442515d266d710eb9.png


Затем автор попробовал архитектуру CVAE+DCGAN:

3340d45480e536b39fde9ad34dd89842.png


А также VAE без GAN и GAN с классификатором. Пришел к заключению, что собранный набор постеров слишком сложен для этих методов. Тогда автор применил conditional GAN: это то же самое, что и DCGAN, только жанры теперь подавались и в генератор, и в дискриминатор. Латентный вектор z был взят длиной 100, жанры в hot-формате длиной 20, в результате получился вектор длиной 120. К ответу был добавлен жанр и выполнялся дополнительный прогон по одному линейному слою.

Удалось добиться такого результата:

b42824b4e5749fd0fde4db1a9f4dae46.png


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

Процесс обучения сети:


Команда проекта: Дмитрий Питеркин.

Видео с защитой проекта.


В скором времени мы расскажем и о самых интересных дипломных проектах по разработке на C++ и Go, фронтенд-разработке и созданию интерфейсов. Подробнее о наших образовательных проектах вы можете почитать по этой ссылке. И почаще заходите на канал Технострим, там регулярно появляются новые обучающие видео о программировании, разработке и других дисциплинах.

© Habrahabr.ru