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

Несмотря на то, что по этой задаче было проведено множество исследований, в большинстве своем использовалось контролируемое обучение, когда у нас есть доступ к (x, y ) пары соответствующих изображений из двух доменов, между которыми мы хотим научиться переводить. CycleGAN был представлен в хорошо известной статье 2017 года из Беркли Непарный преобразование изображения в изображение с использованием согласованных с циклом состязательных сетей. Это было интересно, потому что для него не требовались парные обучающие данные - хотя наборы изображений x и y по-прежнему требуются, им не нужно напрямую соответствуют друг другу. Другими словами, если вы хотите выполнить перевод между эскизами и фотографиями, вам все равно нужно потренироваться на нескольких эскизах и нескольких фотографиях, но эскизы не обязательно должны быть из точных фотографий в ваш набор данных.

Поскольку парные данные труднее найти в большинстве областей, а в некоторых даже невозможно, возможности обучения без учителя в CycleGAN весьма полезны.

Как это работает?

Повесть о двух генераторах

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

Мы вызываем один генератор G и заставляем его преобразовывать изображения из домена X в домен Y. Другой генератор называется F и преобразует изображения из Y в X.

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

Целевая функция

Целевая функция CycleGAN состоит из двух компонентов: состязательной потери и потери согласованности цикла. Оба необходимы для получения хороших результатов.

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

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

потеря согласованности цикла решает эту проблему. Он основан на ожидании, что если вы конвертируете изображение в другой домен и обратно, последовательно пропуская его через оба генератора, вы должны получить обратно что-то похожее на то, что вы вставили. Он обеспечивает выполнение этого F (G (x)) ≈ x и G (F ( y)) ≈ y.

Мы можем создать полную целевую функцию, сложив эти термы вместе и взвесив потерю согласованности цикла с помощью гиперпараметра λ. Мы предлагаем установить λ = 10.

Генератор Архитектура

Каждый генератор CycleGAN состоит из трех частей: кодировщика, преобразователя и декодера. Входное изображение подается непосредственно в кодировщик, который уменьшает размер представления при увеличении количества каналов. Кодер состоит из трех сверточных слоев. Результирующая активация затем передается на трансформатор, серию из шести остаточных блоков. Затем он снова расширяется декодером, который использует две свертки транспонирования для увеличения размера представления и один выходной слой для создания окончательного изображения в RGB.

Подробности вы можете увидеть на рисунке ниже. Обратите внимание, что за каждым уровнем следует нормализация экземпляра и уровень ReLU, но они были опущены для простоты.

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

Дискриминаторная архитектура

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

Если вы читали о других системах преобразования изображений в изображения, возможно, вы уже знакомы с PatchGAN. Ко времени публикации статьи CycleGAN версия PatchGAN уже успешно использовалась в парном переводе изображения в изображение Исолой и др. В Преобразовании изображения в изображение с условными состязательными сетями.

Как вы можете видеть в приведенном выше примере архитектуры, PatchGAN вдвое уменьшает размер представления и удваивает количество каналов, пока не будет достигнут желаемый выходной размер. В этом случае было бы наиболее эффективно, если бы PatchGAN оценил входные участки размером 70x70.

Уменьшение колебаний модели

Чтобы предотвратить резкое изменение модели от итерации к итерации, дискриминаторам была передана история сгенерированных изображений, а не только тех, которые были созданы последними версиями генераторов. Для этого у нас есть пул для хранения 50 последних сгенерированных изображений. Этот метод уменьшения колебаний модели был впервые предложен Шриваставой и др. в Обучение на смоделированных и неконтролируемых изображениях посредством состязательного обучения.

Прочие подробности обучения

Подход к обучению был довольно типичным для задачи перевода изображения в изображение. Оптимизатор Адама, распространенный вариант градиентного спуска, был использован для повышения стабильности и эффективности обучения. Скорость обучения была установлена ​​на 0,0002 для первой половины обучения, а затем линейно уменьшена до нуля на оставшихся итерациях. Размер пакета был установлен на 1, поэтому на схемах архитектуры выше мы говорим о нормализации экземпляра, а не о пакетной нормализации.

Сильные стороны и ограничения

В целом, результаты CycleGAN очень хорошие - качество изображения приближается к качеству парного преобразования изображения в изображение во многих задачах. Это впечатляет, потому что парные задачи по переводу - это форма полностью контролируемого обучения, а это не так. Когда вышла статья CycleGAN, она превосходила другие методы неконтролируемого перевода изображений, доступные в то время. В экспериментах «реальное против фальшивого» люди не могли отличить синтезированное изображение от реального примерно в 25% случаев.

Если вы планируете использовать CycleGAN в практических целях, важно осознавать его сильные стороны и ограничения. Он хорошо работает с задачами, связанными с изменением цвета или текстуры, такими как ежедневный перевод фотографий или задачами от фотографии к рисованию, такими как перенос стиля коллекции (см. Выше). Однако задачи, требующие существенных геометрических изменений изображения, такие как перевод от кошки к собаке, обычно терпят неудачу.

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

Заключение

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