Image-to-Image Translation : pix2pix & CycleGAN

tobigs16gm·2021년 11월 9일
0
post-thumbnail
post-custom-banner

본 게시글에 첨부한 이미지는 논문에서 발췌하였거나, 출처를 표기하였습니다.

0. Image-to-Image Translation

Image-to-Image Translation

  • 이미지를 입력으로 받아 또다른 이미지로 변환하는 과정을 Translation이라고 합니다.
  • Image-to-Image Translation은 Input 이미지와 Output 이미지 간 Mapping을 목표로 하는 생성모델의 한 분야입니다.
    (이미지 간 도메인 변화를 다루는 분야)

Examples

1. pix2pix

논문 : https://arxiv.org/pdf/1611.07004.pdf

Introduction

Image Prediction 문제는 주로 Convolutional Neural Nets (이하 'CNN')를 활용하여 처리되어 왔습니다.

CNN에서는 minimize하고자 하는 Loss function을 직접 정의해주어야 합니다. 그런데, 최적의 Loss function을 정의하기 어려울 수 있고, naive하게 정의한다면 blurring 등의 문제가 발생할 수 있습니다.

  • ex) predicted pixels(예측값)와 ground truth pixels(Target, 실제값) 간 Euclidean distance를 최소화하는 방식으로 Loss function을 정의하는 경우

이러한 문제점을 해결한 모델이 바로 Generative Adversarial Networks (이하 'GAN')입니다. GAN의 생성자는 판별자가 생성 이미지와 실제 이미지를 잘 구분하지 못하는 방향으로, 판별자는 생성 이미지와 실제 이미지를 제대로 구분하는 방향으로 경쟁적으로 학습됩니다.
GAN에서 blurry한 image는 가짜로 판별되며, 데이터에 적합하게 Loss가 학습되기 때문에 여러 종류의 task에 적용할 수 있습니다.

본 논문에서는 Image-to-Image Translation에 적합한 conditional GANs (이하 'cGAN')을 이용하여 광범위한 task에서 좋은 결과를 낼 수 있는 프레임워크인 pix2pix를 소개합니다.

Method

Objective

Notation

  • GG : Generator
  • DD : Discriminator
  • xx : observed image (input image)
  • zz : random noise vector
  • yy : output image

cGAN의 Objective(이하 'Loss function')는 아래 식으로 표현됩니다.
cGAN의 목표는 아래의 adversarial loss를 최소화하는 것이며, 이때 GG는 minimize하는 방향, DD는 maximize하는 방향입니다.

  • LcGAN(G,D)=Ex,y[logD(x,y)]+Ex,z[log(1D(x,G(x,z)))]\mathcal{L}_{cGAN}(G, D) = \mathbb{E}_{x, y} [ \log D(x,y)] + \mathbb{E}_{x, z}[ \log(1- D(x, G(x,z)))]

  • G=argminDmaxDLcGAN(G,D)G^* = \arg \min_D \max_D \mathcal{L}_{cGAN}(G, D)

이때, 위의 loss만을 단일하게 사용하는 것보다는, L1 Distance나 L2 Distance와 같은 traditional loss를 Loss function에 추가함으로써 덜 blurry한 이미지를 생성할 수 있습니다.
L2 Distance보다는 L1 Distance(Manhattan Distance)를 추가했을 때 생성된 이미지의 품질이 더 좋다고 검증되어, 최종 Loss function은 아래와 같이 정의합니다.

  • L1 Distance : LL1(G)=Ex,y,z[yG(x,z)1]\mathcal{L}_{L1}(G)=\mathbb{E}_{x,y,z}[||y-G(x,z)||_1]
  • Final Loss function : G=argminDmaxDLcGAN(G,D)+λLL1(G)G^* = \arg \min_D \max_D \mathcal{L}_{cGAN}(G, D) + \lambda \mathcal{L}_{L1}(G)
    (이때, λ\lambda는 hyper parameter로, 이 λ\lambda를 조정함으로써 최적의 Loss function을 찾아나가게 됩니다.)

