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

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

딥러닝/이미지 인식
AlexNet ImageNet Classification wtih Deep Convolutional Neural Networks

AlexNet: ImageNet Classification wtih Deep Convolutional Neural Networks

2012년에 쓰여진 논문으로서 그때 작은 크기의 Dataset에서는 Deep Neural Network가 좋은 성능을 보였지만, 실제 Real world에 적용하기에는 무리가 있었습니다. 그래서 큰 Dataset(ImageNet, 15m images&22k labels)를 가지고 이를 적용하고자 하였습니다.

Dataset

ImageNet을 만들기위해 Web에서 이미지를 모으고, 사람들이Amazon’s Mechanical Turk crowd-sourcing tool을 이용해 labeling 작업을 하였습니다. 이렇게 만들어진 ImageNet Dataset으로 Real world의 문제를 해결하기 위해서 두가지 대회를 열었습니다. 바로 PASCAL VOCILSVRC입니다.



ReLU

실제 인간의 뇌처럼 신경망을 구성한다면 활성화 함수는 tanh, sigmoid가 되어야 하는데, 왜 ReLU가 성능이 좋을까요? 그 이유는 ReLU가 non-saturation하기 때문입니다. 그래서 이때 non-saturation이 무엇일까요?

saturation

sigmoid, tanh 함수는 어떠한 값이 들어와도 -1~1, 혹은 0~1 사이의 값을 배출합니다. 그렇다면 큰 값이 들어왔을 때도, 저 사이의 값을 내놓아 saturation(포화)됩니다. 하지만 ReLU는 max(0, x)이므로 어떠한 값이 들어와도 제한이 없습니다. 값이 크면 클수록 더큰 gradient를 가지게 됩니다.

그리고 ReLU의 non-saturation이 stochastic gradient descent와 결합되어 더욱더 효율이 증대됩니다. feature가 큰 값을 가지고 큰 gradient를 가지고 있을 경우 관성이 생겨 더욱더 네트워크가 빨리 최적화합니다. 또한 ReLU는 미분하기에도 단순하여, 연산량의 면에서도 충분한 이점을 가지고 있습니다. 


위 그림을 보시면 실선이 ReLU를 사용했을 때이고 점선이 tanh을 사용한 경우입니다.

Local Response Normalization

lateral inhibition이란 것을 아십니까? 실제 뇌 세포의 증상인데, 강한뉴런의 활성화가 근처 다른 뉴런의 활동을 억제시키는 현상입니다. 그래서 아래 그림을 보시면 검은 네모들 사이에 회색 점?부분? 이 보일텐데 이는 검은색 사각형을 보고 뉴런들이 강하게 반응하여 흰색부분(약한 뉴런)에 반응하여 회색이 조금 보이게됩니다.


그래서 이것이 왜 나왔냐하면, Neural Network의 Feature에서 한 세포가 유별나게 강한 값을 가지게 된다면, 근처의 값이 약하더라도 convolution 연산을 한다면 강한 feature를 가지게 되는것입니다. 그렇다면 over-fitting이 잘 일어나게 되겠죠(training dataset에만 feature가 크게 반응하니까)

그래서 어떠한 filter가 있을 때, 그 주위 혹은 같은 위치에 다른 channel의 filter들을 square-sum하여 한 filter에서만 과도하게 activate하는 것을 막습니다.

  • a^i_x,y는 i번째 kernel의 x,y값입니다. 그리고 정규화가 적용되어 b^i_x,y로 바뀌게 되는 것입니다.
  • n은 해당 a의 위치에 spatial position한 kernel들의 개수를 말합니다. N은 총 kernel 개수입니다.
  • k, alpha, beta는 normalization을 위한 하이퍼 파라미터입니다.

저희는 이 normalization을 ReLU후에 적용하였습니다.

Data Augmentation

over-fitting을 막는 가장 단순한 방법은 데이터셋의 크기를 많이 늘이는 것입니다. 그래서 Data Augmentation이란 것을 통해 dataset을 더 크게만드는 방법을 제시하였습니다.

  • 256x256으로 만들어진 이미지에서 랜덤으로 224x224로 이미지를 여러장 crop하고, 이미지를 filp(좌우반전)한 상태에서도 crop하여 이미지를 2048배 늘였습니다. 테스트시에는 이미지의 가장자리 4개와 정가운데에서 patch를 만들어 네트워크를 통과시킨후 softmax를 평균냈습니다.
  • 이미지 데이터셋에 PCA 분석을 하여 데이터를 학습하기 쉽도록 변환하였습니다.

Dropout

Dropout이란 hidden layer의 몇몇 뉴런의 값을 0으로 바꿔버립니다. 그래서 neuron이 "dropped out(탈락)"되어 forward pass, back propagation시 아무런 영향을 미치지 않습니다. 이 drop out은 뉴런들 간의 복잡한 상호의존도를 낮춰 over fitting을 막습니다. 테스트 시에는 모든 뉴런을 사용하되 output에 0.5를 곱하여 사용하였습니다.


참조

 Alexnet paper

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