[논문리뷰] Cycle GAN: Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

temp·2021년 10월 30일
1

Generative Model

목록 보기
17/30
post-thumbnail

Paper: https://arxiv.org/abs/1703.10593


Abstract


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

다만, 같은 이미지에 대해 2개의 특성을 갖는 이미지 쌍은 구하기 쉽지 않습니다. 가령, 사계절 내내 고정되어 있는 CCTV가 아닌 이상 같은 구도의 여름-겨울의 pair image는 많이 구할 수가 없겠죠.

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

Introduction


이렇듯, 다이렉트한 방식으로 translation task를 수행하기 위해 저자들은 아래와 같은 Loss를 사용합니다.

  1. 정방향 & 역방향 Loss(XYX\rightarrow Y and YXY\rightarrow X)
  2. 주기 일관성 Loss(Cycle consistency loss - XF(G(x))X\approx F(G(x))).

즉, 도메인 XX를 도메인 YY로 변환하는 함수 GG 외에도 도메인 YY를 도메인 XX로 변환하는 역방향 함수 FF도 학습하며, 두 과정을 거쳤을 때 원본 이미지가 다시 복원될 수 있도록 cycle consistency loss를 사사용해 학습합니다.


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

우선, 저자들은 학습을 위해서 도메인 간 근본적인 관계가 존재한다 고 가정합니다.
즉, input xxoutput y^=G(x)\hat{y}=G(x)가 의미 있는 방식으로 짝지어져야 합니다.

이를 위해 우선 가장 간단한 방법을 생각해봅시다.

  • 특정 이미지 xXx\in X와 Generator(여기서 Translator) GG가 주어졌을 때, Discriminator는 y^=G(x)\hat{y}=G(x)yYy\in Y를 구분하게끔 학습한다.

위처럼 학습하면 적어도 input xx에 해당하는 output y^\hat{y}가 도메인 YY에 속하는 이미지인 것처럼 학습할 수 있습니다.

다만, xxy^\hat{y}가 의미 있는 방식으로 짝지어지지 않을 수도 있습니다. G:XYG : X \rightarrow Y 입장에서는 단지 y^\hat{y}YY에 속하게끔 이미지를 변환하면 되기 때문에 mode collapse가 일어날 수 있습니다.

이런 문제를 해결하기 위해 저자들은 주기적 일관성(cycle consistent)을 도입했습니다.

예를 들어, 여름 이미지 xx를 겨울 이미지 y^\hat{y}로 변환했다면, 겨울 이미지 y^\hat{y}를 다시 역변환할 경우 여름 이미지 xx가 되게끔 학습합니다.

즉, 아래와 같이 세 부분으로 나누어 학습을 바라볼 수 있습니다.

  1. G:xyG : x\rightarrow y 의 적대적 학습(Adversarial loss)
  • 일반 GAN과 동일.
  1. F:yxF : y\rightarrow x 의 적대적 학습(Adversarial loss)
  • 역방향 학습도 추가
  1. xF(G(x))x\approx F(G(x)) 의 주기적 일관성 학습(Cycle consistence loss)

mapping function 2개(G,FG,F), Discriminator 2개(DX,DYD_X, D_Y))

Possible mapping functionspace를 줄이기 위해서 cycle-consistency loss를 사용했다고 말 할 수도 있습니다.

더욱 자세히 살펴봅시다.

Method


Adversarial Loss

  1. G:xyG:x\rightarrow y에 대한 Loss 함수
  1. F:yxF:y\rightarrow x에 대한 Loss 함수도 위와 똑같은 식을 이용하게 됩니다.
    단, GGFF로, DYD_YDXD_X로 대치됩니다.
  • minFmaxDXLGAN(F,DX,X,Y)min_F max_{D_X} \mathcal{L}_{GAN}(F, D_X , X, Y)

즉, 두 개를 합하면 아래와 같습니다.

  • minGmaxDYLGAN(G,DY,X,Y)min_G max_{D_Y} \mathcal{L}_{GAN}(G, D_Y , X, Y)
  • minFmaxDXLGAN(F,DX,X,Y)min_F max_{D_X} \mathcal{L}_{GAN}(F, D_X , X, Y)

정방향, 역방향 모두 일반적인 GAN Loss를 적용합니다


Consitency loss

