Curaai00's Deep Learning Blog

Domain Transfer Network: Unsupervised Cross-Domain Image Generation

딥러닝/GAN
Domain Transfer Network Unsupervised Cross-Domain Image Generation

Domain Transfer Network: Unsupervised Cross-Domain Image Generation

요즘 Deep Learning이 여러 분야에 사용되고 있는데, Deep Learning을 이용한 여러 사용사례에서 학습을 실제 환경의 데이터가 아닌, web 혹은 정제돼있는 데이터를 가지고 학습을 한다음 학습한 것을 실제 환경에 그대로 사용하였더니 정확도도 떨어지고 위험도가 너무 높았습니다. 그런 것을 방지하기 위해 다른 도메인에 적용할 수 있도록 하는 것을 Transfer Learning이라고 합니다.

이 Domain Transfer Network는 두 도메인(비슷하고 본질적으로는 같은 의미를 가짐, Source domain S & Target domain T) S, T를 학습하여 S의 이미지를 T의 이미지로 바꿉니다.

Domain Transfer Network


DTN(Domain Transfer Network)는 다음과 같은 구조를 가지고 있습니다. 보시다시피 일반적인 GAN에 base를 두고있는데, basic GAN과 다른점은 바로 function f와 g입니다. f와 g가 Generator G를 구성하고 있습니다. (G == g*f)

Function f & g

함수 f는 S, T의 feature를 만드는 부분입니다. 이게 무슨말이냐 하면 위 그림의 남자와 G를 통과한 후의 남자는 본질적으로 같은 사람이란 것입니다. 물론 domain(하나는 real, 하나는 emoji)은 다릅니다만. 이 남자를 james라 한다면 실제 james(S)도, emoji의 모습을 한 james(T)도 사실은 똑같은 james란 말입니다. 그래서 funciton f는 그 james라는 사람의 특성(브라운 색 머리카락, 하얀색 피부, 선명한 눈과 눈썹 등)을, 사람을 feature로 압축해내는 함수입니다.

function g는 그 압축된 feature, f(x)를 다시 T의 이미지로서 재변환시키는 함수입니다.

D Loss

D는 각각의 의미를 가진 세가지 loss가 합쳐져 있습니다.

  1. D1은 S에서 sampling한 x가 G를 거치며 T같은 이미지를 만들어내는 것을 D가 잘 구별하느냐를 나타냅니다.
  2. D2는 보기에는 진짜 이미지(Target domain의 이미지)를 G에 넣은 바보처럼 보이지만, f가 어떠한 이미지를 잘 feature화 시키느냐, g는 그 feature를 잘 target domain의 이미지처럼 만들어내는가를 나타냅니다. 심지어 Target domain의 이미지 x가 들어와도 말이죠!
  3. D3는 진짜 이미지 x를 넣었을 때 진짜 이미지인지 잘구별하느냐를 나타냅니다.

G Loss

G도 기존의 basic GAN의 G처럼 D를 이용하여 학습을 진행합니다.

 

  1. 첫번쨰 항은 S에서 sampling된 x가 G를 통하여 T의 이미지처럼 보이도록 만듭니다.
  2. 두번쨰 항은 T에서 sampling된 x가 G를 통하였어도 여전히 진짜 이미지처럼 보이도록 만듭니다.

Consistency Loss

Const Loss에서는 G의 f를 통해서도 여전히 같은가? 같은 feature, 같은 의미, 같은 것, 불변성을 가지고 있는가를 distance 함수를 통해 측정하고 요구합니다.

그래서 S에서 sampling된 x를 f(x), f(G(x))의 두 feature 사이의 거리를 측정하여 최적화합니다.

Identity Loss

Consistency Loss 처럼 같은 feature를 나타내는가 + Target Domain 이미지를 성공적으로 만들어 내는가를 다음과 같은 Loss를 통해 distance를 측정하고 최적화합니다.

TV Loss

TV Loss는 anisotropic total variation loss로서 이미지를 조금더 부드럽고 자연스럽게 만들어 준다고 합니다. G가 만들어낸 이미지 G(x)를 z라고 합니다.

논문의 저자들은 B를 1로 했다고 하네요.

위 Loss들은 L_D와 L_G = L_GANG + alpha * L_CONST + beta * L_TID + gamma * L_TV로 이루어져 있으며 alpha, beta, gamma는 parameter입니다. distance loss들은 여러가지 loss(MSE, Hinge, cosine, triplet)들을 실험했었는데, MSE가 가장 smiple하고 좋았다고 합니다.

Experiment

DTN은 두가지 실험을 하였는데 하나는 SVHN에서 MNIST, 다른 하나는 real face에서 emoji face로 domain을 transfer 하였습니다.



왼쪽그림은 real face에서 emoji face로 transfer, 오른쪽 그림은 SVHN에서 MNIST로 transfer한 것입니다.


Compare


다른 Domain Adaptation Method를 비교해보니 DTN이 더 좋은 성능을 나타냈습니다.

Limitation

DTN이 만능처럼 보여도 두가지 문제점이 있습니다.

  1. 두 도메인이 비슷해야 한다. 도메인이 완전히 다르거나 의미자체가 틀리다면 transfer는 당연히 안되겠죠?
  2. source domain이 더 많은 feature, 의미, data를 가지고 있어야한다. source에서 더 많은 feature를 가지고 있어야 변환하기도 쉽고, target domain의 feature가 복잡하다면 source의 부족한 feature를 가지고 transfer하기가 어려울 것입니다.

