[모두팝] 생성모델부터 Diffusion 1회 내용 정리

2023. 10. 5. 14:32💗 AI/💡 Theory

https://www.youtube.com/watch?v=vZdEGcLU_8U&t=122s 

1주차_gan.pdf
8.54MB

오늘 강의 하나로 GANs은 모두 마스터 불가능 합니다

이런 연구들이 있었구나. 저런 문제를 해결했구나 

이런 자세로 들으면 된다

 

 

💡  Unconditional GAN

GAN이란 이미지를 생성하는 모델

training data의 distribution을 만들어내려고 함

<Discriminator training>

- real 샘플을 사용할 경우, 판별하는 Discriminator을 input으로 넣으면 , output(회색박스) 안의 logit값들이 모두 1이 되도록 loss를 지정 (L2, L1, 사용 가능 / cross entropy를 사용하는 이유는 틀린 샘플에 대해서 패널티를 강하게 걸음)

- fake 샘플(genearator가 가우시안 노이즈로부터 샘플링 한 것, latent z)을 input으로 받아서 이미지를 만들고, 그 이미지를 discriminator에 input으로 넣었을때, 그 아웃풋이 0이 되도록 discriminator의 loss를 지정

 

<Generator training>

- real과 fake를 분류하는 discrimiator를 이기기 위해서 학습 진행 / 본인이 생성한 이미지를 그 이미지를 discriminator에 넣었을 때 아웃풋으로 나온 logit이 모두 1이 되도록 loss를 걸어줌

 

- 요즘은 이런 loss를 사용함

- 일반적인 GAN loss에 위의 Regularization을 더해줌 (R1 gradient penalty)

-  Discriminator에 들어오는 input값들의 변화량을 작게 해주는 방향으로

 

💡  Conditional GAN

내가 원하는 이미지를 생성하기 위해서  additional information이 들어감

 

강아지긴 강아지인데 real인지 fake인지 구분
숫자에서 이미지 생성하고 좋아한던 시기

💡  HighResolution 시작

- 기존에는 256x256 이미지를 생성하겠다고 지정해놓고 시작

- 이 논문의 경우는 4x4 넣으면 8x8 이미지를 생성 .. 이런식으로 1024x1024 생성

- 현재는 안쓰이는 연구

- Conditional batch normalization : 기존에는 클래스를 concat했다면 batch normalization에 condition정보를 넣어줌

- Large scale : 채널, 배치 사이즈 늘려보자

- Truncation trick : 학습이 다 되고 나서 inference 시 트릭을 써서 샘플의 퀄리티를 향상시켜보자 (gaussian distribution에서 양 끝의 확률이 낮은 부분들을 잘라보자)

- 기존의 latent space z(가우시안 분포에서 샘플링한거)를 FC태워서 벡터로 만들자 (z->w)

- 데이터는 (a)형태로 분포되어있는데 그거를 가우시안 분포에 억지로 끼워넣으니까 학습이 잘 안되는 거 같다 ->(c)로 만듦

- 우리가 이제 mapping layers를 통해 w를 만들고, 이제 generator에 넣으면 condition에 잘 맞게 생성함

💡  Limited data, Application

데이터 개수가 적을 때 어떻게 할 것인지

- progressive training의 문제점

     : 고개를 돌리면서 치아도 돌아가야하는데 치아는 고정되어있음

- AdaIN의 문제점

     : 이미지 생성된 애들에 이상한 점? 영역들이 보임

기존 (a)

(b) 처음 constant input에 대해서 이걸 삭제함

(c) B모듈(noise sum) 위치를 normalization 후로 바꿈, std만 사용해도 충분히 성능이 좋음

(d) feature map이 아니라 weight에 대해서 demodulation operation을 수행

regularization을 좀 느슨하게 함 (매 iteration이 아니라 step별로)

- 적은 데이터에 대해서 어떻게 할 것인가

- Discriminator랑 Generator에 대해서 둘 다 augmentation을 하는게 좋음

- real 이미지만 augmentation을 하면 D는 augment image에 대해서 real이라고 판단

그럼 G는 augment 이미지가 real이라고 판단하게끔 augment된 이미지들을 생성하게 됨

- D만 augment 걸면 G가 augment되지 않은 이미지들은 판단을 잘 못하게 됨

- D의 오버피팅을 방지

-DiffAug 와 달리 매번 하지 않고 r의 값에 의해서 augmentation을 할지 말지 선택

💡  Limited data, Application

다 필요없고 Diffusion이 미래다

(다음 회차에)

 

 

💡