DCGAN - 논문 핵심 내용

조영재·2021년 9월 1일
0

DCGAN

목록 보기
2/3

DCGAN은 수학적인 접근이나 추론보다는, 무수히 많은 실험을 통해 경험적으로 더 나은 신경망을 제안한 방법입니다. 따라서 수학적인 증명보다는 논문에서 더 나은 구조를 제시한 내용을 바탕으로 설명합니다.

기여

  1. 기존의 GAN에 Convolutional Layer를 결합한 구조 제안
  2. Network의 필터(가중치)들이 어떤 객체를 학습하는지를 실험적으로 보여줌
  3. Word2Vec에서와 같이 Latant Vector의 벡터 산술 특성을 가지고 있음을 보여줌

walking in the latent space

Generator는 1차원의 Latent Vector를 받아 이를 변형하여 이미지를 생성합니다. 이 Latent Vector가 조금씩 변한다면, 이미지도 조금씩 변하는 현상을 볼 수 있습니다. 이는 각 Latent Vector가 이미지의 특성을 조금씩 제어하고 있다는 것을 증명합니다.

위 이미지는 각기 다른 이미지를 생성하는 두개의 Latent Vector를 선택하고 하나의 Latent Vector를 다른 Latent Vector 쪽으로 변화시킵니다. 예를 들자면 아래와 같습니다.

A Vector: [0, 0, 0, 5]
B Vector: [10, 10, 10, 10]

[0, 0, 0, 5] → [2, 2, 2, 6] → [4, 4, 4, 7] → [6, 6, 6, 8] → [8, 8, 8, 9] → [10, 10, 10, 10]

점차 A 이미지가 B이미지로 변하는 모습을 볼 수 있습니다.

vector 연산

웃는 여성 을 생성하는 Latent Vector 들의 평균치에서 일반 여성 을 생성하는 Latent Vector들의 평균치를 감산하고, 일반 남성 을 생성하는 Latent Vector들의 평균치를 더하면 웃는 남성 을 생성하는 Latent Vector가 됩니다.

위 Working Latent Space에서 처럼 Latent Vector의 각 값이 특별한 의미를 가지고 있음을 증명합니다.

Visualize filters (filter 시각화)

  • 위 그림을 보면, Layer 계층을 지날 때 마다 생성되는 Output을 그림으로 표현했는데, DCGAN 논문이 나오기 이전 단계에서는 이렇게 표현 할 방법이 전혀 없었습니다.
  • DCGAN은 이를 Backpropagation 과정에서 CNN의 구조와 유사한 Discriminator가 학습한 Filter들이 어떻게 activate 되는지, 그러니까 위 그림처럼 어떤 Output Filter를 만들 수 있는지 시각화하여 각각의 filter가 이미지에 나타난 특수한 객체를 잘 학습한다는 것을 증명했습니다.

위 그림은 Input Image 들이 Discriminator에 입력되어 연산과정 중 생성되는 Filter들입니다. Random filtersTrained filters로 나누어 설명합니다.

Rnadom filters

학습 이전의 Discriminator가 생성하는 filter들로, Network를 지나는 중간과정에서 생성하는 filter들은 원본이미지에서 조각조각나거나 흐릿한 느낌밖에 모르게 출력을 생성합니다.

Trained filters
충분히 학습된 Discriminator가 생성하는 filter들로, Input Image에서 침대만을 추출하여 출력하기도 하고, 문 또는 벽지등을 추출하여 출력하기도 합니다. 이는 Convolution layer에서 적절하게 객체를 선별하고 있다는 것을 증명합니다.

변경점 (GAN → DCGAN)

  • Fully Connected Layers → Convolution Layers
    (discriminator: strided, generator: fractional-strided)
  • batchNormalization 사용
  • Generator: RELU activation 사용( 마지막 Layer는 Tanh 사용 )
  • Discriminator: LeakyReLU activation 사용

코드를 분석하며 상세히 설명합니다.

profile
Be Good Developer

0개의 댓글