이 포스팅은 Computer Vision 시리즈 17 편 중 15 번째 글 입니다.

  • Part 1 - 01: 컴퓨터 비전 용어 정리
  • Part 2 - 02: R-CNN
  • Part 3 - 03: Spatial Pyramid Pooling Network
  • Part 4 - 04: Fast R-CNN
  • Part 5 - 05: Faster R-CNN
  • Part 6 - 06: Fully Convolutional Networks
  • Part 7 - 07: Learning Deconvolution Network for Semantic Segmentation
  • Part 8 - 08: Dilated Convolution
  • Part 9 - 09: Conditional Random Field(CRF)
  • Part 10 - 10: U-Net
  • Part 11 - 11: Inception
  • Part 12 - 12: Xception
  • Part 13 - 13: Deep Lab
  • Part 14 - 14: Mask R-CNN
  • Part 15 - This Post
  • Part 16 - 16: Single Shot Multibox Detector
  • Part 17 - 17: Deep Sort
▼ 목록 보기

목차

▼ 내리기

개요

style transfer에서는 input의 style을 target의 style과 맞게 만들어주는 방법이 필요한데, 이에 대한 방법론의 핵심을 담당하는 Gram Matrix에 대해 알아본다.

수식

먼저, 논문에서 제안하고 있는 Gram Matrix의 형태는 다음과 같다.

\[G^l_{cd} = \frac{\sum_{ij} F^l_{ijc}(x)F^l_{ijd}(x)}{IJ}\]

우리는 쉬운 이해를 위해서 채널, 정규화 과정을 제거한 채로 살펴보자.

\[G^l_{ij} = {\sum_{k} F^l_{ik}(x)F^l_{jk}(x)}\]
  • l : layer
  • F : Filter
  • i, j : Filter Index

수식으로 들어온다면 여기까지만 읽으면 된다.

의미

이미지 $\vec{x}$ 가 있다고 하자. 해당 벡터는 2차원 이미지가 있을 때, 이를 1차원으로 faltten 한 것이다. 이 이미지의 크기를 M=3이라 하자.

\[\vec{x}=[x_0, x_1, x_2]\]

각 이미지가 통과하는 필터(M=2)가 2개 있다고 하자. 해당 필터는 $F$로 표기한다. 각각의 filter에 image를 통과시킨 결과를 $\vec{F}$라 하자.

\[\mathbf{F} = \begin{bmatrix} F_1(x_0) & F_1(x_1) & F_1(x_2) \\ F_2(x_0) & F_2(x_1) & F_2(x_2) \end{bmatrix}\] \[F_{ik} = F_i(x_k)\]

$F_{ik}$는 $F_i$ 필터에 $x_k$ 픽셀을 넣었을 때의 activation(response)이다. 그렇다면 Gram Matrix의 의미가 무엇인지 알아보자. 일단

\[\begin{align} G^l_{ij} &= \sum_{\text{all term}} \begin{bmatrix} F_{00}F_{00} + F_{01}F_{01} + F_{11}F_{11} & F_{00}F_{10} + F_{01}F_{11} + F_{02}F_{12} \\ F_{10}F_{00} + F_{10}F_{01} + F_{12}F_{02} & F_{10}F_{10} + F_{11}F_{11} + F_{12}F_{12} \end{bmatrix} \\ &= \sum_{\text{all term}} \sum_k \begin{bmatrix} {F_{0k}}^2 & F_{0k}F_{1k} \\ F_{0k}F_{1k} & {F_{0k}}^2 \end{bmatrix} \end{align}\]

어디서 많이 본 모양이다. pixel별 filter activation의 Covariance이다! 결과적으로 발생하는 모든 항을 더하게되면 다음의 의미이다.

pixel의 filter activation들에 대한 covariance 모든 항의 합

이렇게 발생한 값을 가지고 input의 filter가 원하는 target filter의 gram matrix 값과 같도록 학습을 진행한다.

\[E_{l}= {1\over4{N_e}^2{M_e}^2}\sum_{ij}(G_{ij}^l - \hat{G_{ij}^l})^2\]

최종적으로는 밀도로 나누어서 사용해야 한다.

Reference