A Neural Algorithm of Artistic Style 논문 정리

Hα ყҽσɳɠ·2020년 3월 3일
0

DeepLearning

목록 보기
1/17
post-thumbnail
post-custom-banner

피피티를 옮겨놓고 재정리를 하다만 포스트... 추후 수정 예정입니당 ㅎ0ㅎ


Introduction

이번 겨울방학에 PyTorch 스터디를 하게 되었다. 해당 스터디는 랩실원들이 순서를 정해, 파이토치 튜토리얼의 주제를 맡아 발표하는 형태로 진행되고 있다. 내가 맡게 된 부분은 튜토리얼의 Image 분야에 해당하는 내용이었다. 이미지와 같은 경우, CNN과 비슷할 것이라 여겨 처음엔 간단한 내용이라 생각했는데, 생각보다 수식을 이해하는데 시간이 걸렸던 주제였다. 무엇보다 다른 사람들이 질문할 만한 요소들을 추려보았을 때, 나도 뚜렷하게 이해하지 못하고 있는 것 같아 관련 논문을 찾아 공부를 해보았다. 내가 참고한 논문은 A Nural Algorithm of artistic Style (2015. 08)이다.

neural-transfer-00

What is Neural-style Transfer?

neural-transfer-01

  • 먼저, Neural-style Transfer를 간단하게 설명하면, Content image와 Style image가 주어졌을 때, 윤곽과 형태는 Content image와 유사하게 보존하면서 텍스쳐나 스타일만 원하는 Style image와 유사하게 바꾸는 것을 의미한다.

Example of Neural style

neural-transfer-02

Underlying Principle

How it works?

neural-transfer-03

  • 2개의 거리 (distance) 정의 --> Dc, Ds

  • Dc: measures how different the content is between two images

  • Ds: measures how different the style is between two images

  • 입력의 세번째 이미지(ex. Noise로 구성된 이미지)를 가져와 content image와 style image와의 Dc와 Ds를 최소화 하도록 변환한다.

Algorithm Concept

algoritm-concept0

Optimization Problem

optimization-problem

CNN model: VGG19

vgg19

  • imgeNet db의 1백만 개가 넘는 이미지에 대해 훈련된 cnn

  • 16개의 convolution layer, 5개의 pooling layer, 3개의 fully connected layer로 구성됨

  • 해당 논문에서는 fully connected layer를 사용하지 않았다.

  • max pooling이 아닌 average pooling을 사용했다.

    ( --> max보다 average pooling 사용 시, 학습이 더 잘되어서 사용한 것으로 보인다)

CNN model: feature extraction

cnn_model

  • CNN의 convolution layer별로 이미지가 어떻게 변화되어 가는지를 시각화하고 있다.

    content image(우측 하단 image) 의 경우, layer가 깊어 질수록 원본 대비 detail한 pixel information은 소실되지만 high-level image, 즉 전체적인 윤곽인 건물의 모습은 유지된다.

    style image(우측 상단 Image)의 경우, layer가 깊어 질수록 style image 원본에 가까워지게 된다.

    이러한 현상이 발생하는 이유는 같은 layer의 feature map의 channel간 correlation(Gram Matrix)으로 정의하였기 때문이라고 한다.

CNN model: Content feature

content_feature

  • 입력 이미지 p와 Conv. 레이어 l에 대해, 위와 같이 feature map, F를 추출할 수 있다.
  • 레이어가 깊어질수록 픽셀 수준의 정보는 사라지지만, 입력 이미지가 가진 semantic 정보(강 역의 집들)는 그대로 유지된다. 반면 낮은 레이어의 경우에는 입력 이미지와 거의 동일하다. 따라서 깊은 레이어에서 content feature를 추출한다.

CNN model: Content feature

style_feature

Algorithm

algorithm

  • Content image p, style image a에 대해 합성할 이미지인 x를 noise image로 초기화한다.

  • 각 이미지 p, a, x를 ImageNet pretrained VGG19에 foward pass 수행한다.

  • 이미지 p와 x에 대해서 content feature 기반의 content loss 계산한다.

  • 이미지 a와 x에 대해서 style feature 기반의 style loss 계산한다.

  • Content loss와 style loss를 합해 total loss 계산한다.

  • Total loss를 back propagation해서 noise image x를 업데이트 하게 된다. 여기서 네트워크 자체의 weight parameter는 업데이트 되지 않으며, 생성하려는 입력 이미지 x의 픽셀 값들만 업데이트 된다고 한다.

Content loss

  • Content image P에 대해

    • Content image p를 네트워크에 feed forward

    • Content image p를 입력으로 feature map들이 계산된 네트워크에서 레이어 l의 feature map을 P

      content_loss_0

  • Generated image x에 대해

    • 합성될 영상 x를 네트워크에 feed forward

    • 합성될 영상 x를 입력으로 feature map들이 계산된 네트워크에서 레이어 l의 feature map을 F

      content_loss1

content_loss_2

Style loss

  • Style image a와 합성할 이미지 x 사이의 style loss

  • Style image a에 대해

    • Style image a를 네트워크에 feed forward

    • Style image a 에 대한 레이어 l에서의 Gram matrix A

      style_loss0

  • Generated image x에 대해

    • 합성될 영상 x를 네트워크에 feed forward

    • 합성될 영상 x에 대한 레이어 l에서의 gram matrix G

      style_loss1

style_loss2

style_loss3

Total loss

  • Total loss = Content loss + Style loss

    total_loss

  • Style loss에 가중치를 크게 주면 스타일 중심적인 이미지 x가 생성됨

  • Content lss에 가중치를 크게 주면 컨텐츠 중심적인 이미지 x가 생성됨

    result

profile
𝑯𝒐𝒏𝒆𝒔𝒕𝒚 𝑰𝒏𝒕𝒆𝒈𝒓𝒊𝒕𝒚 𝑬𝒙𝒄𝒆𝒍𝒍𝒆𝒏𝒄𝒆
post-custom-banner

0개의 댓글