2014년 발표된 GAN(Generative Adversarial Network)는 획기적인 연구로 최근까지 파생 연구가 굉장히 많다. 따라서 GAN관련 연구 흐름의 아웃 라인을 파악하고 싶은 사람이나 각각의 연구관련 논문과 코드로 한 번에 이동하고 싶은 사람을 위해 이러한 포스팅을 작성했다. 주로 참고하여 작성한 포스트는 링크를 확인해달라.
0. GAN 가족의 소개
▶ GAN (Generative Adversarial Network)
▶ CGAN (Conditional Generative Adversarial Network)
▶ DCGAN (Deep Convolutional Generative Adversarial Network)
▶ CoGAN (Coupled Generative Adversarial Networks)
▶ Pix2pix
▶ WGAN (Wasserstein Generative Adversarial Network)
▶ CycleGAN
▶ StackGAN (Stack Generative Adversarial Network)
▶ ProGAN (Progressive Growing of Generative Adversarial Network)
▶ SAGAN (Self-Attention Generative Adversarial Network)
▶ BigGAN (Big Generative Adversarial Network)
▶ StyleGAN (Style-based Generative Adversarial Network)
이제 부터 각각의 연구에 대해서 연구 논문, 코드, 포인트, 추천하는 참고문헌을 소개한다.
1. 본격적인 GAN 가족에 대한 소개
1) GAN (Generative Adversarial Network)
▶ 논문
▶ 코드
▶ 포인트:
▷ 2개의 뉴럴 네트워크 (Generator과 Discriminator)을 이용하였다.
▷ Generator은 '진짜같은' 이미지를 생성한다. (최초의 이미지는 랜덤 노이즈로 작성)
▷ Discriminator은 Generator에 의해 생성된 가짜 이미지와 입력된 실제의 이미지를 식별한다.
▷Generator과 Discriminator은 아래의 목적 함수를 공유하고 있으며, Generator은 그 값을 최소화, Discriminator은 그 값을 최대화하는 것을 목표로 학습을 진행한다.
▶ 참고문헌
2) CGAN (Conditional Generative Adversarial Network)
▶ 논문
▶ 코드
▶ 포인트: 클래스 조건 벡터(아래 그림의 y)를 Generator과 Discriminator에 더하는 것으로 클래스 각각 생성하는 이미지를 나누어 쓸 수 있게 되었다.
▶ 참고문헌
3) DCGAN (Deep Convolutional Generative Adversarial Network)
▶ 논문
▶ 코드
▶ 포인트: 이하의 방법을 사용하여 이미지의 퀄리티를 향상시켰다.
▷ Pooling층을, 스트라이드가 있는 Convolution층으로 교체하였다.
▷ Upsampling에서는 역Convolution층을 사용하였다.
▷ FCN을 없앴다.
▷ 모든 층에 대해 배치 정규화를 실시했다. (Generator의 출력층과 Discriminator의 입력층 이외의 층)
▷ Generator에 있어서, 출력층이외에 ReLu를 사용하였다. (출력층에는 tanh을 사용하였다.)
▷ Discriminator에는 LeakyReLU를 사용하였다.
▶ 참고문헌
4) CoGAN(Coupled Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: 2개의 GAN을 병렬로 하여 사용하였다. (최근에는 그렇게 뜨겁지 않은듯 하다)
▶ 참고문헌
5) Pix2pix
▶ 논문
▶ 코드
▶ 포인트: 이미지로부터 이지로의 변환을 고정밀하게 할 수 있게 되었다.
▷ 원본의 이미지와 변환할 이미지가 쌍으로 되어 있을 필요가 있다.
▶ 참고문헌
6) WGAN (Wasserstein Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: 아래의 방법으로 안정적으로 학습하고, 모드 붕괴를 피하였다.
▷ 보통의 GAN에 이용된 Jensen-Shannon발산 ( 기울기 손실 문제를 일으키는 ) 것 대신에, Wasserstein거리를 이용하여 손실함수로 설계하였다.
▶ 참고문헌
7) CycleGAN (Cycle Generative Adversarial Network)
▶ 논문
▶ 코드
▶ 포인트: 짝으로 되어있지 않은 2개의 이미지가 훈련데이터로써 전달될 때, 한쪽의 이미지가 다른 한쪽으로 변환이 가능하게 되었다.
▷ '적대성 손실' (보통의 GAN에 사용하지 않는 손실 함수)에 플러스하여 ''
▷ 5번의 pix2pix과 '이미지→이미지변환' 이라는 점이 비슷하지만, CycleGAN는 Pix2Pix와 다른 점은 훈련 데이터의 이미지군집을 쌍으로 할 필요가 없다는 것이다.
▷ 텍스쳐나 색의 변환에 강하지만, 구조적인 변환(예를 들면 개 → 고양이)는 어렵다.
이런 느낌의 이미지이다.
8) StackGAN(Stack Generative Adversarial Networks)
▶ 논문
▶ 포인트: 텍스쳐 표현에만을 이용하여 고해상도의 이미지을 생성할 수 있게 되었다.
▶ 참고문헌
논문 참고. '이 새는 검은 날개를 가지고 복부는 하얗다'라는 텍스터로부터의 이미지가 생성된 것이다.
9) ProGAN (Progressive growing of Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: 저해상도의 이미지로 부터 점차 학습시켜나가면서 단계적으로 고해상도로 이미지를 만들 수 있게 되었다.
▶ 참고문헌
10) SAGAN (Self-Attention Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: 아래의 방법으로 생성 이미지의 정밀도를 향상시켰다.
▷ Self Attention을 도입하는 것으로, 이미지 전체의 처리 상태를 고려
▷ Spectral Normalization를 Discriminator과 Generator의 양쪽에 적용
▶ 참고문헌
11) BigGAN (Big Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: SAGAN의 개선판. Generator에 직행정규화를 이용하는 것으로 과학습을 방지하고, 최대 512x512픽셀의 고해상도 이미지를 생성할 수 있게 되었다.
▶ 참고문헌
12) StyleGAN (Style-based Generative Adversarial Networks)
▶ 논문
▶ 코드
▶ 포인트: 스타일 변환을 입력한 새로운 Generator를 고안하는 것으로, 1024x1024의 사이즈 고해상도 이미지를 생성하는데 성공하였다.
▶ 참고문헌
2. 마무리
더욱 GAN에 대해서 자세히 알고 싶고 영어도 가능한 사람이라면 이 자료를 읽어보라. 모두에게 GAN에 대한 전체상을 이미지하는데 도움이 되었으면 좋겠다.
참고자료
https://qiita.com/mm_918/items/c6bf085e7618b8af3d98