pix2pix의 Noise
Random noise vector zz가 없는 경우에도 생성모델은 xx에서 yy로의 mapping을 학습할 수 있지만, 이 경우 출력이 deterministic하다는 문제점이 있습니다. (하나의 입력에 대해서 하나의 출력이 존재)
이러한 문제를 해결하고자 과거 GAN은 zzxx와 함께 입력했습니다.
그런데 본 논문의 실험에서는 입력된 noise가 무시되면서 학습되는 현상이 일어났고, 이를 효과적으로 해결할 strategy 또한 찾을 수 없었다고 합니다.
그래서 pix2pix는 오직 dropout의 형태로 noise를 주었고, 이 방식을 학습 시점과 테스트 시점에 모두 채택했습니다.

Network architectures - (1) Generator

Generator로는 Encoder-Decoder에 skip connections가 추가된 U-Net을 사용합니다.

기존 Encoder-decoder는 input이 일련의 layer들을 통과하면서 점차 downsampling 되고, bottleneck layer를 기준으로 다시 반대 과정을 거치는 구조입니다.
Layer들을 통과하면서 입력된 이미지의 핵심적인 feature들은 추출되지만, low-level(detail)에 관해서는 정보 손실이 발생할 수 있습니다.

따라서, U-Net은 skip connections를 추가하여 detail이 전달될 수 있도록 했습니다.

아래는 Cityscape generation에 대하여 Encoder-decoder와 U-Net을 비교한 결과입니다.
L1 loss만을 이용한 경우(왼쪽)와 L1 loss와 cGAN loss를 섞은 loss를 이용한 경우(오른쪽) 모두 U-Net이 더욱 realistic한 이미지를 생성해내고 있습니다.

Network architectures - (2) Discriminator

Discriminator로는 PatchGAN을 사용합니다.

위 Figure는 서로 다른 loss로 학습된 결과입니다.
L1 loss를 이용하는 경우, blurry하기는 하지만 low-frequency 성분들을 비교적 잘 검출해냅니다.

따라서, low-frequency 성분 검출을 위해 L1 loss는 그대로 두고, Discriminator는 high-frequency structure만을 이용해 모델링합니다.
이때 high-frequency 성분 검출은 전체 이미지가 아닌 local image patch를 이용해도 충분하다고 합니다.

PatchGAN Discriminator

  • 이미지를 NNXNN으로 조각내어 각 patch별 response 값(real인지 fake인지에 대한 확률값)을 평균하여 최종 결과값 DD를 산출합니다.
  • 적은 수의 Parameter로 빠르게 훌륭한 결과를 낼 수 있습니다. 또 임의의 큰 사이즈의 이미지에도 적용할 수 있습니다.

    이미지 출처 : Patch-Based Image Inpainting with Generative Adversarial Networks

Experiments

cGAN의 generality를 테스트하기 위해, 본 논문에서는 다양한 task와 데이터셋에 cGAN을 적용한 실험들을 소개하고 있습니다.







대체로 좋은 성능을 보이고 있으나, 맨 하단(failure cases)과 같이 input image가 sparse하거나 unusual한 경우에는 이상하거나 blurry한 이미지가 생성되기도 했습니다.

2. CycleGAN

논문 : https://arxiv.org/pdf/1703.10593.pdf

Introduction

위에서 소개한 pix2pix 모델의 경우, image pairs로 학습이 진행되었습니다. 하지만 일반적으로 paired training data(=Supervised setting) 구하기 어렵고 비용도 많이 듭니다.

Paired data vs Unpaired data
Paired data(왼쪽)는 xix_iyiy_i 간 대응 관계가 존재하는 반면,
Unpaired data(오른쪽)는 어떤 xix_i가 어느 yjy_j와 대응되는지에 대한 정보가 없습니다.

