Conditional generative model¶
✅ Conditional Generative Model¶
1️⃣ (Basic) GAN vs Conditional GAN¶
- D: Discriminator
- G: Generator
- 다른 부분은 다 똑같지만 Conditional GAN은 입력에 Conditinal 정보를 넣어주기 위해서 c라는 부분이 존재한다.
2️⃣ 예시: Super resolution¶
- Input: 저해상도 이미지
- Output: Input image에 고해상도 이미지
- Conditional GAN의 대표적인 예시
- 입력은 저해상도 영상이 들어가고 출력은 고해상도 가짜 영상이 나오게 된다.
- Real 데이터로는 고해상도 이미지를 주어서 판별기가 현재 주어진 생성 영상이 실제 고해상도 영상과 비슷한 통계적 특성을 갖는지를 판단하게 된다.
원래 기존에는 Regression model를 활용하여 고해상도를 만들었다.
🔎 이 두가지 차이를 비교해 보자¶
- MAE / MSE는 픽셀 강도 차이를 측정하지만 유사한 패치가 많이 있다.
- MAE / MSE는 안정적인 평균 이미지를 생성합니다.
- 해상도는 높아지는거 같긴 하지만 여전히 만족스러운 sharp한 영상 대신에 blurry한 결과가 나온다. 평균적으로 안정적인 영상을 출력하기 때문이다.
- GAN 손실은 그것이 진짜인지 가짜인지 암시적으로 비교한다.
- 가장 비슷한 real data에 가깝게 되어 결과가 좋게 나온다.
📌 평균을 예측한다는 것의 예시¶
조건
- 과제: 주어진 image에 Coloring
- real image는 2가지 색을 가진다. "black" or "white"
위 그림을 보게 되면,
- L1 loss로 결과를 만들게 되면 결과는 회색이 나오게 된다. 검은색과 흰색의 중간이 평균 loss가 더 낮은 방향 이므로
- 하지만 GAN loss는 흰색 or 검정색을 출력한다. 왜냐하면 discriminator는 real data가 흰색이거나 검은색만 있으므로 회색을 잡아내기 때문이다.
✅ Image translation GANs¶
1️⃣ Pix2Pix¶
📌 Loss function¶
- GAN loss + L1 loss를 합쳐서 사용
- GAN만 사용하면 실제 데이터 인지를 판단하기 때문에 우리가 기대하고 있는 결과인 y와 비슷한 영상이 나와야 하므로 L1 loss도 같이 사용하게 된다.
- L1 loss를 가이드로 제공해서 학습을 안정적으로 하는 효과를 준다.
📌 결과¶
2️⃣ CycleGAN¶
- Pix2Pix에서는 두 도메인 간의 번역을 학습하려면 "쌍 데이터"가 필요했다.
- CycleGAN을 사용하면 쌍이 아닌 데이터 셋이있는 도메인 간 변환이 가능하다.
📌 Loss function¶
- GAN loss: X → Y 스타일로 가는 방향과 Y → X 스타일로 가는 방향을 같이 학습을 진행한다.
- Cycle-consistency loss: 이미지와 만들어진 이미지가 양방향으로 동일해야 한다.
📌 GAN loss¶
- 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¶
- 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 Transform Net: 입력에서 변환 된 이미지 출력
- 이 결과로 나온 값이 $\hat{y}$이다.
- 이 결과로 나온 값이 $\hat{y}$이다.
Loss Network: 생성된 이미지와 대상 이미지 사이의 style and feature loss를 계산한다.
- 일반적으로 ImageNet으로 미리 학습된 VGG Model을 사용
- Transfor Net은 학습 과정에서 수정된다.
📌 Feature reconstruction loss¶
- 변환된 이미지와 Content Target이미지가 loss network에 들어가게 된다.
- L2 Loss를 계산한다.
- 이때 들어가는 Content Target이미지는 일반적으로 원래 입력 이미지가 된다.
- Content가 변한지 않았다는 것을 판단
📌 Style reconstruction loss¶
- Style Target에는 우리가 변환하고 싶은 Style의 이미지를 넣어준다 (ex. 반 고흐의 이미지)
- 위와 같이 2개의 값을 L2 Loss를 계산한다.
✅ Various GAN applicaions¶
'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 |