Neural Style Transfer

  • What is neural style transfer
  • what are deep convNets learning?
  • cost function
  • content cost
  • style cost

1. What is neural style transfer

 

neural style transfer란,

content iamge는 유지하되 style image의 화풍으로 채색한 것 같은 새로운 이미지를 생성하는 기술이다.

 


2. what are deep convNets learning?

convNet의 각 layer에서 어떠한 특징을 포착하는지 알아보자.

아래 예시에서 각 layer에서 hidden unit를 maximize하는 patch를 시각화해 볼 것이다.

 

coursear - Andrew Ng

시각화 한 각각의 layer는 다음과 같다.

 

아래 사진을 보면 알겠지만, layer가 깊어질수록 각 hidden unit를 maximize하는 patch가 복잡해진다.

 

coursear - Andrew Ng

 

 

coursear - Andrew Ng

 

 

coursear - Andrew Ng

 

 

coursear - Andrew Ng

 

 

coursear - Andrew Ng

 

 


3. cost function

Neural Style Transfer에서의 cost function

 

$$ J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) $$

  • C - content image
  • G - generated image
  • S - style image
  • J(G) = alpha*content_loss + beta*style_loss
    • 아래에서 content loss, style loss에 대해서 다룰 예정이다.

 

 

generated image는 어떻게 만들어지는가?

  1. random하게 G를 초기화한다.
  2. J(G) = alpha*content_loss + beta*style_loss를 이용하여 각 pixel을 update한다.
    1. $$ G := G - \alpha \frac{\partial J(G)}{\partial G} $$

 


4. content cost

$$ J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) $$

  • content loss를 계산하기 위해 l번째 layer의 activation 값을 이용한다.
    • l은 전체 convNet의 중간 정도에 위치한 레이어를 의미한다.
    • 작은 l을 사용하면 content image와 generated image의 간단한 특징이 유사한지를 측정
    • 큰 l을 사용하면 content image와 generated image의 복잡한 특징이 유사한지를 측정
  • 여기서 모델은 pre-trained된 convNet을 사용한다.
  • content image를 pre-trained 모델에 넣었을 때 l번째 layer의 activation을 -> a^[l](C)
  • generated image를 pre-trained 모델에 넣었을 때 l번째 layer의 activation을 -> a^[l](G)
  • a^[l](C), a^[l](G)가 유사할수록 content cost는 줄어든다.

$$ J_{content}(C, G) = \frac{1}{2}||a^{[l](C)}-a^{[l](G)}||^2 $$


5. style cost

 

  • style loss를 계산하기 위해 l번째 layer의 activation 값을 이용한다.
  • 하지만 content loss와는 다르게 channel간의 correlation을 측정한다.
    • channel간의 correlation은 각 style이 얼마나 자주/드물게 같이 발생하는지를 측정하기 위한 것이다.
    • ex1) corr(nth_channel, mth_channel)이 크다면
      nth channel을 activate하는 특징과 mth chaneel을 activate하는 특징이 동시에 나타나는 경우가 많다는 의미
  • a^[l]_i, j, k : l번째 layer의 activation의 (i, j, k) = (H, W, C)

$$ G^{[l](S)}_{kk'} = \sum_{i=1}^{n^{[l]}_{H}} \sum_{j=1}^{n^{[l]}_{W}} a^{[l](S)}_{ijk} a^{[l](S)}_{ijk'} $$

$$ G^{[l](G)}_{kk'} = \sum_{i=1}^{n^{[l]}_{H}} \sum_{j=1}^{n^{[l]}_{W}} a^{[l](G)}_{ijk} a^{[l](G)}_{ijk'} $$

 

$$ J^{[l]}_{style}(S, G) = \frac{1}{(2*n^{[l]}_{H}*n^{[l]}_{W}*n^{[l]}_{C})^2} ||G^{[l](S)}-G^{[l](G)}||^2 $$

$$ = \frac{1}{(2*n^{[l]}_{H}*n^{[l]}_{W}*n^{[l]}_{C})^2} \sum_{k} \sum_{k'}(G^{[l](S)}_{kk'}-G^{[l](G)}_{kk'})^2 $$

 

최종적인 style loss

$$ J_{style}(S, G) = \sum_{l} \lambda^{[l]} J^{[l]}_{style}(S, G) $$

 


$$ J(G) = \alpha J_{content}(C, G) + \beta J_{style}(S, G) $$

$$ J_{content}(C, G) = \frac{1}{2}||a^{[l](C)}-a^{[l](G)}||^2 $$$$ J_{style}(S, G) = \sum_{l} \lambda^{[l]} J^{[l]}_{style}(S, G) $$

'🙂 > Coursera_DL' 카테고리의 다른 글

WEEK7 : RNN  (0) 2020.12.25
WEEK7 : convNet in 1D, 2D, 3D  (0) 2020.12.25
WEEK7 : face recognition  (0) 2020.12.24
WEEK6 : Object Detection (2)  (0) 2020.12.23
WEEK6 : Object Detection (1)  (0) 2020.12.23

+ Recent posts