상세 컨텐츠

본문 제목

GAN (2) - 3D GAN

IT/Deep Learning

by HarimKang 2020. 9. 25. 11:14

본문

Writer: Harim Kang

3D-GAN

3D-GAN이란?

  • 3D-GAN은 3차원 형상을 생성하기 위한 GAN 모형입니다.
  • 3차원 이미지 처리 과정은 2차원에 비해 상당히 복잡합니다. 이 복잡한 문제를 현실적이고 다양하게 3차원 이미지를 생성하는 방법입니다.

논문

  • 제목: Learning a Probabilistic Latent Space of Object Shapes via 3D Generative-Adversarial Modeling
  • 출처: http://3dgan.csail.mit.edu/papers/3dgan_nips.pdf
  • 저자: Jiajun Wu, Chengkai Zhang, Tianfan Xue, William T. Freeman, Joshua B. Tenenbaum

설명

  • 3D-GAN은 GAN의 변형으로, Generator와 Discriminator 모델들이 있다.
  • 주요한 특징은 신경망 모델들 모두 2차원 합성곱(Convolution) 대신 3차원 합성곱 계층을 사용하는 것입니다.
  • 충분한 데이터가 제공될 때, 3차원 형상을 생성하는 법을 학습할 수 있습니다.

3차원 합성곱(3D Convolution)

  • 기존의 2차원 합성곱과 달리 3차원을 가진 입력 데이터에 3차원 필터를 적용합니다.
  • 합성곱을 거치면, 3차원 특징 맵을 쌓은 Stacked List가 생성이 됩니다. 출력은 직육면체 모양과 비슷한 형태로 나옵니다.
  • 입력 데이터를 (3, 3, 3) 모양의 kernel(or filter)와 합성곱 연산을 합니다.

3D-GAN 아키텍처

  • 3D-GAN을 구성하는 두 신경망은 모두 3차원 합성곱 신경망입니다.

  • Generator 신경망은 상향 표본추출(upsampling) 신경망입니다. 해당 신경망은 길이, 너비, 높이, 채널이 비슷한 3차원 이미지를 생성하기 위해 확률 잠재 공간에서 가져온 벡터를 상향 표본추출 합니다.

    • 상향 표본추출(Upsampling)이란?

      • 작은 input data (예를 들면, 2x2 데이터)를 convolution을 통해서 더 큰 data로 바꾸는 것을 의미합니다.
      • 위의 그림에서는 파란색이 입력 데이터, 하얀 점선 부분이 padding, 이며, 초록색이 출력 데이터입니다.
      • stride 또는 kernel size에 따라 출력이 달라지는 방식은 기존의 convolution설명과 같습니다.
  • Discriminator 신경망은 하향 표본추출(downsampling) 신경망입니다.

    • 하향 표본추출은 상향 표본추출과 반대로 이미지에서 합성곱과 조밀 계층을 사용하여 특징을 찾아서 진짜인지 아닌지를 판별하는 방식입니다.

Generator(생성기)

  • 생성기에서는 부피를 측정하는 데 완전 합성곱 계층 다섯개로 구성되어집니다. 또한 해당 신경망에서는 풀링 계층이 없습니다.

    • 완전 합성곱 계층(Fully Convolutional Network)이란?

      신경망 끝에 완전히 연결된 계층으로, 합성곱 계층들로만 구성됩니다.

  • 입력 데이터: 확률 잠재 공간(Probabilistic latent space)에서 추출한 200차원의 벡터를 사용합니다.
  • 출력 데이터: (64, 64, 64)의 3차원 이미지
  • 활성 함수로는 5개의 계층중 마지막을 제외한 계층이 모두 ReLU를 사용하며, 마지막 계층은 Sigmoid 계층을 사용합니다.

Discriminator(판별기)

  • 입력 데이터: (64, 64, 64)의 3차원 이미지

  • 출력 데이터: 진짜 또는 가짜에 속할 확률

  • 활성 함수로는 마지막 계층을 제외한 계층이 모두 LeakyReLU를 사용합니다. 마지막 계층은 Sigmoid가 이진 분류(진짜 또는 가짜)를 합니다.

    • LeakyReLU란?

      • LeakyReLU의 식은 f(x)=max(0.01x,x) 입니다.
      • 기존의 ReLU는 f(x)=max(0,x)으로, 음수이면 0으로 치환하여 사용하는 방법이었습니다.
      • LeakyReLU는 x가 음수일 때 Gradient를 0.01로 주어 사용합니다. 그외의 특성은 ReLU와 같습니다.
      • 기존의 GAN에서는 ReLU를 사용하였으나, 단순하게 CNN방식을 사용하는 것에 한계가 생겨서 DCGAN연구진이 판별기의 활성함수를 LeakyReLU로 사용하여 최적의 결과를 내었습니다.
  • 또한, 마지막을 제외한 계층에서 배치 정규화(Batch Normalization)을 사용하여 입력을 정규화합니다.

손실 함수(Objective Function)

  • 손실 값을 사용하여 Gradients를 계산하고, 가중치를 업데이트하는 데에 사용됩니다.

  • 3D-GAN의 적대적 손실 함수는 아래와 같습니다.

  • KLD는 아래와 같이 계산이 됩니다.

3D-GAN 훈련 순서

  1. 가우스 분포(정규 분포)에서 200차원의 잠재 벡터 z를 추출합니다.
  2. Generator를 사용하여 가짜 이미지 G(z)를 생성합니다.
  3. 진짜 이미지와 생성된 이미지를 바탕으로 훈련합니다.
  4. 적대 모델을 사용하여 Generator를 훈련시킵니다.
  5. 위를 반복합니다.

실습 (TO-DO)

실습 환경

  • Tensorflow 2 환경에서 작성하였습니다.

데이터 세트

  • 3DShapeNetsCode

데이터 살펴보기

  • Voxel화

3D-GAN 구현 실습

https://colab.research.google.com/drive/1cNVJLiVqP3Rs95JH330q5HI0mdlAw2pF

  • Generator Network
  • Discriminator Network
  • 훈련
  • 모델 저장
  • 모델 예

Reference

3D-GAN Images: http://3dgan.csail.mit.edu/papers/3dgan_nips.pdf

Upsampling: https://github.com/vdumoulin/conv_arithmetic

관련글 더보기

댓글 영역