IT/AI\ML

[연구동향] GAN의 주요 연구 역사(~2019년 11월)

개발자 두더지 2020. 4. 24. 17:15
728x90

 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

 

728x90