[GAN] CycleGAN 논문 리뷰

2022.01.30 02:45 4,153 Views

인공지능에서 가장 중요한 것은 바로 데이터입니다. 품질 역시 중요하지만, 많으면 많을수록 좋다는 게 정설인 것 같습니다.

그러나, 데이터는 모아도 모아도 부족하기 마련이고 더구나 사용할 수 있는 데이터가 제한적이라면 더욱 부족하게 됩니다.


오늘은 제한적인 데이터를 획기적인 방법으로 해결한 CycleGAN에 대한 논문을 간단하게 리뷰 해보았습니다.



0. 기존의 GAN


기존의 GAN의 경우, 완벽히 한 쌍을 이루는 데이터만 사용해 학습할 수 있었습니다.

하지만, 완벽히 같은 조건을 지니는 데이터를 구하기는 매우 어렵습니다. 


이러한 점을 해결한 논문이 바로 CycleGAN입니다.


기존의 GAN으로 말 이미지를 얼룩말 이미지로 바꾸기 위해서는 똑같은 배경의 얼룩말 사진을 학습시켜야 한다면,

CycleGAN의 경우 어떤 이미지든 얼룩말이 있는 이미지를 통해 학습시킬 수 있습니다.



1. Abstract

Image-To-Image Translation은 pair 형태의 train 이미지를 활용해 input과 output을 매핑하는 것이 목표인 task입니다. 


하지만, pair 형태의 학습 이미지를 구하는 일은 쉽지 않기 때문에

CycleGAN은 X라는 도메인으로부터 얻은 이미지를 타깃 도메인 Y로 변환하는 방법을 활용하였습니다.


즉, 한 이미지 집합에서 고유한 특징들을 포착하고 이 특징을 다른 이미지 집합으로 전이시키는 것입니다.


이러한 방법을 통해 CycleGAN을 활용하였을 때, 다음과 같은 결과물을 얻을 수 있습니다.



2. Introduction

그렇다면, CycleGAN은 어떻게 특징이 다른 두 도메인 데이터를 온전하게 변환하는 법을 배우는 걸까요?

우선, 이러한 방식으로 변환하기 위해서는 도메인 간에 관계가 존재한다는 가정이 필요합니다. X와 y_hat = G(X)가 대응되어야 한다는 것입니다.


이는 쉽게 해결할 수 있습니다.

특정 이미지 X와 Generator G가 주어졌을 때 Discriminator는 y_hat = G(x)와 Y를 구분하게끔 학습한다면,

적어도 input X에 해당하는 output y_hat이 도메인 Y에 속하는 이미지인 것처럼 학습할 수 있기 때문입니다.


다만, 해당 방식의 translation은 각각의 input x와 y_hat이 의미있는 방식으로 짝지어지는 것을 보장하지 않으며,

종종 mode-collapse (어떤 input 이미지든 모두 같은 output 이미지로 도출되는 것)로 이끌곤 합니다.


이러한 이슈를 해결하기 위해 cycle consistent (주기적 일관성)이라는 속성을 도입하였습니다.

이때, cycle consistent는 영어로 된 문장을 불어로 번역했다면 해당 불어 문장을 다시 영어로 번역 시 본래의 문장이 도출되어야 함을 의미합니다. 


따라서 G와 F를 동시에 학습하고 F(G(X)) ≈ x, F(G(X)) ≈ x이게 만드는 cycle consistency loss를 추가함으로써,

cycle consistency loss와 adversarial loss를 X와 Y에 적용한 전체 목적함수가 완성되었습니다.



3. Formulation


기본적으로 CycleGAN은 2개의 GAN을 필요로 합니다.

X에서 Y의 이미지를 만들어주는 Generator와 이 이미지가 진짜인지 판단하는 Discriminator, 그리고 역방향 학습까지 고려하기 때문입니다.


해당 논문에서 제안하는 파이프라인을 구축하기 위한 Component는 다음과 같습니다.

- Generator G : X → Y mapping

- Generator F : Y → X mapping

- Discriminator Dy : 실제 도메인 Y의 이미지 y와 G가 생성한 y_hat=G(x)을 구분

