DCGAN (Deep Convolution GAN)

.·2023년 4월 9일
0

DCGAN (Deep Convolutional Generative Adversarial Nets)

논문 : Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

서론

기존 공개한 GAN은 MNIST 같은 비교적 단순한 이미지에서는 잘 동작했지만 조금만 이미지가 복잡해져도 성능이 그닥 좋지 않았다.
또한 Deep neural network와 마찬가지로 black box model이었기 때문에 성능을 개선하기도 쉽지 않았다.
또한 GAN이 생성한 결과물이 얼마나 잘 만들었는지 평가할 수 있는 지표도 없었는데,
이를 해결하기 위해 등장한 모델이 DCGAN이다.

0. 기존 GAN 구조

0.1 DCGAN의 간단한 설명

특정 latent vector z에서 시작은 하면서,
이 vector를 Project and reshape 을 통해 하나의 tensor로 만들어주고,
Upsampling 또는 Transposed convolution 을 통해 너비(width)와 높이(height)를 증가시키는 식으로 이미지를 만들어 나간다.
사실 이러한 모델은 분류 모델인 CNN을 거꾸로 뒤집은 것과 상당히 유사하다.
이러한 방법으로 학습을 했을 때, 이미지 도메인에서 높은 성능을 보이는 것을 발견했다.

DCGAN Architecture

DCGAN은 CNN 구조를 적용하였다.

  • Fully connected layer와 Pooling layer를 최대한 배제하고 Strided Convolution과 Transposed Convolution으로 네트워크 구조를 만들었습니다. Fully connected layer와 Max-pooling layer는 매개변수의 수를 줄일 수 있지만 이미지의 위치 정보를 잃어 버릴 수 있다는 단점이 있습니다.

  • Generator와 Discriminator에 배치 정규화(Batch Nomalization)을 사용하였습니다. 이는 입력 데이터가 치우쳐져 있을 경우의 평균과 분산을 조정해주는 역할을 합니다. 따라서 back propagation을 시행했을 때 각 레이어에 제대로 전달되도록해 학습이 안정적으로 이루어지는데 중요한 역할을 하였습니다.

  • 마지막 layer를 제외하고 생성자의 모든 layer에 ReLU activation를 사용하였습니다. 마지막 layer에는 Tanh를 사용하였습니다.

  • Discriminator의 모든 레이어에 LeakyReLU를 사용하였습니다.

구조


DCGAN의 평가 지표

DCGAN은 학습이 잘 이뤄졌느지 확인하기 위해 여러가지 검증 방법을 도입했다.
그 중 하나가 잠재 공간 (latent space, z)에 실제 데이터의 특성이 투영됐는지 살펴보는 것이다.
사람 얼굴을 생성하는 모델이 잘 학습되면 성별, 머리 색깔, 얼굴 방향, 안경 착용 여부 등의 의미 있는 단위들이 잠재 공간에 드러나게 된다.
따라서 생성자의 입력인 100차원 짜리 'z'벡터의 값을 바꾸면 생성자의 출력인 이미지의 속성을 바꿀 수 있다.

아래 사진은 DCGAN이 생성한 사람 얼굴 이미지에서 얼굴 방향에 해당하는 'z' 벡터의 값을 바꾸어서 얼굴이 바라보는 방향을 바꾼 것이다.
이것이 가능하다는 것은 생성자의 얼굴의 의미적인 속성을 학습했다는 것을 뜻한다.

학습 디테일

  1. Project and reshape
    입력으로 사용하는 latent variable 이 "가로 X 세로"의 형태가 아니기 때문에, CNN 연동을 위해 image feature-map 형태로 변형시킬 수 있는 "Project and reshape" Block 이 필요하다.

  2. Fracionally-strided convolution
    feature-map 의 크기가 작아지는 일반적인 CNN 과 다르게 크기를 키워야한다. 그래서 fracionally-strided convolution이 필요하다.

  • 기존 Stride는 필터를 거치며 크기가 작아진다.
  • 반면 Fractionally-strided convolutions은 input에 padding을 하기 때문에 오히려 크기가 더 커진다. 이를 Transposed convolution이라고 불린다.
  1. DCGAN에서 사용하는 Convolutional Filter 소개
  • Discriminator : Down Sampling
  • Generator : Up Sampling
  1. 종합

추가로

DCGAN에서의 벡터 연산 (Vector Arithmetic)

안경을 쓴 남자 사진의 정보를 닮고 있는 sementic vector 에서 안경을 쓰지 않은 사진에 대한 sementic 정보를 닮고 있는 벡터를 빼고, 안경을 쓰지 않은 사진을 닮고 있는 sementic vector 더했더니 안경을 쓴 여자에 대한 latent vector(분포)가 만들어졌다.
이러한 latent vector 를 다시 생성자에 넣고 사진을 출력하면 아래 그림과 같이 안경을 쓰고 있는 여자 사진이 출력된다.

이를 해석하자면 DCGAN은 벡터 연산도 성공적으로 지원한다.

Tutorial Code

httsp://github.com/jinseonggram

DCGAN 정리

DCGAN은 새로운 이론에서 얻어진 것은 아니지만, 성능을 높이는데에 큰 역할을 했다.

  • 안정적인 학습과 성능이 뛰어난 Convolutional GAN 구조 제안했다.
  • Generator가 벡터 산술 연산이 가능하다. (word2vec과 같은 성질)
  • Unsupervised learning을 통해 학습된 discriminator가 image의 정보를 잘 파악하며 좋은 성능을 보인다.

참고

profile
.

0개의 댓글