Related to: Deep Learning

개요

image-to-image Translation은 보통 pair-image를 이용해 학습합니다.

다만, 같은 이미지에 대해 2개의 특성을 갖는 이미지 쌍은 구하기 쉽지 않습니다.

Cycle-GAN은 이런 pair-image를 사용하지 않고 단지 X 도메인 데이터세트와 Y 도메인 데이터세트만을 이용해 두 도메인 간에 이미지를 변환하는 법을 학습합니다.

CycleGAN이란?

Untitled 9.png

CycleGAN은 Jun-Yan Zhu 등에 의해 개발된 이미지-이미지 변환을 위한 비감독 기계 학습 접근 방식입니다.

CycleGAN은 쌍을 이루는 예제가 필요 없이 이미지를 한 도메인에서 다른 도메인으로 변환할 수 있습니다.

모델은 소스 도메인에서 대상 도메인으로 이미지를 변환하는 것을 배울 수 있으며, 대상 도메인은 관련 이미지 컬렉션이나 완전히 새로운 도메인 모두 사용할 수 있습니다.

Cycle GAN의 특징 및 구조

Untitled 1 7.png

Untitled 2 4.png

CycleGAN은 기존의 Generator G 외에 Generator F를 추가한 순환구조를 사용하여 Mode collapse를 방지합니다.

  • 순환구조이므로 두 개의 Generator, 두 개의 Discriminator가 존재
  • 종래의 GAN 모델과 다른 점은 Paired Training Data를 사용하지 않고 학습
  • Mode collapse : input의 특징을 다 잊어버리고 똑같은 출력을 생성하는 경우

input image에서 output image로 맵핑하는 동작 과정을 forward consistency라고 하고, 반대의 과정을 backward consistency라고 합니다.

Generator G와 F를 거쳐서 한 바퀴 돌아오면 다시 자기 자신으로 돌아와야 하기 때문에 순환 일관성(Cycle Consistency) 이라고 했고, Input image와 Generator G, F 한 바퀴를 돌아 생성된 Output image 간의 차이를 cycle consistency loss라고 칭했습니다.

Cycle GAN의 Loss

종래의 GAN을 토대로 Loss함수를 작성한다면 아래와 같은 식이 됩니다.

모델의 네트워크 용량이 크다면, 우리가 원하는 시각적 결과를 얻었건 얻지 않았건 상관 없이, Dy 혹은 Dx의 결과 값이 우리가 원하는 확률 분포를 출력하도록 모델이 학습될 수 있습니다.

그러므로 단순 adversarial loss만으로는 x→y로의 translation을 보장 할 수 없습니다.

여기서 Circle Constant(순환 일관성)이라는 개념이 등장합니다. 만약 G와 F가 잘 동작한다면, X→Y로의 전환해서 나온 값 y’을 다시 Y→로의 전환을 했을 때 얻은 x’은 유사해야 합니다.

마찬가지로 y의 경우도 아래와 같습니다.

이를 Forward cycle consistency라고 저자는 표현합니다.

모델이 이 결과를 낼 수 있도록 저자는 Cycle consistency loss를 사용합니다.

L1 Norm을 사용하는 이유는 F와 G의 adversarial loss를 사용했을 때, 성능 향상이 없었기 때문입니다.

최종목적함수는 아래와 같습니다.

Lambda는 앞의 두 Loss와 Lcycle간의 중요도를 조절한다.

Untitled 3 3.png

이 방법은 다른 Loss들과 비교 했을 때, 좋은 성능을 보여주었습니다.

한계

Untitled 4 2.png

  • 이미지의 모양을 바꾸진 못합니다. CycleGAN은 주로 분위기나 색상을 바꾸는 것으로 스타일을 학습하여 다른 이미지를 생성합니다. 그러다보니 피사체의 모양 자체는 바꿀 수가 없었습니다.

    • EX) 사과를 오렌지로 바꾸는 작업
  • 데이터셋의 분포가 불안정하면 이미지를 제대로 생성할 수 없게 됩니다.

    • EX) 사람을 태운 말을 얼룩말로 바꿀 때 사람까지 얼룩말이 되는 것은 데이터셋에 사람이 말을 탄 데이터가 없기 때문

참조

https://arxiv.org/abs/1703.10593

https://velog.io/@sjinu/CycleGAN

https://wikidocs.net/146366