각각의 Translator G,FG,F에 대해 원본을 복원하는 능력을 향상시키는 cycle consistency loss는 아래와 같이 쓸 수 있습니다.

output을 다시 input으로 대응될 수 있게끔 학습하면서 다양성을 최대한 제공해주게 됩니다.

학습이 잘 된다면 아래와 같이 FFG(x)G(x)를 원본 이미지 xx에 최대한 가깝게끔 변환하게 됩니다.

Full Objective Function

위의 Adversarial Loss와 Cycle consistency loss를 합치면 아래와 같습니다.

이 때 consistency loss앞에 붙는 가중치 λ\lambda는 GAN Losses와의 상대적 중요도에 따라 결정됩니다.

Implementation


A. Architecture

CycleGAN은 연구 Perceptual losses
for real-time style transfer and super-resolution
의 아키텍처를 기반으로 합니다.

  • 2 convolution, 6 residual blocks, 2 transpose convolution...

참고 : https://towardsdatascience.com/cyclegan-learning-to-translate-images-without-paired-training-data-5b4e93862c8d

Training Details

저자들은 모델 학습을 안정화시키기 위해 아래와 같은 테크닉을 추가로 적용합니다.

  1. LGAN\mathcal{L}_{GAN}nll lossleast-squared loss로 변경.
  2. 생성된 이미지 중 가장 최근의 50개를 따로 저장해 Discriminator가 이를 한꺼번에 분류(모델 진동 최소화).

모델 진동을 줄이기 위해 최근 생성 이미지를 한 꺼번에 분류하는 건 직관적으로 와닿을 것입니다.

분류기에 왜 Least-sqaure loss를 사용할까요?

한 마디로 Generator의 업데이트를 위해서입니다.

이에 대한 내용은 LSGAN을 참고하면 됩니다.
여기서는 간단히만 살펴보겠습니다.

(원래 Discriminator는 이보다 더 고차원이지만) 간략히 2차원을 표방하면 결정경계를 위와 같이 나타낼 수 있습니다.

  • 윗 쪽이 가짜 영역, 아래 쪽이 진짜 영역입니다

이 때, 아래에 보면 진짜 데이터 샘플과 거리가 먼 가짜 데이터 샘플이 존재합니다.

즉, Generator의 입장에서는 이미 Discriminator를 잘 속이고 있기 때문에 학습할 필요가 없습니다.

NLL Loss를 사용한다면요.

즉, Vanishing Gradient가 일어나기 때문에, Discriminator를 잘 속인다는 이유만으로, 안 좋은 샘플을 생성하는 것에 대해 패널티를 줄 수가 없게 됩니다.

이 때, LS GAN을 사용한다면 실제 데이터 분포와 가짜 데이터 샘플이 거리가 먼 것에 대해서도 패널티를 주게 됩니다.

Generator는 Discriminator를 속이는 것을 넘어서, 실제 데이터 분포와 유사한 분포를 가지게끔 해야합니다.

LSGAN paper 중
Specifically, minimizing the objective function of regular GAN
suffers from vanishing gradients, which makes it hard to update the generator.
LSGANs can relieve this problem because LSGANs penalize samples based on
their distances to the decision boundary, which generates more gradients to update the generator.


Result

Evaluation

Evaluation Metrics

모델 성능의 평가를 위해 저자들은 아래와 같이 세 개의 지표를 사용합니다.

  1. human study(정성적)
  2. FCN Score(정량적)
  3. 사진을 라벨링하는 성능을 평가하기 위해 per-pixel accuracy, IoU사용.

Scores

Image quality

Application

여기서 뒤에 있는 값 LidentityL_{identity}는, cycleGAN을 하는 과정에서 해가 뜨는 것을 해가 저무는 것을 구분하기 위한 loss입니다.

즉 인풋과 아웃풋의 색구성을 보존하기 위해 추가한 loss입니다.

Limitations and Discussion

당연히 한계도 있습니다.

  • 얼룩말을 탄 사람 이미지는 없기 때문에 성능이 좋지 않음.
  • 모양은 바꿀 수 없음.

Ref
https://velog.io/@yoonj98/CycleGAN
https://velog.io/@tobigs16gm/Image-Translation-pix2pix-CycleGAN
http://jaejunyoo.blogspot.com/2017/03/lsgan-1.html
LSGAN PAPER

0개의 댓글