본문 바로가기
인공신경망(DL)/Computer Vision

Generative Adversarial Networks, GAN

by kiimy 2021. 8. 29.
728x90
  • GAN의 대립적인 의미를 이해한다.
  • DCGAN의 Latent 개념과 그 연산에 대해서 이해한다.
  • CycleGAN의 개념을 이해한다.
  • GAN의 개념을 설명할 수 있다.
  • GAN에서 생성자와 판별자의 공통된 모듈이 어디에 있는 지 파악할 수 있다.
  • 학습된 CheckPoint 저장하고, 불러올 수 있다.
  • 생성한 이미지를 gif형태로 제작할 수 있다.

Convolution Neural Network(CNN)을 기반으로한

생성모델인 Deep Convolutional GAN (DCGAN), CycleGAN

GAN 생성적 대립 신경망

  https://dreamgonfly.github.io/2018/03/17/gan-explained.html

이미지를 생성하는 원리를 “경찰과 위조지폐범”으로 비유하여 설명합니다.
위조지폐범은 위조지폐를 진짜 지폐와 거의 비슷하게 만듭니다. 위조지폐를 진짜 지폐로 속이고
사용할 수 있도록 말이죠. 경찰은 이 지폐가 진짜 지폐인지 위조지폐인지 구분하려 합니다.
위조지폐범과 경찰은 적대적인 관계에 있고, 위조지폐범은 계속 위조지폐를 생성하고 경찰은 진짜를
찾아내려고 하는 쫓고 쫓기는 과정이 반복되죠! 이 부분을 위조지폐범(Generator)와 경찰(Discriminator)
서로 위조지폐를 생성하고 구분하는 것을 반복하는 minmax game이라 할 수 있습니다.

기본적인 딥러닝 모델인 CNN (Convolutional Neural Network)은 이미지에서 개인지 고양이인지

구분하는 이미지 분류 (image classification) 문제에 널리 쓰인다.

 

GAN은 모델이 데이터셋과 유사한 이미지를 만들도록 하는 것( 저화질 이미지 -> 고화질 이미지 )

= 딥러닝 모델중 "이미지 생성"에 쓰이는 모델(확률분포를 사용)

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

 

 X~Pdata (x)는 실제 데이터에 대한 확률분포에서 샘플링한 데이터를 의미하고 Z~Pz(z)는 일반적으로 가우시안분포를 사용하는 임의의 노이즈에서 샘플링한 데이터를 의미합니다. 여기서 z를 통상적으로 latent vector라고도 부르는데 차원이 줄어든 채로 데이터를 잘 설명할 수 있는 잠재 공간에서의 벡터를 의미합니다. 본론으로 돌아가서, D(x)는 분류자이고 진짜일 확률을 의미하는 0과 1사이의 값이라서, 데이터가 진짜이면 D(x)는 1, 가짜이면 0의 값을 내놓습니다. 두 번째 항에 있는 분류자인 D(G(z))는 G가 만들어낸 데이터인 G(z)가 진짜라고 판단되면 1, 가짜라고 판단되면 0의 값을 가지게 됩니다.

