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를 시각화해 볼 것이다.
시각화 한 각각의 layer는 다음과 같다.
아래 사진을 보면 알겠지만, layer가 깊어질수록 각 hidden unit를 maximize하는 patch가 복잡해진다.
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는 어떻게 만들어지는가?
- random하게 G를 초기화한다.
- J(G) = alpha*content_loss + beta*style_loss를 이용하여 각 pixel을 update한다.
- $$ 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 |