References

 Arxiv 논문: https://arxiv.org/abs/1611.02200

DCGAN: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

딥러닝/GAN
DCGAN

Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks, DCGAN

기존의 GANs에서는 단순히 fully connected layer를 사용한 Model을 정의하였습니다. 그래서 여기서는 GAN의 문제점을 Deep Convolutional한 문제로 풀고, 새로운 장점과 방법을 연구하였습니다.

기존의 GAN의 문제점

Low Resolution

기존의 GAN에서는 단순한 fully connected를 사용하였기 때문에 Generator가 High Resoulution한 즉 높은 화질의 이미지를 생성해낼 수 없었습니다. 그래서 MNIST와 같이 단순한 (28,28)사이즈의 이미지 밖에 생성해 낼수 없었습니다.

Memorizations

Generator가 정말로 이미지를 만들어 내는 것이 아닌 학습한 데이터를 기억하여(Memorization) 하나를 골라내는 것이 아니냐? 라는 의문점이 있기도 하였습니다.

Unstable Train

학습이 항상 잘 되는것이 아니라, 어떤 때는 진짜같은 이미지를 만들어 내지못하기도 하고, 한가지 이미지만을 계속 만들어내는 등 안정적이지 못한다는 단점이 있었습니다. 흔히들 이 문제를 Mode collapsing(GANs이 실제 데이터의 분포를 따라 만들어 가지 못할 때 일어납니다)

Deep Convolution의 장점

Network에 convolution을 사용하게 되면서 아래와 같은 장점들을 얻을 수 있게됐습니다.

  • deconvolution을 통한 high resolution한 이미지를 생성할 수 있습니다.
  • filter visualization 통해 시각화하여 어떻게 만들고, 구별하는지 인지하며, 기존의 Black Box라는 문제점을 해소 할수 있습니다.
  • convolution을 통해 이미지의 특징을 학습하여 다양하고 실제같은 이미지를 학습 할 수 있다.
  • 안정적인 학습이 가능합니다.

Model Structure

All Convolution net

  • D의 max pooling과 같은 pooling function를 strided convolution으로 대체합니다.
  • G는 spatial upsampling(Deconvolution)을 적용합니다.

Eliminate Fully Connected Layer

  • G의 맨위 Fully Connected layer는 없애고, global average pooling으로 바꿉니다.
  • D의 flatten된 last convolution layer는 single sigmoid를 output으로 합니다.

Batch Normalization

DCGAN에서는 모든 Layer를 Batch Normalization을 사용합니다. D의 input layer와 G의 output layer는 batch norm을 사용하지 않습니다.

Experiment

Train Examples

  • epoch(1) 결과


  • epoch(5) 결과


위 결과들을 보면 epoch(1)에서는 bedroom이 성공적으로 만들어졌지만, 자세히 보시면 구조나 object들이 이상한 점을 발견할 수 있습니다. 하지만 epoch(5)에서는 그런 object의 불안정한 부분을 조금 완화시킨 것을 볼수 있습니다.

Walking on latent space

앞에서 얘기했던 GAN의 문제점인 Memorization은 학습을 할 때 학습의 데이터를 기억해서 generation할 때 그 학습한 데이터를 그대로 만들어내는 것이 아니냐는 의문점이 있었습니다.

Z(noise)를 천천히 변화시키면서 Data Distribution에 따른 Generation하는 이미지들이 천천히 변하는 것(walking on latent space)을 관찰합니다. 하지만 만약 generated 된 이미지가 noise를 따라 천천히 변하는 것이 아니라거나(sharp transition), 제대로 generate가 되지 않는다면 GAN이 이미지를 순수히 generate하는 것이 아니라 memorization한것이라고 할수 있습니다.


위의 이미지를 보면 noise를 천천히 변화시키며, generated 된 이미지들이 walking on latent space가 되는 것은 볼수 있습니다.

Discriminator Filter Visualizing

Discriminator의 Filter를 학습시키기 전과 학습시킨 후를 비교하였습니다. (Bedroom Dataset)


  • Random Filter는 주어진 이미지에 대해 아무런 반응이 없습니다.
  • Trained Filter는 Bedroom의 구조나 모형 같은 것에 반응을 하여 activate합니다.

Vector Arithmetic


DCGAN 논문에서는 noise Vector간에 연산이 가능하다는 새로운 연구가 있었습니다.

Vector(Smiling Woman) - Vector(Neutral Woman) + Vector(Neutral Man) = Vector(Smiling Man). 이런식으로 {Smile Woman - Neutral Woman} = Smile, Smile + Neutral Man = Smiling Man 이런식으로 미소짓는 남자를 만들어내는 Vector 연산을 했습니다.

Data Distribution에서 각각(남자, 여자, 선글라스, 미소)에 해당하는 부분(노이즈)를 찾아 그를 연산하며 만들어 낸것 같습니다.

참고

DCGAN 한글 설명 : http://jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-1.html

Arxiv 논문 : https://arxiv.org/abs/1511.06434

 


'딥러닝 > GAN' 카테고리의 다른 글

Domain Transfer Network: Unsupervised Cross-Domain Image Generation  (0) 2018.06.25