CycleGAN Introduction: Image Synthesis Project Using CycleGAN (1)

2 months ago   •   13 min read

By mAsh

0. Introduction

CycleGAN은 Image-to-Image translation을 Unpaired Image Dataset만 이용하여 학습하기 위한 방법으로, 저자는 기존의 GAN (Generative Adversarial Network) 모델에 cycle-consistency라는 개념을 도입하여 이 목적을 달성하는 방법을 제시하고 있습니다.

해당 방법을 이용하면 이미지 합성 등과 관련된 여러가지 재미있는 프로젝트를 해 볼 수 있습니다. 가령, 사진에 찍혀있는 동물의 외형을 다른 비슷한 동물로 바꾸는 방법을 학습할 수 있습니다. 예를 들자면, CycleGAN을 이용하면 일반적인 ‘말’을 ‘얼룩말’로 바꾼다던가, 일반적인 ‘곰’을 ‘판다’로 바꾸는 등의 일을 할 수 있는 뉴럴네트워크 모델을 학습시킬 수 있습니다. 부수적인 결과물로는 그 반대 방향의 변환마저도 가능해집니다.

CycleGAN sample image

물론 CycleGAN 이전에도 이와 같은 일들을 할 수 있는 모델이 없던 것은 아닙니다. 하지만 CycleGAN의 가장 중요한 특징은 단순히 이런 일들을 할 수 있다는 것이 아니라, ‘Unpaired Image Set’, 즉 ‘서로 짝지어지지 않은’ 이미지셋만으로도 학습할 수 있다는 점입니다. 이 특징 덕분에, CycleGAN 이외의 다른 image to image translation 테크닉들을 이용할 때 꽤나 골치아픈 문제인, 서로 다른 두 도메인에서 짝을 이루는 이미지셋을 매우 많이 준비해야 하는 상황을 피할 수 있습니다.

이번과 다음 포스트에서 저희는 CycleGAN을 이용한 간단한 image to image translation 프로젝트를 진행해보려 합니다. 하지만 프로젝트를 소개해드리기 전에, 이번 글에서는 CycleGAN에 대한 이론적인 내용을 간략하게 살펴보기로 하겠습니다.


1. A concept of the CycleGAN

CycleGAN은 2017년도 ICCV에 발표된 논문으로, 논문의 정식 제목은 “Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks” 입니다. 논문의 제목에서 보실 수 있듯, CycleGAN은 GAN의 여러가지 변형 중 하나입니다. 지금이야 GAN에 대한 관심이 예전만큼은 아니지만, 저 당시에만 해도 GAN은 많은 연구원들의 대세 중 대세였습니다. 미술관에 GAN 딥러닝이라는 책이 나올 정도로요.

뒷 광고 아닙니다 (출처: 교보문고 책 소개 페이지)

GAN이라는 점 이외에도, 논문 제목에서 보이는 CycleGAN의 큰 특징은 unpaired image set을 데이터셋으로 이용한다는 점입니다. 이 unpaired image set을 이용한다는 특징은 생각보다 굉장히 중요한 점으로, 프로젝트의 난이도를 확 낮출 수 있는 매우 편리한 특성입니다.

예를 들어보겠습니다. 저는 일반적인 사진을 웹툰 형식으로 바꿔주는 image to image translation 프로젝트를 진행하고 싶습니다. 이를 하기 위한 모델로는 여러가지 방법이 있겠지만, 가장 쉽게 떠올릴 수 있는 방법은 autoencoder 형식으로 만드는 것이겠죠. 일단 어찌어찌해서 autoencoder를 짰다고 칩시다. loss는 l2 loss를 준비했습니다. 이젠 학습만 시키면 끝입니다.

그러나 여기에서 문제가 발생합니다. 데이터셋이 없어요. 하지만 저는 열정적으로 이 프로젝트에 임하고 있던 터라, 크롤링이든 뭐든 해보려고 시도를 합니다. 하지만 아무리 찾아봐도, 해당 웹툰의 장면과 그걸 그릴 때 참고한 장면의 image pair은 기껏 해 봐야 배경으로 쓴 장면이나, 주변 인물들의 사진 몇 장 밖에 없습니다. 남은 건 직접 그리는 수 밖에 없는데, 간단한 프로젝트를 가지고 직접 웹툰 작가한테 의뢰할 수도 없고, 설령 의뢰한다고 해도 최소 수 백장으로 예상되는 이미지들을 작가님께서 그리기는 불가능에 가깝습니다. 결국 프로젝트는 데이터셋 문제 때문에 불가능하게 됩니다.

