카테고리 없음

[ CycleGAN ] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

강담비 2020. 3. 8. 02:47
반응형

안녕하세요.

 

오늘 리뷰해 볼 논문은 CycleGAN입니다.

 

CycleGAN result

 

 

1. Introduction

 

우리가 모네의 그림들과 풍경사진들에 익숙하다면 한 풍경사진을 보고 이 풍경을 모네가 그렸다면 어떤 그림이 나올지 상상이 됩니다. 굳이 풍경사진과 모네의 그림의 수많은 대응 쌍을 보지 않아도 가능한 일입니다. 

 

 

이 논문에서는 각 집합(모네 그림들, 풍경사진들)에 대응하는 이미지 쌍 없이 한 이미지(한 풍경사진)가 다른 이미지 집합(모네의 그림들)에서 어떻게 표현되는지 찾아주는 method를 소개합니다.

 

 

즉 upaired image to image translation method인 Cycle GAN을 소개합니다.

 

example of paired dataset and unpaired dataset

 

 

이미지 translation을 할 때 가장 큰 어려움이 paired data를 얻기가 어렵고 얻는 과정에서 비용이 많이 든다는 점입니다.

예를 들오 sementic segmentation labe 같은 경우만 보아도 dataset을 만드는데 시간과 노력이 많이 듭니다.

뿐만 아니라 아예 만들 수 없는 데이터셋 또한 존재합니다.

 

위 사진을 보면 아시겠지만 특정 사진에 대응하는 실제 모네의 그림, 무늬 빼고 똑같이 생긴 말과 얼룩말이 같은 장소에서 같은 포즈를 취하고 있는 사진 쌍둥이 그 예입니다.

 

이렇듯 unpaired data로 image to image translation이 가능하다는 것은 매우 의미 있는 일입니다.

 

-

 

이 논문에서는 X도메인에서 Y도메인으로 바꿔주는 translator G : X -> Y를 GAN으로 만들어 줍니다.

 

GAN을 잘 모르신다면 이전 포스트를 참고해 주세요.

 

그럼 pair dataset 필요 없이 x를 넣었을 때 Y도메인의 원소 같은 이미지를 생성할 수 있게 됩니다.

(x, y는 각각 X, Y도메인의 원소)

 

하지만 X분포와 Y분포에 대응하는 관계가 매우 많기 때문에 G(x) = y'가 x와 pair임을 보장할 수 없습니다. 

(즉 한 풍경사진을 넣었을 때 그 사진과 관련 없는 모네 그림이 나올 수 있다는 뜻입니다.)

 

이 점을 개선시키기 위해 "cycle consistent"라는 개념을 이용해 G(x)를 x의 pair와 근사 시켜 줍니다.

 

cycle consistent의 예로 우리가 영어문장 x를 프랑스어로 번역했을 때 그 프랑스어를 다시 영어로 번역한다면 x가 나오는 것을 들 수 있습니다.

 

 

cycle consistent를 위해 G와 반대 방향으로 도메인을 바꿔주는 translator F : Y -> X를 정의해 줍니다.

 

그리고 F(G(x)) ≈ x와 G(F(y)) ≈ y를 만족하는 방향으로 학습을 시켜준다면 G(x) = y'는 x와 pair가 되는 y와 F(y) = x'는 y와 pair가 되는 x와 근사하게 됩니다. 

 

CycleGAN structure

 

이 과정에서 GAN 2개가 Cycle 구조로 사용되기 때문에 CycleGAN입니다.

 

 

 

2. Formula

 

1. Adversarial loss

 

adversarial loss formula

(G : X->Y translator, Dy : y discriminator)

 

GAN에 사용되는 adversarial loss입니다.

 

간단한 설명을 드리자면 y~p_data(y)는 Y의 data분포를 따르는 원소 y를 말하고

Dy는 Y의 데이터 분포에서 왔는지(Y도메인인지) 아닌지 판단하는 discriminator로 0~1 사이의 확률 값을 반환합니다.

Y분포에서 왔다고 판단하면 1에 가까운 값을 아니면 0에 가까운 값이 나옵니다.

이것들의 평균이 loss로 사용하게 됩니다.

 

Dy가 잘 판단한다면 두 항이 0에 가까워져 GAN loss는 0에 가까워지게 될 것입니다.

반대로 잘못 판단하면 음수 값이 나오게 됩니다.

 

 

 

2. Cycle Consisitency loss

 

cycle consistency loss formula

(G : X->Y translator, F : Y-> X translator)

 

위에서 설명했던 G(x)를 x pair로 근사 시킬 수 있게 도와주는 loss입니다.

 

cycle consistency 

L1 loss를 사용해 F(G(x)), G(F(y))를 각 x, y에 가깝게 만들어 Cycle consistent 하게 만들어 줍니다.

 

 

3. Full Objective

 

 

CycleGAN loss

CycleGAN의 최종 loss로 람다 값은 hyperparameter입니다.

 

loss가 정해졌으니 이제는 loss를 작게 하는 G, F를 찾고 반대로 loss를 크게 하는 Dx, Dy를 찾아내는 문제로 바뀌게 됩니다.

 

 

 

3. Implementation

 

- Network Architecture

 

cyclegan의 generative network는 128x128 이하 이미지에는 6 resblock을 기반으로 했고

256x256 이미지 혹은 그 이상의 크기 이미지는 9 resblock을 사용했습니다.

 

또 instance normalization이 사용되었습니다.

 

discriminator에서는 70x70 patchGAN을 사용했습니다.

 

 

 

4. Results

 

labels에서 photos로의 mapping

result

 

photos에서 maps로의 mapping

result2

photo에서 화가 그림 스타일로의 mapping

result3

 얼룩말에서 말로 말에서 얼룩말로의 mapping

 

result4

 

 

 

이렇듯 image to image translation에서 다른 모델보다 좋은 결과를 내는 것을 볼 수 있습니다.

 

 

 

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

 

논문 저자분들이 pytorch 코드를 github에 올려놓았으니 참고하시면 좋을 것 같습니다.

 

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix

 

 

감사합니다.