따라서, 본 논문에서는 paired input-output이 없어도 translation을 수행할 수 있는 알고리즘을 찾고자 합니다.
즉, 서로 다른 domain XX(source domain)와 YY(target domain)의 image set이 주어졌을 때, XX에서 YY로의 mapping인 GG를 학습하는 방법을 다룹니다.

  • GG : XXYY

Formulation


CycleGAN은 두 개의 mapping(GAN)으로 이루어져 있습니다.

  • GG : XXYY & Discriminator DYD_Y
  • FF : YYXX & Discriminator DXD_X

DYD_Yyy와 translated image G(x)G(x)를 판별하고, DXD_Xxx와 translated image F(y)F(y)를 판별합니다.

Adversarial Loss

두 개의 mapping에 모두 adversarial loss를 적용합니다.
GG : XXYY & Discriminator DYD_Y에 대한 loss는 아래와 같습니다.

  • LGAN(G,DY,X,Y)=Ey pdata(y)[logDY(y)]+Ex pdata(x)[log(1DY(G(x)))]L_{GAN}(G, D_Y, X, Y) = \mathbb{E}_{y~p_{data}(y)}[\log D_Y(y)] + \mathbb{E}_{x~p_{data}(x)}[\log (1-D_Y(G(x)))]
  • GG는 위의 loss를 minimize, DD는 maximize하고자 합니다. → minGmaxDYLGAN(G,DY,X,Y)\min_G \max_{D_Y}L_{GAN}(G, D_Y, X, Y)

GG : XXYY & Discriminator DYD_Y에 대한 loss(LGAN(F,DX,Y,X)L_{GAN}(F, D_X, Y, X))도 같은 방식으로 정의됩니다.

왜 Least Squares Loss를 쓸까?

Cycle Consistency Loss

Adversarial loss만을 이용하는 경우, Mode collapse 문제(input에 관계없이 동일한 output으로 mapping, 최적화 실패)가 발생할 수 있습니다.
따라서 위의 loss에 cycle consistency loss를 추가함으로써 loss function을 보완할 수 있습니다.

Possible mapping function의 space를 줄이기 위해, 위의 (b), (c)와 같이 mapping function은 cycle-consistent해야 합니다.

  • (b) : forward cycle consistencyxG(x)F(G(x))xx \rightarrow G(x) \rightarrow F(G(x)) \approx x

  • (c) : backward cycle consistencyyF(y)G(F(y))yy \rightarrow F(y) \rightarrow G(F(y)) \approx y

  • Lcyc(G,F)=Ex pdata(x)[F(G(X))x1]+Ey pdata(y)[G(F(y))y1]L_{cyc}(G, F) = \mathbb{E}_{x~p_{data}(x)}[||F(G(X)) - x||_1] + \mathbb{E}_{y~p_{data}(y)}[||G(F(y)) - y||_1]

아래에서 cycle consistency loss를 도입했을 경우 재건된 이미지 F(G(x))F(G(x))가 입력 이미지 xx와 비교적 유사함을 확인할 수 있습니다.
(참고로, 예비 실험에서 L1 loss를 도입해본 결과, 성능 향상은 관찰되지 않았다고 합니다.)

Full Objective

완성된 Loss function은 아래와 같습니다.

  • Final Loss function : L(G,F,DX,DY)=LGAN(G,DY,X,Y)+LGAN(F,DX,Y,X)+λLcyc(G,F)L(G, F, D_X, D_Y) = L_{GAN}(G, D_Y, X, Y) + L_{GAN}(F, D_X, Y, X) + \lambda L_{cyc}(G, F)

이때 λ\lambda는 첫 번째 term(LGAN(G,DY,X,Y)L_{GAN}(G, D_Y, X, Y))과 두 번째 term(LGAN(F,DX,Y,X)L_{GAN}(F, D_X, Y, X))의 상대적 중요도(relative importance)에 따라 결정됩니다.