이런 식으로, Image-to-Image 문제에서 paired dataset이 있는 것은 꽤나 사치라고 생각할 수도 있습니다. 특히 저희가 Image-to-Image 기술을 이용한 프로젝트를 한다고 생각하면 십중팔구는 일반 사진에서 웹툰으로 변환하는 것과 같은 ‘신기한’ image domain으로 옮기는 일들을 할텐데, 이럴 때 paired image set을 얻기란 굉장히 힘들 겁니다.

이러한 문제를 해결하기 위해 CycleGAN은 Cycle Consistency라는 개념을 두고, 이것을 유지하는 방향으로 생성 모델을 학습시킵니다. A라는 domain에서 뽑은 이미지 I_A를 B라는 domain의 이미지 I_AB로 변환하는 생성 모델 G_A2B를 만든다고 할 때, Discriminator D_B를 사용하는 Adversarial Loss를 사용하여 해당 I_AB가 B domain의 특성을 가지고 있도록 할 수 있습니다.

다만 이 Adversarial Loss만 가지고는 G_A2B를 통해 만들어진 이미지 I_AB가 I_A를 B domain으로 변환시킨 것인지 확실하게 보장할 수 없습니다. D_B는 input image I_AB가 B domain으로 분류될 수 있는지만 체크하고, 이미지 I_A의 paired set인지는 전혀 체크하지 않기 때문입니다. 최악의 경우, Generator G_A2B는 I_A가 어떻게 주어지든 간에 B domain의 학습 이미지 중 랜덤한 무언가, 혹은 그 중 제일 쉬운 이미지 하나만을 계속 output으로 생성하는, 완전히 쓸모없는 모델이 되어버릴 수 있습니다.

따라서 우리는 ‘이 I_AB가 I_A의 paired set이다’라는 조건을 어떻게든 모델에 반영해야 합니다. 여기서 ‘paired set’이라는 조건은 엄밀히 정의된 점이 없기 때문에, 프로젝트에 따라 여러가지 조건을 생각해 볼 수 있습니다. 가령 페이스 페인팅을 해주는 모델이 있다고 했을 때, 해당 환경에서도 잘 동작하는 face recognition model이 존재한다면 두 모델이 같은 id로 매칭되어야 한다는 점을 paired set의 조건으로 생각해 볼 수도 있겠죠.

다만 이런 방법들은 general한 방법론이 될 수 없습니다. 따라서 CycleGAN에서는 cycle-consistency를 paired set의 조건으로 정의합니다. 만약 이 I_AB가 I_A와 paired set이라면, I_AB를 다시 A domain으로 넘긴 I_ABA는 I_A와 동일해야한다는 조건입니다. 즉 paired dataset이 존재했다면 B domain의 이미지에서의 I_B와 Generative Model로 만든 I_AB 간의 차이를 줄이기 위한 Loss를 사용하겠지만, I_B 데이터셋의 부재로 인해 I_AB를 다시 A domain으로 넘긴 I_ABA와 I_A를 비교하는 Loss를 사용하게 됩니다.

사실 위의 내용으로 CycleGAN의 핵심적인 내용은 전부 살펴보았습니다. 남은 건 실제로 이 내용을 어떤 수식으로 구현하였는가 정도라서, 아래에서 잠시 살펴보도록 하겠습니다.

2. Loss functions of the CycleGAN

CycleGAN에는 Adversarial Loss, Cycle Consistency Loss, Identity Mapping Loss 총 3가지의 Loss Function이 존재합니다. 이들을 간단하게 알아보겠습니다.

Adversarial Loss

CycleGAN에서 GAN을 담당하고 있는 Adversarial Loss입니다. X domain에서 Y domain으로 mapping 하는 mapping function G: XY와 discriminator D_Y에 대하여, CycleGAN의 objective function은 아래와 같습니다.

Adversarial Loss

보시다시피 특별할 것 없는, 일반적인 GAN에서 사용하는 adversarial loss입니다. G는 생성된 이미지 G(x)를 최대한 domain Y의 이미지들과 가깝게 만들고, D_Y는 G(x)와 실제 Y domain의 샘플 y를 최대한 잘 구별할 수 있도록 하는 역할을 맡습니다. 따라서 아래와 같이 minmax 형태와 같은 최적화 문제가 됩니다. 또한 G와 마찬가지로, Y domain에서 X domain으로 향하는 mapping function F: YX도 같은 방식으로 objective function을 만듭니다.

Cycle Consistency Loss

Cycle Consistency Loss는 CycleGAN의 핵심 아이디어입니다. 앞서 설명드렸듯이, mapping function이 input image에 대해 무분별한 생성 결과를 만들어내는 현상을 막기 위해 cycle-consistency라는 특성을 제시합니다. 이는 XYX로 이어지는 image translation cycle을 거쳤을 때, 처음 이미지와 복원된 이미지가 최대한 동일해야 한다는 조건으로, 아래와 같이 L1 loss를 사용하여 구현되었습니다.

