Неудивительно, что множество открытий и изобретений в любой области исходит из личных интересов исследователей. Этот новый подход к переводу человеческих портретов также является одним из вдохновляющих личных проектов. Автор Twin-GAN Джерри Ли интересовался аниме, но его не удовлетворили попытки нарисовать любимых персонажей. Итак, когда он начал заниматься машинным обучением, он пришел к вопросу: Как превратить человеческие портреты в персонажей аниме с помощью ИИ?. И вуаля, теперь у нас есть инструмент, который может превратить человеческий портрет в оригинального аниме-персонажа, морду кошки или любого персонажа, заданного пользователем.

Но давайте сначала проверим предыдущие попытки научить ИИ рисовать.

Передача нейронного стиля. В рамках этого подхода стиль одного изображения применяется к другому, как вы можете видеть ниже. Важным моментом является то, что метод передачи стиля требует предварительно обученной сети обнаружения объектов. Большинство таких сетей обучаются на реальных объектах. Таким образом, это решение вряд ли поможет с аниме-стилем, если вы не создадите новый набор данных вручную, наняв этикетировщиков, чтобы пометить все носы, рты, глаза, волосы и другие специфические особенности. Но это будет стоить вам ОЧЕНЬ ДЕНЕГ.

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

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

Непарные междоменные GAN и CycleGAN. К счастью, Facebook в 2016 году (Неконтролируемое создание междоменных изображений) и Jun-Yan Zhu et.al. в 2017 году (CycleGAN) представил довольно похожие подходы к тому, как переводить два типа изображений, один из которых имеет метки, без парных данных. Обе модели предполагают: при переводе типа изображения A в тип изображения B и переводе B обратно в A результирующее изображение после двух переводов не должно сильно отличаться от исходного входного изображения. Это различие, которое возникает в любом случае, называется потерей согласованности цикла, и его можно использовать для обучения модели преобразования изображений.

Итак, до создания Twin-GAN Джерри Ли пытался использовать CycleGAN для перевода человеческих портретов в персонажей аниме. Он взял 200 тысяч изображений из набора данных CelebA в виде портретов людей и около 30 тысяч аниме-фигурок с веб-сайта Getchu. Два дня тренировок, и он получил результаты, изображенные ниже.

Результаты неплохие, но они обнаруживают некоторые ограничения CycleGAN. Эта сеть сводит к минимуму потерю согласованности цикла, и, следовательно, она вынуждена находить взаимно однозначное сопоставление для всей информации от входа до целевого домена. Однако это не всегда возможно между портретами людей и персонажами аниме: у людей обычно нет фиолетового или зеленого цвета волос, а их лица гораздо более детализированы, чем в аниме. Принуждение сети к поиску взаимно однозначного сопоставления в таких обстоятельствах, вероятно, не даст хороших результатов.

Итак, вопрос заключался в следующем: как найти совпадающие части из двух доменов, не имея размеченных данных, и внести небольшие изменения в остальные?

Чтобы решить эту проблему, Джерри Ли искал вдохновения в Style Transfer. Он ссылается на Винсента Дюмулена из Google Brain, который обнаружил, что, изучив только две переменные в пакетной нормализации, можно использовать одну и ту же сеть для вывода изображений с широким диапазоном стилей. Более того, можно даже смешивать и сочетать стиль, смешивая эти параметры.

С учетом этих идей была наконец создана структура Twin-GAN. В качестве генератора был выбран PGGAN. Эта сеть принимает на вход вектор большой размерности, а в нашем случае - изображение. Таким образом, исследователь использовал кодировщик со структурой, симметричной PGGAN, чтобы закодировать изображение в вектор большой размерности. Затем, чтобы сохранить детали входного изображения, он использовал структуру UNet для соединения сверточных слоев в кодировщике с соответствующими слоями в генераторе.

Входные и выходные данные делятся на следующие три категории:

1. Человеческий портрет- ›Кодировщик-› Высокомерный вектор- ›PGGAN Generator + Human-specific-batch-norm-› Человеческий портрет

2. Аниме-портрет- ›Кодировщик-› Высокомерный вектор- ›PGGAN Generator + anime-specific-batch-norm-› Аниме-портрет

3. Человеческий портрет- ›Кодировщик-› Высокомерный вектор- ›PGGAN Generator + anime-specific-batch-norm-› Аниме Портрет

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

Что касается функции потерь, использовались следующие четыре потери: 1) потеря реконструкции человеческого портрета; 2) потеря реконструкции портрета аниме; 3) потеря GAN от человека к аниме; 4) потеря согласованности цикла от человека к аниме.

Вот результаты перевода человеческих портретов в персонажей аниме с помощью Twin-GAN.

Результаты впечатляют. Но оказалось, что Twin-GAN может даже больше. Поскольку аниме и реальные человеческие портреты имеют одно и то же скрытое встраивание, можно извлечь это вложение и выполнить поиск ближайшего соседа в обоих доменах. Проще говоря, по изображению мы можем найти, кто выглядит ближе всего как в реальных, так и в аниме-изображениях! См. Результаты ниже.

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

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

Twin-GAN может превратить человеческий портрет в оригинального аниме-персонажа, морду кошки или любого персонажа, заданного пользователем, и алгоритм демонстрирует неплохую производительность при выполнении этих задач. Однако он также подвержен некоторым ошибкам, таким как принятие цвета фона за цвет волос, игнорирование важных функций и / или их неправильное распознавание. При рассмотрении создания аниме-персонажей проблема также связана с наличием хорошо сбалансированного набора данных: большинство аниме-лиц, собранных исследователем, - женские, поэтому сеть склонна переводить мужские человеческие портреты в женские аниме-персонажи, как на изображение ниже.

Подводя итог, можно сказать, что это отличное начало, но необходимо проделать еще немного работы, чтобы повысить эффективность этого многообещающего подхода.

Катерина Койдан