Перед вами перевод статьи о применении CycleGAN для переноса стиля изображений и дальнейшего применения в компьютерных играх. Автор статьи — Чинтан Триведи, ссылка на оригинал в конце текста.
Если вы геймер, то наверняка слышали о двух самых популярных играх в жанре Королевская битва (Battle Royale): Fortnite и Player Unknown BattleGround (PUBG). Это две очень похожие игры, вдохновленные фильмом Голодные игры, в которых 100 игроков сражаются на маленьком острове до тех пор, пока не останется один выживший.
Мне нравится геймплей Fortnite, но я предпочитаю более реалистичные изображения PUBG. Это заставило меня задуматься, можно ли реализовать выбор визуальных эффектов в игре по своему вкусу, не полагаясь на разработчиков игр? Что, если можно было бы играть в Fortnite в оформлении из PUBG? Именно поэтому я решил разобраться, может ли глубокое обучение помочь в этом, и наткнулся на нейронные сети, называемые CycleGAN, которые очень хорошо умеют выполнять перенос стиля изображений. В этой статье я расскажу о том, как работают CycleGAN, а затем обучу их переносу стиля Fortnite в PUBG.
Что такое CycleGAN?
CycleGAN — это тип генеративно-состязательной сети, используемой для переноса стиля изображения. Код сети и реализацию на PyTorch смотрите на GitHub. CycleGAN можно обучить конвертировать изображения из одного домена (например, Fortnite) в другой, например, PUBG. Обучение выполняется без учителя, то есть не существует способа однозначного сопоставления изображений из обоих этих доменов.
Сеть способна распознавать объекты на изображениях исходного домена и выполнять необходимые преобразования для соответствия внешнему виду объекта на изображениях целевого домена. Первоначальная реализация этого алгоритма была обучена «превращению» лошадей в зебр, яблок в апельсины и фотографий в картины. Результаты оказались потрясающими.
Как работает CycleGAN
Давайте попробуем понять, как работают CycleGAN, используя Fortnite в качестве исходного домена и PUBG в качестве целевого. Используя множество скриншотов из обеих игр, мы будем обучать пару генеративно-состязательных сетей, одна из которых обучается визуальному стилю Fortnite, а другая — PUBG. Эти две сети обучаются одновременно и циклически, так что они учатся формировать соотношения между одними и теми же объектами в обеих играх и совершать соответствующие визуальные преобразования. На следующем рисунке показана общая архитектура циклической схемы обучения этих двух сетей.
Процесс обучения начинается с оригинального изображения из Fortnite. Мы будем обучать две глубокие сети, один генератор и один дискриминатор. Дискриминатор со временем научится различать реальные и имитированные изображения Fortnite. Генератор будет обучен конвертировать входное изображение из исходного домена в целевой домен, используя случайные скриншоты PUBG из обучающего набора.
Чтобы убедиться, что это преобразование имеет смысл, введем условие восстановления. Это означает, что мы одновременно обучаем другой набор генератора/дискриминатора, который восстанавливает изображение в исходном домене из целевого домена. Мы соблюдаем условие, что эта реконструкция должна быть «похожа» на исходное изображение, вычисляя величину функции потерь, которое мы стремимся минимизировать в процессе обучения. Это похоже на автоэнкодер, за исключением того, что мы ищем не кодирование в скрытом слое для промежуточного шага, а целое изображение в целевом домене.
Используемая сеть генератора (F2P) состоит из трех основных сверточных блоков. Первый находит кодировку скриншота Fortnite в скрытом слое меньшей размерности. Эта кодировка преобразуется в другую, которая представляет PUBG в том же скрытом слое. Затем декодер создает выходное изображение из преобразованной кодировки, давая нам изображение Fortnite, которое выглядит как PUBG.
Одно ограничение, с которым я столкнулся во время обучения, состояло в том, что я мог работать только с изображениями 256×256 из-за ограничений памяти GPU. Это существенно влияет на результаты, но если у вас больше, чем 8 ГБ видеопамяти, вы можете попытаться сгенерировать изображения с разрешением до 512×512. Если у вас получится, пожалуйста, сообщите мне!
Результаты
Сгенерированные CycleGAN изображения после 12 часов обучения выглядят крайне многообещающе. Сеть смогла успешно преобразовать цвета неба, деревьев и травы из Fortnite в цвета PUBG. Пересыщенные цвета Fortnite были преобразованы в более реалистичные цвета PUBG.
Небо выглядит менее голубым, а нереалистичная зелень травы и деревьев гораздо ближе к тем, что можно увидеть в PUBG. Сеть даже научилась заменять индикатор здоровья внизу экрана на пистолет и индикатор патронов PUBG! То, что не получилось связать в обоих доменах — это внешний вид плеера, поэтому пиксели вокруг него выглядят размытыми. В целом, сеть проделала достойную работу по выявлению объектов в обоих доменах и преобразованию их внешнего вида.
Еще больше результатов приведено в видео:
Если вам понравилось, не забудьте нажать здесь и подписаться на мой канал на YouTube!
Использование CycleGAN в играх
Хотя результаты получились очень интересными, понятно, что придется проделать много работы, прежде чем я смогу по-настоящему играть в Fortnite с графикой PUBG. Но как только мы научимся генерировать изображения с более высоким разрешением в реальном времени, используя эти сети, станет возможным создавать движки графических стилей игр без необходимости полагаться на разработчиков игр. Мы могли бы выбирать визуальный стиль игры по своему вкусу и использовать его в любой другой игре!