Cycle Consistency Loss

덧붙여 논문에서는 L1 loss 대신 F(G(x))와 x간의 adversarial loss를 이용하는 방식으로도 시도해보았지만 큰 성과가 없었다고 합니다.

Adversarial Loss와 Cycle Consistency Loss를 합치면 최종 Loss가 됩니다. 따라서 최종적인 CycleGAN의 objective function은 아래와 같습니다.

Full Objective

논문에서는 이 최종적인 모델이, F(G(x))와 x를 같게 하는 autoencoder와, G(F(y))와 y를 같게 하는 autoencoder, 즉 두 개의 autoencoder를 학습시키는 것으로도 보여질 수 있다고 말하고 있습니다. 또한 다른 관점으로는 bottleneck layer에 adversarial loss를 사용하는 adversarial autoencoder의 일부로도 해석할 수 있다고도 말하고 있습니다.

Identity Mapping Loss

Identity Mapping Loss는 CycleGAN의 Loss 부분에서는 등장하지 않고, 논문의 실험 부분의 photo generation from painting 항목에서 처음 등장합니다. 해당 실험은 클로드 모네의 그림을 사진풍으로 바꿔주는 Style Transfer 모델인데, 해당 Task에서 input와 output 이미지의 색 구성을 맞춰주기 위해 아래와 같은 identity loss를 추가적으로 제시합니다.

Identity Mapping Loss

Identity Mapping Loss는 target domain에서 샘플링한 이미지를 generator에 넣었을 때 그 output이 해당 샘플과 동일하게 나와야 한다는 constraint을 추가적으로 주고 있습니다.

Results of the Identity Loss

논문에는 별다른 해석이 없지만, 제 개인적인 생각으로는 source domain에서 target domain으로 이미지 변환이 일어날 때, target domain을 넘어가는 불필요한 추가 변형이 일어나지 않도록 하는 역할을 해 주는 것으로 해석됩니다.

3. Further Approaches

DiscoGAN

DiscoGAN은 SKTBrain에서 CycleGAN과 비슷한 시기에 작성한 논문으로, 핵심적인 내용은 CycleGAN과 거의 동일하게 Cycle Consistency를 이용하는 방법으로 unpaired imageset을 학습시키는 것을 말하고 있습니다. 다만 CycleGAN과의 가장 큰 차이점으로는, CycleGAN은 reconstruction loss를 하나만 이용하는데 비해 DiscoGAN은 두 domain에 대해 각각 하나씩 총 두 개 사용한다는 차이점이 있다고 합니다.

출처 (https://neptune.ai/blog/6-gan-architectures)

StarGAN

CycleGAN은 두 domain 사이의 translation만 고려했기 때문에, 만약 여러 domain 사이의 translation을 시도하려면 필요한 모델의 수가 기하급수적으로 늘어나게 된다는 큰 문제가 있습니다. StarGAN은 이러한 문제를 해결하기 위해, 단 하나의 model로 다수의 domain 간의 image translation을

CycleGAN Project

CycleGAN의 Project Page (Link: https://junyanz.github.io/CycleGAN/)에서는 CycleGAN을 이용한 여러가지 프로젝트를 소개하고 있습니다. 관심이 있으시다면 한 번 들어가서 구경하시는 것도 좋을 것 같습니다.

4. Conclusion

이번 글에서는 CycleGAN 논문에 대해서 간략하게 알아보았습니다. 2017년에 나온 비교적 오래된 논문이지만, unpaired image set이라는 명확한 문제점을 크게 어려운 이론 없이 아이디어만으로 해결했다는 점에서 꽤나 감명깊게 읽었던 논문입니다.

사실 이번 글은 논문 리뷰가 최종적인 목적이 아니었기 때문에, 실험 내용등과 같은 핵심적인 이야기들을 어느 정도 생략하고 넘어갔습니다. 혹시 CycleGAN에 대해 더 알고 싶으신 분들이 있다면, 논문의 공동 저자이신 박태성 님의 강연을 들어보시면 좋을 것 같습니다.

CycleGAN의 공동 저자이신 박태성 님의 강연 (Naver D2)

이상으로 이번 포스팅을 마치겠습니다. 다음 기회에는, 실제로 CycleGAN을 이용하여 mask 합성을 하는 과정과, 그 과정에서 생긴 여러 문제들, 그리고 그 해결법들에 대해 살펴보겠습니다.

Spread the word

Keep reading