우선 D가 V(D,G)를 최대화하는 관점에서 생각해봅시다. 위의 수식을 최대화하기 위해서는 우변의 첫 번째 항과 두 번째 항 모두 최대가 되어야 하므로 log⁡D(x)와 log(1 -⁡D(G(z)) 모두 최대가 되어야 합니다. 따라서, D(x)는 1이 되어야 하며 이는 실제 데이터를 진짜라고 분류하도록 D를 학습하는 것을 의미합니다. 마찬가지로 1-D(G(z))는 1이 되어 D(G(z))는 따라서 0이어야 하며, 이는 생성자가 만들어낸 가짜 데이터를 가짜라고 분류하도록 분류자를 학습하는 것을 의미합니다. 다시 생각해보면 V(D,G)가 최대가 되도록 D를 학습하는 것은 판별자가 진짜 데이터를 진짜로, 가짜 데이터를 가짜로 분류하도록 학습하는 과정입니다.

다음으로 생성자G가 V(D,G)를 어떻게 최소화하도록 학습하는 지에 대한 관점에서 생각해봅시다. 위의 수식의 우변 첫 번째 항에는 G가 포함되어 있지 않으므로 생성자와 연관이 없어 생략이 가능합니다. 두 번째 항을 최소화하기 위해서는 log(1 -⁡ D(G(z))가 최소가 되어야 합니다. 따라서 log(1 -⁡ D(G(z)는 0이 되어야 하고 D(G(z))는 1이 되어야 합니다. 이는 판별자가 진짜로 분류할 만큼 완벽한 가짜 데이터를 생성하도록 생성자를 학습시키는 것을 의미합니다. 이처럼 V(D,G)를 최대화하는 방향으로 분류자 D를 학습하고, V(D,G)를 최소화하는 방향으로 생성자를 학습하는 것을 Minmax problem이라고 합니다.

DCGAN

GAN은 Generator (생성자)와 Discriminator (판별자) 두 개의 모델이 동시에 적대적인 과정으로 학습

 

*생성자 G는 실제 데이터 분포를 학습 = 이미지를 잘 생성해서 속일 확률을 높이고 

*판별자 D는 원래의 데이터인지 생성자로부터 생성이 된 것인지 구분

= 이 이미지를 제대로 구분하는 확률을 높인다

==> MinMax game 이론

 

련과정 동안 Generator는 점차 실제같은 이미지를 더 잘 생성하게 되고, Descriminator

점차 진짜와 가짜를 더 잘 구별하게 되는데  이 과정은 Descriminator가 가짜 이미지에서 진짜 이미지를

더이상 구별하지 못하게 될때 평형상태에 도달하게 된다.

 

훈련하는 동안 Descriminator를 동결(학습되지 않도록) 하는 것이 매우중요 Descriminator의 가중치가

훈련하는 동안 업데이트되면 Descriminator항상 진짜를 예측하도록 훈련됨

Descriminator가 생성된 이미지를 모두 "진짜이미지"라고 예측하도록 Generator의 가중치를 업데이트
== 판별자는 동결되기 때문에 생성자만 업데이트

 

* Generator, Discriminator 차이

Generator - 분포
데이터가 충분히 많을 때 과적합 피할 수 있다.
클래스의 분포도로 보기 때문에 분포도가 겹쳐 있을 시 판단 오류가 생길 수 있다.
계산할게 많다

Discriminator - decison boundry
작은 데이터로도 잘 작동하지만 과적합 주의
계산할게 generator보다 적음

특정 boundry로 분류하기 때문에 과적합 될 수 있음

 

* Latent space

- Data를 압축한다는 것은 원래 표혀보다 적은 비트를 사용하여 정보를 인코딩하는 프로세스로 정의

==> 차원을 줄이면서 각 이미지의 가장 중요한 특징만 잠재공간 표현(Latent Space)에 저장

==> 데이터의 특징을 학습하고 패턴을 찾기위해 데이터표헌을 단순화 하는 것

(각 pixel은 256 값을 할당)


# GAN

generator에서 tanh를 activation으로 활용

tanh를 활용하면 output이 -1 ~ 1 사이로 나오기 때문에 Normalize

x_train = x_train / 127.5 - 1

x_test = x_test / 127.5 - 1

 

* min 값과 max 값이 -1 ~ 1사이 확인

x_train.min(), x_train.max()

 

* Flatten

x_train = x_train.reshape(-1, 784)

생성자 (Generator)

시드값 (seed; 랜덤한 잡음)으로부터 이미지를 생성하기 위해, tf.keras.layers.Conv2DTranspose 

(업샘플링) 층을 이용 각 층마다 활성함수로 tf.keras.layers.LeakyReLU을 사용

 

감별자 (Discriminator)

합성곱 신경망(Convolutional Neural Network, CNN) 기반의 이미지 분류기

(아직까지 훈련이 되지 않은) 감별자를 사용하여, 생성된 이미지가 진짜인지 가짜인지 판별

델은 진짜 이미지에는 양수의 값 (positive values)을, 가짜 이미지에는 음수의 값 (negative values)을

출력하도록 훈련된다.

==> 감별자 함수 생성시 마지막 layer에서 따로 activation 함수 적용 안한다면 위에처럼 판단하면된다.

       = real인지 fake인지 분류하는 것이므로 sigmoid나 softmax 사용해도 된다.

Cycle GAN

조건부 GAN : 페어링되지 않은 이미지 대 이미지 변환

일반 GAN과의 이점은 무작위의 노이즈에서 이미지를 만들어 내지 않는다는 점이다.

 

한 이미지 도메인의 특성(얼룩줄무늬)을 캡처하고 이러한 특성을 다른 이미지 도메인(말, horse)으로 변환 할

수있는 방법을 알아낼 수 있는 방법을 제안

즉, 소스 및 대상 도메인 간의 일대일 매핑없이 한 도메인에서 다른 도메인으로 변환

 

다른 GAN 모델에서도 위와 같은 기능은 가능하지만 CycleGAN은

“완전히 같은 조건의 데이터가 주어지지 않더라도”, 그것에 대해 그려볼 수 있다는데 있다.

하나의 이미지를 학습하고, 그것의 조건을 변경하기 위해, 완전 똑같은 배경을 가진 다른 버전의
이미지를 반드시 찾아내야할 필요가 없다
728x90

댓글