Deep Learning/GAN

[GAN] Variants of GAN - DCGAN, LSGAN, SGAN

언킴 2021. 10. 30. 17:23
반응형

Contents

     

     

    DCGAN

    Deep Convolutional GAN(DCGAN), 2015는 기존의 GAN 모형은 nn.Linear로 결합되어 사용되었지만, conv layer를 통해서 연산을 진행한다. 되게 간단하면서도 아직까지도 선호되는 모델 중 하나이다. 

     

     

    Discriminator의 nn.Sequential을 보면 LeakyReLU(0.2)와 convolution layer를 사용했다. Generator 의 경우에는 ReLU와 Deconvolution layer를 사용하고 D, G 둘다 pooling layer는 사용하지 않고 그 대신에 convlayer의 stride를 2이상으로 두고 진행했다. normalization의 경우에는 batch normalization을 사용하고, Adam optimizer의 parameter를 lr = 0.0002, beta1 = 0.5, beta2 = 0.999로 적용을 해 학습시켰다.

     

    DCGAN에서 재밌는 부분은 우리가 생성한 Latent vector를 가지고 산술적인 연산이 가능하게 되는 것이다. 선글라스를 쓴 image에서 선글라스를 착용하지 않은 남자의 image를 뺴고 여자 image를 더해주면 썬글라스를 착용한 여자 image가 출력되는 것이다. 

     

     

    LSGAN

    Least Squares GAN(LSGAN)은 loss를 구하는 부분에 있어서 기존 GAN model과 차이점을 보이고 나머지 부분은 거의 동일하다. 기존의 GAN은 단순히 Discriminator를 속이기만 하면 끝이었지만, LSGAN에서는 속이는 것이 아니라 기존 실제 이미지와 가장 가까운 값을, Decision boundary 근처로 가는 것을 목표로 하고 있다. 

     

    그렇기 때문에 기존 모델에서는 BCELoss를 사용했지만 LSGAN은 말그대로 Least Square로 loss가 0에 가깝게 가도록 모델을 학습시키고 있다. 단순히 모델을 속이는 것 보다 실제 이미지와 비슷한 값을 찾아가는 아이디어에서 시작되었다. 

     

    분홍색 부분을 보면 Discriminator를 완벽하게 속였지만 이렇게 생성한 이미지가 실제 이미지와 비슷하다고는 할 수 없기 때문에 실제 이미지가 몰려있는 분포로 옮겨주는 것이다. 

     

    Vanilla GAN, DCGAN과 LSGAN 간의 성능을 비교해보면 상대적으로 성능이 좋게 나온다고 한다. GAN을 평가하는 평가지표는 inception Score를 사용하기는 하는데, 아직 까지는 사람이 직접 평가하는 방법을 사용한다. 

     

    SGAN

    Semi-Supervised GAN은 조금 다른 방식으로 접근을 한다. SGAN에서 다시 classification을 한다. mnist data를 예로 들면 Discriminator는 진짜 가짜를 구분하는 것이 아니라 10개의 숫자를 분류하는 classification에 fake라는 category를 추가해 총 11개의 dimension을 가지는 vector를 출력하고 softmax를 취해준다. 

     

    이때 가짜 이미지를 생성할 때 Generator의 input으로 들어가는 vector는 총 2가지를 넣어준다. 하나는 latent vector를 넣어주고 다른 하나는 class를 나타내는 one-hot vector를 넣어주게 된다. 2를 나타내는 vector를 넣어주고 Generator에게 2의 이미지를 출력해보라고 명령을 하는 것이다. 그 후 가짜 이미지를 생성하고 Discriminator는 아까 fake class로 분류를 해야된다. 하지만 dataset에 label이 되어 있어야지 가능하다..

     

     

     

     

     


    https://github.com/ceo21ckim/pytorch/blob/main/GAN/generative_adversarial_network.py

     

    GitHub - ceo21ckim/pytorch

    Contribute to ceo21ckim/pytorch development by creating an account on GitHub.

    github.com

     

    'Deep Learning > GAN' 카테고리의 다른 글

    [GAN] Probability Distribution  (0) 2021.10.30
    [GAN] Generative Model  (0) 2021.10.21
    [GAN] Generative Adversarial Networks(GAN) - (StarGAN, fusionGAN)  (0) 2021.09.08