[Paper Review] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks (CycleGAN)

Date:     Updated:

카테고리:

태그:

Main Reference:
- CycleGAN Paper


🚀 Introduction

Image-to-Image Translation Dataset
1 2

기존 Image-to-Image translation task는 paired supervised learning을 통해 해결되어 왔다. 하지만 문제는 paired dataset을 얻기가 너무 힘들고 비싸다는 것이다. 심지어 불가능한 경우도 존재한다. 본 논문은 paired dataset 없이, 도메인 단위로 학습하고 매핑하는 방식을 제안했다. 이때 일반적인 GAN loss로는 개별적인 input x와, output y가 paired 되는 것이 보장되지 않는다. 뿐만 아니라 GAN의 고질적인 문제인 mode collapse에 빠질 위험도 존재한다. 따라서 이러한 문제들을 해결하기 위해 “cycle consistenct loss” term을 추가하였다.


🚀 Formulation

3

\[\textbf{L}_{GAN} (G, D_{Y}, X, Y) = \mathbb{E}_{y \sim P_{data}(y)}[log D_{Y}(y)] + \mathbb{E}_{x \sim P_{data}(x)}[ log(1 - D_{Y}(G(x)))]\] \[\textbf{L}_{cyc} (G, F) = \mathbb{E}_{x \sim P_{data}(x)}[\left\| F(G(x)) - x \right\|_{1}] + \mathbb{E}_{y \sim P_{data}(y)}[\left\| G(F(y)) - y \right\|_{1}]\] \[\textbf{L}_{total} (G, F, D_{X}, D_{Y}) = \textbf{L}_{GAN} (G, D_{Y}, X, Y) + \textbf{L}_{GAN} (F, D_{X}, Y, X) + \lambda \textbf{L}_{cyc} (G, F)\]

CycleGAN의 목적은 두 도메인 사이의 매핑을 학습하는 것이다. 모델은 두 개의 Generator G,F와 두 개의 Discriminator \(\textbf{D}_{X} , \textbf{D}_{Y}\) 로 구성되어 있고, Objective Function은 adversarial loss + cycle consistency loss로 구성되어 있다.
이론적으로 adverarial training은 수렴성이 증명되어 있다. 하지만 충분히 큰 데이터 분포에 대해서는 특정 set만을 생성하는 mode collapse 문제에 빠질 수 있다. 그러므로 도메인 내에 존재하는 다양한 분포를 표현해주기 위해서는 cycle consistency loss를 추가적으로 학습해야 한다. 이때 cyc loss를 l1말고도 다양하게 시도해봤는데 딱히 성능 차이는 없었다고 한다.


🚀 Implementation

Generator Discriminator
4 5
\[\textbf{train G to minimize} \quad \mathbb{E}_{x \sim P_{data}(x)}[(D(G(X))-1)^{2}]\] \[\textbf{train D to minimize} \quad \mathbb{E}_{y \sim P_{data}(y)}[(D(y) - 1)^{2}] + \mathbb{E}_{x \sim P_{data}(x)}[(D(G(X)))^{2}]\]

Generator는 nueral style transfer에서 인상적인 결과를 보여준 Johnson의 구조를 참고했다(Residual blocks + instance normalization). Discriminator는 PatchGAN 구조를 사용했다. 학습을 안정화하기 위해 다음 두 가지 기법을 사용했다.

  • GAN loss의 기존 방식인 negative log-likelihood loss 대신 least squares loss를 사용했다.
    • log-lekelihood loss를 이용한 GAN의 Generator는 Discriminator를 속이기만 하게끔 학습이 진행되기 때문에 특정 data의 feature를 학습하기 힘들다고 한다.
  • 모델의 학습이 불안정한 이유 중 하나는 Discriminator가 가장 최근 생성된 이미지만을 학습하기 때문이다.
    • 따라서 가장 최근 합성된 1장의 이미지가 아닌 최근 50장의 이미지를 통해 Discriminator를 학습했다.
  • Cycle consistency loss의 가중치 lambda는 여러 테스트 결과 10이 적당하다.


🚀 Results

6

  • Loss 이것저것 빼보며 테스트


7

  • 마지막 photo <-> maps 예제의 경우 하나의 도메인이 다른 도메인보다 훨씬 많은 정보를 포함하고 있다. 그래도 잘 나오더라.


8

  • input과 output의 color composition이 중요한 경우(ex. 밤 낮 바꾸기) Identity loss 추가해주면 도움 됨


9

  • Style Transfer 기깔나게 함..


🚀 Discussion

10

저자들이 말하는 limitation에는 geometric한 변환은 잘 못한다는 점이 있었다. Generator가 input의 구조를 반영해주는 UNet구조도 아닌데 왜 못하는지 잘 모르겠다. 또 한가지 특이한 점은 Generator의 구조이다. 보통 UNet의 경우 input이 쭉 작아졌다가 bottleneck layer를 거친 후 바로 upscaling에 들어간다. 그런데 CycleGAN의 경우 bottleneck 부분 layer가 무려 9개 이다. 이런 구조가 style transfer를 잘 해주나..? 하는 추측. 그리고 bottleneck 부분에 residual block을 사용했는데, 처음에 약간 혼란이 왔었다. Skip connection의 역할은 glbal structure를 반영해주는 것인데, 다 압축하고 나서 하는 skip connection이 무슨 의미가 있나 생각했다. Skip connection의 본래 역할이 gradient가 잘 흐르도록 해준다는 것을 까먹고 있었다.

🚀 Code

CycleGAN from scartch (pytorch)

Input Gogh Monet
temp output output2

왜 내 모델은 안 예쁜 것인가



맨 위로 이동하기

Paper 카테고리 내 다른 글 보러가기

댓글 남기기