iMTE

CycleGAN 본문

Deep learning/GAN

CycleGAN

Wonju Seo 2018. 7. 19. 17:12

CycleGAN

Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." arXiv preprint (2017).

위의 그림에서 보는 것과 같이, cycleGAN은 서로 다른 domain의 이미지를 translate하는 'Image-to-Image translation' GAN이다. GAN이라는 단어가 사용되었기 때문에 당연히, Discriminator와 Generator는 서로 'Adversarial learning'을 시행한다. 

CycleGAN에서 주목해야할 점은 두가지로 보이는데 첫번째, loss에 cycle-consistency loss를 추가해서 X, Y와 같은 서로 다른 domain 사이의 image를 translation의 image quality를 상승시켰다는 점, 두번째, pix2pix와 달리 unpaired training set을 요구해서 domain X set과 domain Y set이 있다면, clycleGAN은 이 둘 사이의 domain translation을 학습하게 된다.

G : X->Y를 학습해서 Y의 분포와 구분할 수 없는 fake image를 생성해내는 것이 cycleGAN이다. 이전에 'image-to-image translation'은 1. Grayscale to color, 2. Image to semantic label, 3. Edge-map to photograph와 같은 모델들이 제시되었다.

논문에서는 기존의 image-to-image translation의 문제점을 지목하는데, 

1. mode collapse 으로 인한 문제.

2. x->y를 mapping하는 법이 무한한 솔루션이 존재할 수 있음.

이 문제를 해결하기 위해서 cycleGAN은 영어가 프랑스어로, 이 프랑스어가 다시 영어로 재번역이 되어도 그 차이가 없어야하는 것처럼 image들도 domain을 바꾸고 다시 original domain으로 돌아가면 image에 차이가 없어야한다. 이 점을 반영하기 위해서 이 논문에서는 'cycle-consistency loss'를 사용했다. 즉, 다음을 만족해야한다.

위의 사진 처럼, input이 다른 domain으로 translation된 이후 다시 원래 이미지로 복원이 될 수 있어야한다. CycleGAN은 두 형태로 loss함수를 구성하는데, adversarial loss와 cycle-consistency loss이다.

1. Adversarial loss

다시 한번더 주목할 점은 cycleGAN은 두개의 generator와 두개의 discriminator를 포함한다. 즉 domain의 수만큼 generator와 discriminator의 수가 결정된다. Generator G는 x를 받아서 허구의 y를 만들고 Discriminator D_Y는 fake와 real을 분류하면서 학습을 진행한다. Generator F는 y를 받아서 허구의 x를 만들고 Discriminator D_x는 fake와 real을 분류하면서 학습을 진행한다.

2. Cycle-consistency loss

reconstruction error를 L1 norm으로 계산한 expectation을 cycle-consistency loss로 정했다. 만약에 reconstruction이 잘된다면 loss 함수는 줄어들 것이다.

최종 loss function은 다음과 같이 계산된다.

학습은 alternative하게 진행이 되는데, 살짝 adversarial loss를 수정을해서, negative log likelihood대신에 least-square loss(MSE)를 계산하도록 했다. (이 논문은 더 stable하고 high quality를 얻을 수 있었다고 한다.)

Keras로 code를 구현하고, Monet2Photo image로 cycleGAN의 결과를 확인해보았다.


학습이 진행될 수록 더 잘 변환하고 복원하는 것을 확인할 수 있다.


'Deep learning > GAN' 카테고리의 다른 글

Pix2Pix  (0) 2018.07.21
DiscoGAN  (0) 2018.07.20
Super-resolution GAN (SRGAN)  (0) 2018.07.19
Conditional GAN  (0) 2018.06.15
교재 : Learning Geneartive Adverarial Networks  (0) 2018.02.10
Comments