ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CycleGAN 논문 리뷰(Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks)
    논문 리뷰/Generative Model 2024. 7. 24. 16:22

    CycleGAN 논문 리뷰를 해보고자 한다. 이 논문은 사실 첫 페이지에 있는 그림이 이 논문의 모든 것을 말해주는데, 엄청난 퍼포먼스에 비해 논문 자체는 쉽고 직관적으로 쓰여있어서 어렵지 않게 읽을 수 있다.

    이 논문의 아이디어는 이미지 쌍에 대한 supervised learning의 image-to-image 학습은 많이 발전해왔는데, 이미지 쌍이 없는 unsupervised learning으로의 image-to-image는 어려움을 겪고 있다는 점에서 착안해 Generative model 중 GAN을 이용해 image-to-image 학습을 진행하는 것에서 시작한다. CycleGAN의 특징 inverse mapping을 하나 더 추가하고, cycle consistency loss를 이용한다는 점이며, 다양한 분야(object transfiguration, season transfer, collection style transfer, photo generation from paintings 등)에서 좋은 퍼포먼스를 보인다.

     

    Introduction

    image-to-image translation은 하나의 이미지 $x$를 다른 스타일의 이미지 $y$로 바꾸는 것을 의미하며, 기존의 많은 방법론들은 $(x, y)$ 쌍이 주어진 상태에서 학습을 진행해왔다. 하지만 이러한  $(x, y)$ 쌍의 샘플을 구하는 것은 어렵고 비싼 일이므로, 이 논문에서는  $(x, y)$ 쌍 없이도 학습할 수 있는 방법을 찾기 위해 노력했다. 

     

    이 논문에서 저자들은 input domain $X$과 output domain $Y$ 사이에 어떤 관계가 있다고 가정하고, 이를 학습하기 위해 아래와 같이 mapping $G : X \rightarrow Y$를 정의해 $\hat{y} = G(x)$가 $Y$의 원소와 구분할 수 없도록(indistinguishable) 학습하고자 하였다. 

     

    이론적으로는 $\hat{y}$의 distribution이 $p_Y(y)$와 일치하지만, 학습 후  $(x, y)$ 쌍이 어떤 유의미한 의미를 갖는다고 보장할 수 없다. 왜냐하면 $G$를 정의할 수 있는 무수히 많은 mapping들이 존재하며, 이는 모두 $\hat{y}$와 같은 분포를 이루기 때문이다. 또한 $G$ 단일로 학습하기도 어려우며, 단일로 학습할 경우 mode collapse 같은 많은 문제점들이 일어난다.

     

    이러한 문제를 극복하고자 이 논문에서는 "cycle consistent"라는 개념을 추가한다. 만약 우리가 영어에서 불어로 번역한 뒤 다시 영어로 번역한다면 처음에 번역하고자 했던 말로 돌아와야 할 것이다. 이러한 개념에서 착안하여 만약 $G : X \rightarrow Y$, $F : Y \rightarrow X$를 정의한다면 $G$와 $F$는 서로의 역함수여야 할 것이다. 우리는 이 두 mapping을 동시에 학습시키면서 cycle consistency loss를 추가해 $G(F(y)) = y$, $F(G(x)) = x$이도록 강제하고자 한다. 

     

    * Related work는 생략

     

    Formulation

     

    그림에서 볼 수 있듯 $D_X$와 $D_Y$가 정의되어 있다. 

     

    CycleGAN에서 objective function은 두 개로 나눌 수 있는데, 하나는 adversarial loss이고 하나는 cycle consistency loss이다.

     

    뒤에서 나오겠지만 adversarial loss는 $D_X$에서 하나, $D_Y$에서 하나 해서 총 2개가 나온다.

     

     

    Adversarial Loss

    $L_{GAN}(F, D_X, Y, X)$도 같은 방법으로 정의할 수 있다.

     

     

     

     

     

     

    Cycle Consistency Loss

    Introduction에서 말했듯, 이론적으로는 $G$와 $F$를 이용해 output이 원하는 domain이 되도록 학습이 가능하다. 하지만 이러한 mapping $G$와 $F$는 무수히 많기 때문에 $G$와 $F$가 서로 역함수 관계라는 추가 조건을 넣어줄 것이다.(cycle consistency가 바로 그것!)

    여기서는 forward cycle consistencybackward cycle consistency를 objective로 고려할 예정이다.

     

     

    Full Objective

    따라서 우리의 목적 함수는 위와 같이 정의된다. 

     

    Implementation

     

    학습에 사용된 모델과 기법은 논문에 자세히 기술되어 있다.

     

    Result

    결과는 baseline model에 비해 CycleGAN의 성능이 압도적인데, pix2pix의 경우 paired data로 학습했기 때문에 사실상 CycleGAN이 얻을 수 있는 최대 성능이라고 볼 수 있다.(그러므로 pix2pix랑 CycleGAN의 성능을 비교하면서 읽으면 안된다.) 자세한 결과는 논문에서 확인이 가능하다. 

     

    또한 이 논문에서는 ablation study를 통해  adversarial loss와 cycle consistency loss의 중요성에 대해 알아보았다. 어떤 한 loss없이 학습할 경우 학습이 잘 되지 않는다는 사실을 통해 CycleGAN에서 adversarial loss와 cycle consistency loss 모두 중요함을 보여주었다. 

     

    이 논문은 Object transfiguration, season transfer, collection style transfer, photo generation from paintings, photo enhancement 등에서 좋은 결과를 보여주었다.

     

    특히 photo generation from paintings에서는 추가적인 loss를 사용해 입력과 출력 간의 색 구성(color composition)이 유지되도록 하였다. (이는 Taigman et al의 technique로 입력과 출력이 유사하도록 생성기를 정규화하는 방법을 제안한 연구에서 파생된 아이디어다. 이 방법을 통해 $G$와 $F$가 identity mapping에 가까워지도록 유도한다.)

    만약 $L_{identity}$가 없으면, $G$와 $F$는 색의 변화가 필요하지 않을 때도 입력 이미지의 색조를 자유롭게 변경한다.

     

    Limitations and Discussion

    CycleGAN은 그림의 색이나 텍스쳐를 바꾸는 일에는 능하지만, geometric change는 잘 하지 못한다.예를 들어 강아지를 고양이로 바꾸거나, 사과를 오렌지로 바꾸는 등의 일에서는 실패했다. 또한 학습 데이터 셋의 분포때문에 실패를 겪기도 하는데 말에서 얼룩말로 변환하는 mapping의 경우 사람을 본 적이 없으므로 사람까지 말의 일부로 보고 함께 바꿔버리기도 한다. 

     

    Code

    직관적으로 잘 짠 코드가 깃허브에 있길래 소개한다.

    https://github.com/aitorzip/PyTorch-CycleGAN/blob/master/train

     

    더보기

    코드의 대략적인 구조)

     

    generator : netG_A2B, netG_B2A (optimizer_G)

    Discriminator : net_D_A(optimizer_D_A) / net_D_B(optimizer_D_B)

     

    처음에는 Generator A2B,B2B를 한 번에 학습시킨다. 이때 identity loss를 포함하도록 코드를 작성했다.

    (→ loss_identity_A, loss_identity_B, loss_GAN_A2B, loss_GAN_B2A, loss_cycle_ABA, loss_cycle_BAB)

     

    다음에는 Discriminator A, Discriminator B 순으로 학습시킨다.

     

     

    댓글

Designed by Tistory.