Machine Learning/초단순정리

GAN

WakaraNai 2021. 11. 26. 16:42
728x90
반응형

Generator는 진짜같은 가짜를 생성하고

Discriminator는 진짜와 생성된 가짜를 구분하며

서로 성장하는 구조

 

Generator는 Latent Space로부터 기본 이미지를 가져와 fake image를 생성

 

 

GAN 종류

출처 : https://ysbsb.github.io/gan/2020/06/17/GAN-newbie-guide.html  

 

 

 

0-1. Generative Adversarial Nets (2014)

- Ian Goodfellow가 최초로 제안한 논문

- Generator에 ReLU activation과 Discriminator에 Max activiation을 배치

 

0-2. DCGAN (Deep Convolutional Generative Adversarial Network) (2015)

GAN의 Generator와 Disciminator에

deep convolutional neural network를 사용한 것

 

Generator 모델이 안정적으로 훈련할 수 있도록 함

출처 : https://ysbsb.github.io/gan/2020/06/17/GAN-newbie-guide.html  

 

0-3. InfoGAN (2016)

http://jaejunyoo.blogspot.com/2017/03/infogan-1.html

Generator의 입력 또는 latent space를 구조화하려는 시도

latent space의 변수에 특정 의미를 추가하는 것이 목표

그리하여 latent space의 포인트와 noise를 분리하고자 함

 

z는 기존의 GAN의 input이라면

infoGAN은 (z,c)로 input에 code라는 latent variable c를 추가

여기서 code란, 예로 이미지 속 회전의 의미를 가지는 벡터를 들 수 있음.

 

아래 사진에서 a,c,d는 infoGAN, b는 일반 GAN의 결과

infoGAN은 code에 변화를 주면 결과도 달라짐을 볼 수 있다

a는 0~9까지의 digit type을 나누는 categorical code를 추출

c,d는 글자의 기울기 혹은 회전,너비를 학습한 continuous code 등울 추출

 

 

 

2-1. cGAN (Conditional GAN) (2014)

Generator와 Disciminator에 입력으로 이미지 외의 정보도 사용

예로 클래스 레이블을 사용할 수 있는 경우 입력으로 사용할 수 있다

아래 그림에서 y가 여타의 보조 정보를 의미

입력 레이어를 두 모델에 추가하는 식으로 구현

 

 

2-2. Pair : Pix2Pix (2016)

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

https://velog.io/@changdaeoh/pix2pix-CVPR-2017%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0

https://www.tensorflow.org/tutorials/generative/pix2pix

기존 GAN의 noise 대신에 그림을 Generator에  입력하여 학습시킴.

흑백 사진 채색, 물체 윤곽 그리기 구글 지도를 구글 어스로 변환하는 등의 작업 가능

 

가짜 이미지와 진짜 이미지가 일치할 수록 

  • convolutional PatchGAN classifier 기반 Discriminator
    • 기존의 discriminator와 달리 PatchGAN은 이미지를 잘게 쪼개어 각 patch 별로 진짜 가짜 판별
    • 덕분에 high-level feature를 잘 잡아내고, L1 loss가 만들어낸 blur를 개선
    • 그리고 작은 크기의 이미지에 적용하니 파라미터가 더 적고, 빠르게 모델을 돌릴 수 있으며, 더 큰 사이즈으 ㅣ이미지에 일반화를 적용시킬 수도 있게 된다.
  • U-Net 기반 Generator
    • (가운데에 bottleneck 구조가 있어 low-level feature를 전달하기 좋은 구조)
    • 예로 이미지 채색 문제의 경우 가장자리 정보를 공유하게 됨
    • bottleneck의 단점을 보완하기 위해 skip connection을 추가 (i번째 레이어와 n-i번째 레이어를 이어줌)

 

 

2-3. Unpair : CycleGAN (Cycle-Consistent GAN) (2017)

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

https://ysbsb.github.io/gan/2020/06/17/GAN-newbie-guide.html

https://www.tensorflow.org/tutorials/generative/cyclegan?hl=ko 

 

쌍을 이루는 이미지 데이터 없이 image-to-image trasnlation을 함

Pix2Pix같은 conditional GAN처럼 target 이미지들이 필요하지 않음

실제 이미지들이 짝을 이루어 있지 않기에 도움이 됨

 

source domain X로부터 target domain Y로 맵핑하는

함수 G: X→Y와 이에 대한 inverse mapping 함수 F: Y→X를 학습함

 

cycle consistency loss는

source domain X의 이미지 x가 함수 G를 거쳐 target domain으로 변형되고

이 이미지가 다시 함수 F를 거쳐서 source domain의 이미지 x로 잘 돌아오는지를 반영함.

이의 반대 과정 y의 이미지가 함수 F를 거치고 함수 G를 거치고 나서 다시 y로 잘 돌아오는지도 포함되어 있음.

 

image translate가 주기 일관성이 있어야 함에 주의. 풀이하면 영어를 프랑스어로 번역했다면 프랑스어가 원문인 영어로 돌아가야한다는 의미

그래서 X->Y 변환용, Y->X 변환용 총 2개의 Generator가 필요

X와 X(F(Y)) 구별용, Y와 Y(F(X))를 구별용 총 2개의 Discriminator가 필요

 

결과적으로 CycleGAN은 X domain과 Y domain이 unpaired 되어 있더라도

mapping하는 함수를 학습함으로써 unpaired image translation을 할 수 있음.

 

 

3. Unconditonal GAN

3-1. GAN Loss : Wasserstein GAN (WGAN) (2017)

각 반복에 대한 Generator모델보다 훨씬 더 많은 Discriminator 모델을 업데이트하기 위해

훈련 절차를 변경한 시도 

 

Discriminator는 sigmoid acti를 사용하여 binary 예측 대신 실수 값(linear acti)을 출력하도록 변형됨

그래서 Generator, Discriminator 모두 실제 값과 예측 값의 곱의 평균인

"Wasserstein loss"(Wassestein Distance (EM distance))를 사용하여 훈련됨.

모델 업데이트에 유용한 linear gradient를 형성하기 위해

(기존 GAN에서 두 분포의 확률적 비교를 위해 KL Divergence라는 식을 사용)

 

Discriminator의 함수가 Lipschitz constraint를 만족하게 하여, 결과적으로 gradient가 안정적으로 수렴하게 함

 

 

728x90
반응형

'Machine Learning > 초단순정리' 카테고리의 다른 글

Semantic Segmentation과 Instance Segmentation  (0) 2022.01.20
Attention - Transformer Architecture  (0) 2021.12.22
Latent Space Interpolation  (0) 2021.11.26
Sequence Bias  (0) 2021.11.18
[Python] Sigmoid  (0) 2021.08.13