본 게시글은 Generative Adversarial Networks(GAN)를 공부하며 흥미로웠던 CycleGAN에 대한 포스팅입니다. 해당 논문은 버클리 AI Research (BAIR) lab에서 진행된 연구로, 2017년 ICCV에 accept되었습니다. 해당 논문을 참조하시려면 논문 링크 클릭해주세요.

 

CycleGAN은 training set이 {X,Y} 처럼 paired data가 아닌 unpaired된 data인 경우, source 도메인 X에서 target 도메인 Y로 이미지를 변환하는 image-to-image translation 방식입니다. 아래의 예시는 CycleGAN을 활용했을때의 두가지의 도메인에 대해서 이미지를 translation 하는 예시입니다. 

CycleGAN을 활용한 image-to-image translation 예시

이러한 두가지 도메인에 대해 image-to-image translation을 진행하기 위해서는 training set이 이미지 i에 대해 pair가 되는 X와 Y 도메인 데이터(paired data)가 존재해야 합니다. CycleGAN이전에 연구되었던 Pix2Pix 모델에서는 반드시 두 도메인 양쪽에 대응되는 paried data가 존재해야 했지만 CycleGAN에서는 paired data 없이도 하나의 이미지 도메인을 다른 도메인으로 바꾸는 것이 가능합니다.

paired data, unpaired data 설명

CycleGAN에서는 아래 그림과 같이 2가지 generator인 $G$와 $F$를 사용합니다. generator $G$는 source 도메인 X를 target 도메인 Y로 translate해주며 generator $F$는 $G$와 반대로 Y 도메인을 X 도메인으로 translate 시키는 generator입니다.

 

또한 Disciriminator도 $D_x$, $D_y$로 2가지를 사용합니다. $D_x$ $D_y$는 각각 X 도메인과 Y 도메인으로 생성된 이미지를 판별하는 역할을 수행합니다. $D_x$는 generator $F$가 만들어낸 ${F(y)}$ 이미지와 실제 X 도메인의 이미지 {$x$}를 구별하며 $D_y$는 generator $G$가 만들어낸 Y 도메인의 이미지 ${G(x)}$ 가 실제 Y 도메인의 데이터 {$y$}와 얼마나 다른지를 구별해냅니다.

 

따라서 G를 통해 Y 도메인으로 변환된 X 데이터 ${G(x)}$ 가 있을 때, 이를 다시 generator $F$를 통해 X 도메인으로 보내면 source 도메인인 X로 다시 되돌아와야 한다는 것입니다. 즉, F(G(X)) {x}가 되어야 하며 (forward cycle consistency) G(F(Y))는 ${y}$가 되어야 합니다. (backward cycle consistency) 이러한 특징을 본 논문에서는 cycle consistency 라고 칭하고 있습니다. 

 

따라서 CycleGAN에서는 기존의 Adversarial loss와 cycle consistency loss, 총 2가지의 loss를 사용합니다. CycleGAN에서는 generator와 discriminator를 각각 2개씩 사용하므로 Adversarial loss term인 $L_{GAN}$이 2개로 나누어집니다. 

CycleGAN full objective

Adversarial loss는 기존의 GAN의 loss와 같으므로 $G$는 {$G(x)$}가 Y 도메인의 실제 데이터 {$y$}와 유사하게 만들어내는것을 목표로 합니다. $D_y$는 {$G(x)$}와 {${y}$}를 구별합니다.  $L_{GAN} (F,D_x,Y,X)$ 또한 마찬가지로 $F$는 {$F(y)$}가 실제 X 도메인 데이터 {$x$}와 유사한 이미지를 만드려고하며 $D_x$는 {$F(y)$}와 {${x}$}를 구별합니다.

Adversarial loss

Cycle Consistency loss는 {$x$} 이미지를 $G$에 통과시켜 {$G(x)$}로 만들어 Y도메인의 데이터를 만든 후 이를 다시 $F$에 넣어 다시 X 도메인으로 inverse 과정을 거친 이미지로 만듭니다. 이러한 과정으로 inverse된 $F(G(x))$와 실제 X 도메인의 이미지 {$x$}를 pixel-wise하게 loss를 구성하였습니다. 마찬가지로 {$y$} 이미지를 $F$를 통해 X 도메인에 속하는 {$F(y)$} 이미지로 만든 후 이를 다시 $G$를 통해 Y 도메인으로 inverse 과정을 거칩니다. $G(F(y))$ 이미지와 실제 Y 도메인의 이미지 {$y$}와의 pixel-wise한 차이를 loss에 반영합니다. 이러한 두개의 term을 cycle consistency loss로 정의하고 있으며 해당 loss를 통해 unpaired한 X와 Y 도메인의 쌍을 연결할 수 있게 됩니다.  

Cycle Consistency loss

CycleGAN의 최종 loss는 아래식과 같으며 해당 loss를 통해 generator는 실제 이미지에 가까운 이미지를 만들기 위해 노력하며 discriminator는 generated된 이미지를 실제 이미지와 판별하는것을 목표로 합니다.

아래의 그림은 CycleGAN을 활용하여 실제 풍경데이터 (X 도메인 데이터)와 각 화가의 스타일 (Y 도메인 데이터) 를 활용하여 Image-to-Image translation을 진행한 결과입니다. X 도메인의 데이터가 각 Y 도메인으로 style transfer가 된것을 볼 수 있습니다. 

두번째 예시로 말과 얼룩말, 겨울과 여름 등 서로다른 도메인으로의 Image-to-Image translation 결과입니다.

CycleGAN의 구현 및 자세한 실험 결과는 논문을 참조해주세요. 이상 논문 리뷰를 마치겠습니다.