우리의 목표는 argminG,FmaxDX,DYL(G,F,DX,DY)\arg \min_{G, F} \max_{D_X, D_Y}L(G, F, D_X, D_Y)를 최적화하는 GG^*DD^*를 구하는 것입니다.

Results

이제는 위에서 정의한 full objective를 adversarial loss만 사용할 때, cycle consistency loss만 사용할 때와 비교합니다.
그리고 경험적으로 두 objective 모두 중요한 역할을 하고 있다는 것을 밝힙니다.

  • Evaluation Metrics : AMT perceptual studies, FCNscore, Semantic segmentation metrics
  • Ablation Study : Loss function을 다양하게 바꾸어가며 실험 진행

Limitations and Discussion

CycleGAN은 다양한 task에서 우수한 성능을 낼 수 있지만, 아래(failure cases)와 같은 한계가 존재합니다.

  • Gemetric changes : Little successes... 😥
    예를 들어, 사과를 오렌지로, 개를 고양이로 translate하는 task에서 미미한 변화만 있었을 뿐 모양을 변화시키지는 못했습니다.
  • 학습 데이터셋의 분포 문제 : 예를 들어, 말에 탄 사람을 얼룩말에 탄 사람으로 translate하는 task에서 사람에게까지 얼룩이 생성된 것은 학습 데이터셋에 '말에 탄 사람' 이미지가 없었기 때문입니다.

Reference

투빅스 13기 & 14기 생성모델 세미나 - Image to Image Translation (pix2pix, CycleGAN)


pix2pix
[논문] https://arxiv.org/pdf/1611.07004.pdf
[pix2pix 논문리뷰] https://sensibilityit.tistory.com/515
[pix2pix 논문리뷰] http://www.navisphere.net/5932/image-to-image-translation-with-conditional-adversarial-networks/
[U-Net 논문리뷰] https://medium.com/@msmapark2/u-net-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-u-net-convolutional-networks-for-biomedical-image-segmentation-456d6901b28a
[patchGAN 관련] https://brstar96.github.io/mldlstudy/what-is-patchgan-D/


CycleGAN
[논문] https://arxiv.org/pdf/1703.10593.pdf
Finding connections among images using CycleGAN
[CycleGAN 논문리뷰] https://comlini8-8.tistory.com/9
[Least Squares Loss 관련] https://www.coursera.org/lecture/apply-generative-adversarial-networks-gans/cyclegan-least-squares-loss-aEI89

profile
Tobigs 15&16th, Generative Model
post-custom-banner

1개의 댓글

comment-user-thumbnail
2021년 11월 15일

강의 잘 들었습니다 !

pix2pix

  • pix2pix은 CGAN 기반 Image Translation 모델입니다.
  • Generator로 U-Net구조를 차용하고 있으며, 핵심적으로 Skip Connection이 디테일한 정보들을 전달하는 통로 역할을 합니다.
  • 마찬가지로 핵심 정보도 인코더-디코더 구조를 통해 전달됩니다.
  • Discriminator로 PatchGAN을 사용하는데, 이는 High-frequency 성분들의 검출을 위해 사용한 구조입니다.

CycleGAN

  • 기존의 style transfer를 위해서는 원본 이미지와 변경된 이미지로 구성된 pair data가 필요했습니다.
  • 이는 상당히 구축하기 어려운 데이터기 때문에, Pair 데이터를 사용하지 않고 단순히 도메인만 다른 두 개의 데이터로 학습하는 CycleGAN이 제안됐습니다.
  • 기존의 Adversarial Loss와 별개로 cycle consistency loss와 역방향 매핑 loss(G,D)를 추가함으로써 의미 있는 style 관계를 학습하게 됩니다.
  • 학습이 잘 된다면 정방향 -> 역방향 매핑을 진행했을 때 원본 이미지를 효과적으로 복원할 수 있게 됩니다.
답글 달기