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

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!



Мы рассказали про выпускные проекты выпускников семестровых курсов по мобильной разработке Технопарка (МГТУ им. Баумана) (предыдущие публикации: «Разработка приложений на 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)

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

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

Генератор:


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

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


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

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

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

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

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

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





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

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

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

Movie posters GAN/embed


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

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

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

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


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


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


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

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


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

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


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

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



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


Интересные статьи

Интересные статьи

Сегодня для решения множества прикладных задач требуется возможность генерировать случайные числа. Очевидно, что в зависимости от того, какая конкретно задача решается, к...
В заголовке этого материала уже сказано о самой главной возможности программы, о которой я хочу рассказать. Речь идёт о GoTTY. Эта программа позволяет организовывать общий доступ к прилож...
Если у вас имеется больше одного Linux-компьютера, то вы, вероятно, постоянно пользуетесь ssh. Это — отличный инструмент, но мне всегда казалась в нём странной одна деталь. Несмотря н...
Немного прошерстив Habr удивился тому, что очень мало опубликовано статей на тему (beta-)фичи GitHub'а — Actions. Казалось бы, можно объяснить такую недосказанность тем, что функционал еще в ...
В каких фильмах и сериалах всё показано верно? Мы расспросили настоящих астронавтов. «Марсианин» / «Армагеддон» / «Интерстеллар» / «Гравитация» Говорят, что в космосе никто не услышит ваш к...