- Discriminator Dx : 실제 도메인 X의 이미지 x와 F가 생성한 x_hat=F(y)을 구분



4. Adversarial Loss

함수 G : X → Y와 Dy에 대해서는 아래와 같은 목적함수를 적용합니다.



여기서, G는 위의 함수를 최소화 D는 위의 함수를 최대화시키고자 하며 이는 다음과 같이 나타낼 수 있습니다.


139573205-56fba68b-9078-4032-b97d-f75a795e842a.png (248×23)


마찬가지로, 함수 F : Y → X와 Dx에 대해서도 다음과 같이 나타낼 수 있습니다.


139573209-14007f23-3d00-4c46-ab07-3cd10aebda9a.png (254×30)



5. Cycle consistency loss

Unpaired data는 이미지 간의 대응 관계가 너무 많기 때문에 만들어진 이미지가 실제 이미지와 한 쌍이라고 확정지을 수 없습니다.

오히려 mapping의 제약이 적기 때문에 mode-collapse를 초래할 수 있습니다. 이러한 문제를 해결하기 위해 cycle consistency loss를 도입하였습니다.


139570780-54265770-8f1c-44f6-a27e-1c954c3403da.png (825×309)


cycle consistency loss는 각각 생성한 이미지를 다시 원본으로 복구할때 원본과 복구 값 간의 거리를 구하는 것으로,

생성된 이미지가 다시 원본으로 대응될 수 있게끔 학습하면서 다양성을 최대한 제공하도록 합니다.


139570827-262f57a0-6612-4165-a47a-fe942e1ac427.png (429×86)


cycle consistency loss가 유도한 결과는 다음과 같으며, 재건된 이미지 F(G(X))가 input 이미지 x와 유사함을 확인할 수 있습니다.


139570841-f702bc82-9a1f-4060-8d79-5b24c0afb569.png (562×713)



6. Full objective

앞서 설명한 loss를 합치면 전체 목적 함수는 다음과 같습니다.

139570886-e69d9095-98bf-4eb5-9a76-bfcdf846e7b0.png (412×127)


λ는 두 함수(= 위 식에서의 첫 번째 항과 두 번째 항)의 상대적인 중요도에 따라 결정되며, 본 논문의 풀고자 하는 목표는 다음과 같습니다.


139570918-c0c0ee60-99f0-48e2-918b-6848beefebd7.png (437×56)


즉, X → Y GAN의 Adversarial Loss와 Y → X GAN의 Adversarial Loss를 더하고

각각 다시 원본으로 복구하는 cycle consistency loss 값을 더해준 값이 최종 Loss값이며,

이를 최소화하는 방향으로 G와 F를 학습하는 것입니다.



7. Limitations and Discussion

CycleGAN은 획기적인 방식으로 부족한 데이터 문제를 해결했지만, 당연히 한계도 존재합니다.


CycleGAN은 주로 분위기나 색상을 바꾸는 것으로 스타일을 학습하여 다른 이미지를 생성합니다.

따라서, 기하학적인 모양을 변경하는 데는 어려움이 있습니다. 또한, 데이터셋의 분포가 불안정하면 이미지를 제대로 생성할 수 없습니다.


139572645-f0b0c593-e14b-47ef-8fc2-83cad3597ca2.png (1167×530)


다음 그림을 보면, 사과를 오렌지로 바꿀 때 단순히 색상만 변경된 것을 확인할 수 있습니다.

그 뿐만 아니라, 사람을 태운 말을 얼룩말로 바꿀 때 사람까지 얼룩말 무늬로 바뀌었습니다.

이는 학습한 데이터에서 사람이 얼룩말을 탄 이미지가 단 1장이었기 때문입니다.


.

.

.


다음 게시글은 1장의 이미지를 통해 학습할 수 있는 SinGAN 논문 리뷰로 돌아오겠습니다!


논문 원문 : https://arxiv.org/abs/1703.10593v7
Official Code : https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix


  • 아직 배우는 입장으로 부족한 점이 많습니다. 수정해야하거나, 추가해야할 점이 있다면 댓글로 조언 부탁드립니다.
  • 본 게시글은 데이콘 서포터즈 ‘데이크루’ 1기 활동의 일환입니다.