0. Введение

Генеративные состязательные модели (GAN) состоят из 2 нейронных сетей: генератора и дискриминатора. CycleGAN состоит из 2 GAN, что в сумме составляет 2 генератора и 2 дискриминатора.

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

Что очень удобно при обучении CycleGAN, так это то, что нам не нужно маркировать его обучающие образцы (данные не являются парными).

1. Данные

Одна обучающая выборка CycleGAN состоит из случайного изображения лошади и случайного изображения зебры.

2. Модель

Оба генератора имеют следующую архитектуру (не считая норм и уровней активации):

Генераторы берут в качестве входного изображения размер 256x256, уменьшают их выборку, затем увеличивают их обратно до 256x256, создавая сгенерированное изображение.

Что касается дискриминаторов, то они имеют следующую архитектуру (помимо уровней нормы и активации):

Дискриминаторы принимают на вход изображение размером 256x256 и выводят тензор размером 30x30.

Каждый нейрон (значение) выходного тензора содержит результат классификации для области входного изображения размером 70x70. Обычно дискриминатор GAN выводит одно значение, чтобы указать результат классификации входного изображения. Возвращая тензор размером 30x30, дискриминатор проверяет, выглядит ли каждая область 70x70 - эти области перекрывают друг друга - входного изображения реальной или фальшивой. Это эквивалентно выделению вручную каждой из этих областей размером 70x70 и повторному исследованию дискриминатором. Наконец, результат классификации для всего изображения - это среднее значение результатов классификации для значений 30x30.

3. Обучение

Все генераторы и дискриминаторы оптимизированы с помощью решателя Адама (параметры по умолчанию), все они имеют одинаковую скорость обучения (2e-4), а размер пакета выбран равным 1 (это означает, что нормализация пакета здесь не может использоваться, нормализация экземпляра вместо этого используется).

G {H- ›Z} - это генератор, преобразующий изображения лошадей в изображения зебры, а G {Z-› H} - генератор, преобразующий изображения зебры в изображения лошадей.

Учитывая одну обучающую выборку (h, z), именно так веса CycleGAN обновляются этим образцом.

  • Начиная с h G {H- ›Z} создает fake_z поддельное изображение зебры. Из z G {H- ›Z} генерирует id_z, который должен быть идентичен z.
  • Из z G {Z- › H} создает fake_h поддельное изображение лошади. Из h G {Z- › H} генерирует id_h, который должен быть идентичен h.
  • Из fake_z G {Z- › H} создает rec_h реконструированное изображение h, которое должно быть похоже на h.
  • Из fake_h G {H- ›Z} генерирует rec_z реконструированное изображение z, которое должно быть похоже на z.

Затем веса генераторов обновляются, минимизируя последующие потери. В случае G {H- ›Z} это можно записать как:

  • Среднеквадратичная ошибка (MSE) между D_z (fake_z) и 1. А именно по методу наименьших квадратов в исходной бумаге. D_z - дискриминатор, связанный с G {H- ›Z}, он выводит 1, если вход - fake_z вот - похоже на настоящую зебру еще 0.

  • Средняя абсолютная ошибка (MAE) между rec_h и h. А именно потеря согласованности цикла в исходной бумаге. Этой потере придается большое значение, и она обновляет в 10 раз больше веса генератора, чем потеря MSE.

  • Средняя абсолютная ошибка (MAE) между id_h и h. А именно потеря идентичности в оригинальной бумаге. Нет необходимости включать эту потерю, но обычно она помогает получить лучшие результаты.

После этого веса дискриминаторов обновляются, минимизируя следующие потери. В случае D_z это можно записать как:

  • Половина среднеквадратичной ошибки (MSE) между D_z (fake_z) и 0 плюс половина MSE между D_z (z) и 1.

Потери дискриминаторов уменьшаются вдвое. Это эквивалентно использованию MSE для обновления весов дискриминатора один раз, когда он обновляет веса генератора дважды.

4. Результат

Код для воспроизведения этих результатов доступен в виде записной книжки colab.

Затем CycleGAN обучается на 200 эпох. В течение первых 100 эпох скорость обучения фиксируется на 2e-4, а для последних 100 эпох скорость обучения линейно отжигается от 2e-4 до 2e-6. Некоторые из сгенерированных изображений показаны ниже.

Как правило, есть очень хорошие результаты (слева: исходные изображения, справа: сгенерированные изображения):

Но бывают и случаи сбоя (слева: исходные изображения, справа: сгенерированные изображения):