Conditional generative model

Conditional generative model


✅ Conditional Generative Model

1️⃣ (Basic) GAN vs Conditional GAN

image.png

  • D: Discriminator
  • G: Generator
  • 다른 부분은 다 똑같지만 Conditional GAN은 입력에 Conditinal 정보를 넣어주기 위해서 c라는 부분이 존재한다.


2️⃣ 예시: Super resolution

image.png

  • Input: 저해상도 이미지
  • Output: Input image에 고해상도 이미지
  • Conditional GAN의 대표적인 예시


image.png

  • 입력은 저해상도 영상이 들어가고 출력은 고해상도 가짜 영상이 나오게 된다.
  • Real 데이터로는 고해상도 이미지를 주어서 판별기가 현재 주어진 생성 영상이 실제 고해상도 영상과 비슷한 통계적 특성을 갖는지를 판단하게 된다.



image.png

원래 기존에는 Regression model를 활용하여 고해상도를 만들었다.

🔎 이 두가지 차이를 비교해 보자

image.png

  • MAE / MSE는 픽셀 강도 차이를 측정하지만 유사한 패치가 많이 있다.
    • MAE / MSE는 안정적인 평균 이미지를 생성합니다.
    • 해상도는 높아지는거 같긴 하지만 여전히 만족스러운 sharp한 영상 대신에 blurry한 결과가 나온다. 평균적으로 안정적인 영상을 출력하기 때문이다.
  • GAN 손실은 그것이 진짜인지 가짜인지 암시적으로 비교한다.
    • 가장 비슷한 real data에 가깝게 되어 결과가 좋게 나온다.


📌 평균을 예측한다는 것의 예시

조건

  • 과제: 주어진 image에 Coloring
  • real image는 2가지 색을 가진다. "black" or "white"

image.png

위 그림을 보게 되면,

  • L1 loss로 결과를 만들게 되면 결과는 회색이 나오게 된다. 검은색과 흰색의 중간이 평균 loss가 더 낮은 방향 이므로
  • 하지만 GAN loss는 흰색 or 검정색을 출력한다. 왜냐하면 discriminator는 real data가 흰색이거나 검은색만 있으므로 회색을 잡아내기 때문이다.



✅ Image translation GANs

1️⃣ Pix2Pix

📌 Loss function

image.png

  • GAN loss + L1 loss를 합쳐서 사용
  • GAN만 사용하면 실제 데이터 인지를 판단하기 때문에 우리가 기대하고 있는 결과인 y와 비슷한 영상이 나와야 하므로 L1 loss도 같이 사용하게 된다.
  • L1 loss를 가이드로 제공해서 학습을 안정적으로 하는 효과를 준다.

📌 결과

image.png



2️⃣ CycleGAN

image.png

  • Pix2Pix에서는 두 도메인 간의 번역을 학습하려면 "쌍 데이터"가 필요했다.
  • CycleGAN을 사용하면 쌍이 아닌 데이터 셋이있는 도메인 간 변환이 가능하다.


📌 Loss function

image.png

  • GAN loss: X → Y 스타일로 가는 방향과 Y → X 스타일로 가는 방향을 같이 학습을 진행한다.
  • Cycle-consistency loss: 이미지와 만들어진 이미지가 양방향으로 동일해야 한다.


📌 GAN loss

image.png

  • GAN loss는 Translation을 하게 된다.
  • CycleGAN은 두가지 GAN loss를 가진다. (X → Y, Y → X)
  • GAN loss: $L(D_{X})+L(D_{Y})+L(G)+L(F)$
  • G,F: generator
  • $D_{X},D_{Y}:$ disciminator

❗ 문제점

  • 하지만 이렇게 GANloss만 사용하게 되면 입력에 관계없이 생성기는 항상 동일한 것을 출력 할 수 있다.(Mode Collapse)
  • 입력 내용이 출력에 제대로 반영되지 않는다.


📌 Cycle-consistency loss

image.png

  • X의 이미지를 Y로 변환하고 출력 이미지를 다시 X로 변환
    • 복구 된 이미지는 원본 이미지와 동일해야 한다.
  • 이렇게하면 이미지의 내용을 보존하게 된다.
  • No superviseon(self-supervision)



3️⃣ Perceptual loss

GAN loss

  • 훈련 및 코딩이 상대적으로 어렵다 (Generator & Discriminator가 적대적으로 개선됨)
  • pre-trained network가 필요하지 않다.
  • pre-trained network가 필요하지 않으므로 다양한 application에 적용가능

Perceptual loss

  • 학습 및 코딩이 간단하다 (단순한 순방향 및 역방향 계산으로 학습 됨).
  • 학습된 loss을 측정하기 위해 pre-trained network 필요


image.png

  • Image Transform Net: 입력에서 변환 된 이미지 출력

    • 이 결과로 나온 값이 $\hat{y}$이다.

  • Loss Network: 생성된 이미지와 대상 이미지 사이의 style and feature loss를 계산한다.

    • 일반적으로 ImageNet으로 미리 학습된 VGG Model을 사용
    • Transfor Net은 학습 과정에서 수정된다.


📌 Feature reconstruction loss

image.png

  • 변환된 이미지와 Content Target이미지가 loss network에 들어가게 된다.
  • L2 Loss를 계산한다.
  • 이때 들어가는 Content Target이미지는 일반적으로 원래 입력 이미지가 된다.
  • Content가 변한지 않았다는 것을 판단


📌 Style reconstruction loss

image.png

  • Style Target에는 우리가 변환하고 싶은 Style의 이미지를 넣어준다 (ex. 반 고흐의 이미지)
  • 위와 같이 2개의 값을 L2 Loss를 계산한다.



✅ Various GAN applicaions

- Deepfake

- Face de-identification

- Video translation(manipulation)

'AI > 이론' 카테고리의 다른 글

Multi-modal tasks II (Visual data & Audio)  (0) 2021.03.12
Multi-modal tasks I (Visual data & Text)  (0) 2021.03.12
Panoptic segmentation  (0) 2021.03.11
Instance segmentation  (0) 2021.03.11
torch.autograd  (0) 2021.03.10
Object Detection  (0) 2021.03.10
Semantic segmentation  (0) 2021.03.09
Image classification II  (0) 2021.03.09

+ Recent posts