본문 바로가기
A.I/IMAGE PROCESSING

Artistic Style Transfer이해하기

by y.j 2019. 4. 5.
728x90

1. INTRO

졸업작품으로 썼던 모델이다. 구현하는 데 고생했다. 이름(Transfer)처럼 단순히 그림의 패턴을 전달해 주는 모델로 학습모델은 아니다. 학습되는 것으로 바꾸는데 지식도 모자르고 코팅실력도 모자라서 죽을뻔 했다. 나온지 한 5년 정도된 모델로 5년이면 이제 잊혀지지 않을까 했던 모델인데 게임이나 여러분야에 아직 응용되어 사용되고 있는 거 같다. 그래서 복습겸 다시 읽어보았다. 코드는 조금씩 다시 짜봐야겠다. 이해하기는 안 어려운데 이상하게 학습이 잘 안됬었는데, 학습말고 논문에 나온 그대로만 짜서 Git에 올려보아야겠다. 요즘 해커톤 대회 나가는데 Git아이디 적으라고 한다. 진작에 한 것들 조금씩 올려놓을 껄... 난 이 논문을 보면서 CNN이 내부에서 이런식으로 행동하는 구나를 눈으로 직접 확인 할 수 있어서 이해와 경험을 한 번에 할 수 있어서 좋았던거 같다.

2. IDEA

사람은 어떻게 예술을 할 수 있을까? 이 행위를 어떻게 알고리즘적으로 해석 할 수 있을까? 이 질문에 대한 해답 중 하나가 바로 이 모델이다. Cycle GAN도 있고 여러가지 있는거 같지만 처음으로 예술적 행위를 알고리즘화 한 모델이 아닐까 싶다. 이 논문은 사람의 예술 행위를 할 때 그림의 Style과 Content사이에 어떤 신경망(Complex)의 상호작용(interplay)하는 것을 Neural Network로 설명한다. ( through composing a complex interplay between the content and style of an image.) 현재 Machine Learning에서 많이 사용되고 있는 Deep Learning과 인간의 생물학적 비전(vision)과 많이 유사하기에 그대로 구현해봤더니 인간의 예술행위를 할 수 있게 되었다라는 게 이 논문의 시작점이다. (in light of the striking similarities between performance-optimised artificial neural networks and biological vision, ). 논문에 보면 Style과 Content사이의 matching에 대해서 설명할 때, 정확하게는 설명을 할 순없지만 CNN에서 어떻게 Style과 Content가 작동하는지를 보고 유추할 수 있다고 한다. 이 부분을 설명할 때, Indeed(아마도)로 시작하지만 역시 배울게 많다. 나같은 딥러닝 초보자에게는 이 모델의 구조를 이해하는 것보다 CNN이 그림의 Style을 어떻게 추출해 내며 Content가 CNN을 지나치면서 어떤 Feature들이 남아있는지를 보여준다는 것에서 더 배울점이 많다고 생각한다.

3. CNN안에서 Style과 Content의 Feature의 움직임 유추해보기!

CNN층 별 Content와 Style Feature 모습

Style은 그림을 의미하고 Content는 사진을 의미한다. 지금부터 Style과 Content가 CNN내부에서 어떻게 관찰되는지 확인해보자! 위의 그림을 이해하기 전에 Feature에 대한 정확한 이해가 필요하다. 물론 Feature에 대해서 원리와 과연 CNN에 어떤 값이 들어있는지에 대한 정확한 이해는 CNN이 아니라 딥러닝 이전에 Convolution filter에 대해 공부를 하여야한다. 이건 나중에 다시 한번 정리해서 포스팅 해놔야겠다. Feature란? 간단히 말해서 해당 이미지가 가지고 있는 고유한(별표 무한개~) 특성을 이야기한다. 사람을 예로 들면 TV프로그램에서 보면 요즘은 모자이크처리를 많이 하지만 어렸을 때는 검은색 가로로 긴 직사각형으로 눈을 가려놨었다. 실제로 어떤 사람인지 알아보기 어렵다! 바로 이 부분이 Feature이다. 사람을 구별하는데 중요시되는 고유 특성은 바로 눈인 것이다! 사람의 Feature를 추출해내어 DCNN해보면 실제로 T자라인과 얼굴형위주로 추출되어진다. 그렇다면 그림에서는 어떤 Feature를 추출해내며, Content에서는 어떤 Feature를 추출해낼까?

Style Representation

Representation이라는 용어는 각 층(Multi-scaled)에서 나오는 Feature map(실제로 Transfer에 사용될)들의 집합을 의미한다. 먼저 Style의 Feature부터 확인을 해보자! 앞쪽이 얕은(shallow)한 층이고 뒤쪽이 깊은(Deep) 층이다. 그러면 CNN에서 Feature를 추출해 내는 데 그림에게 있어서 Feature는 무엇일까? 결론부터 말하면 최종적인 산물(output)은 텍스쳐를 생산한다. 이 논문에서는 Style Represenation에서는 원래 그림의 전체적인 배열(global arrangement)은 점차 사라지고 반복되는(Texturised) 색감과 구조를 고유한 특성(Feature)을 추출한다는 것을 확인하였다.

Style Representation

진짜 이렇게 작용하는지는 결과를 보자! 위의 그림은 논문의 있는 Style의 Feature을 층별로 어떻게 나타나는지 보여준다. 얕은 층에서는 단조로운 패턴들의 반복하지만 깊은 층으로 갈수록 얕은 층에서의 Feature들이 더 복잡해지고 확대되어지고 있다. max pooling을 하다보면 이미지가 점점 더 작아지게 된다. 얕은 층에 있는 이미지에서는 서로 같은 Feature들도 여러번 담을 수 있지만, 더 작은 곳에 표현하려고 한다면 얕은 층에 비해 더 적은 양의 Feature들만 담기 때문에 일어나는 현상이다.

나는 예술적 감각이 없어서 이 작품을 보든 저 작품을 보든 똑같은데 아무래도 예술적 감각이 뛰어난 사람들은 저런식으로 작품을 보지 않을까 생각했다. 물론 인간의 신경은 Neural Net보다 더 복잡하기 때문에 더 다양하고 복잡하게 느낄것이다. 나중에는 어쩌면 정신질환 환자들이 세상을 어떻게 보고 느끼는지 일반인들도 같이 보고 느낄 수 있고 치료에도 쓰일 수 있지 않을까? 라는 생각을 해보았다.

Content Reresentation

Content Representation

이제 Content에서 Feature들이 어떻게 움직이는지 보아야한다. a,b,c를 보면 원래의 사진과 거의 다를바가 없다. 하지만 깊은 층에 있는 사진을 보면 일부분이 사라져있는데 Feature은 남겨지고 그 외의 다른 픽셀(detailed pixel)들은 제거가 되어간다. Content Representation은 당연하다고 여기는 것들이 대부분이여서 이해하는데 쉽지 않다. 위에서 사람을 비유했을 때처럼 CNN을 통과하면서 T자부위와 얼굴형에 Feature들이 남는 거처럼 Content이미지에서 해당 Object를 구별하기 위한 고유한(별표 무한개~)특징들만 남기고 나머지는 사라지게 된다. 결과를 보면 알수 있듯이 Content에서는 사물을 알아보기 위한 Feature들이 남게 된다.

따라서, 사진과 그림을 합칠 때 그림의 전체적인 배열(global arrangement)는 버려지고 반복되는 Featrue(or Texture)만 남게 된다. 반면에 Content에서는 Object를 확인할 수 있는 Feature들이 남기 때문에 Content의 전체적인 틀(global arrangement)에 그림의 Texture를 입힌 모습으로 생산될 수 있는 것이다.

4. Recontruction

이제 어떻게 이 2개(Style과 Content)의 Representation이 합쳐질 수 있을까? 이것도 흥미롭다. 훗. 이 Network로부터 생산된 결과물은 사진에 반복되는 그림 사진의 패턴을 입힌 것 (texturised versions of the input image) 이다.

층 별 / Parameter별 합성된 모습

위의 사진은 층별로 합성했을 때와 그리고 parameter별 합성했을 때의 모습을 나타낸 것이다. 열을 보면 Style Representation은 깊은 층으로 갈수록 더욱 복잡해지는 것을 확인 할 수 있다. Conv1_1를 보면 그림의 단조로운 패턴이 반복되는 반면에 Conv5_1은 더 다양해진다. 또, CNN을 지나면서 Content Representation의 Feature가 아닌 다른 픽셀들이 점차 사라지게 되면서 Style의 Representation이 좀 더 부각되는 것을 볼 수있다. 한 층을 Parameter별 어떻게 다른건지 비교해 놓고 있다. 일단 이 숫자(Content의 loss 가중치 / Style의 loss 가중치)는 나중에 나올 loss function에서 사용되는 Style과 Content중에 어느 것에 더 비중을 둘 것인가에 대한 Parameter이다. 숫자가 점점 더 커진다는 것은 Content의 loss의 가중치가 더 커진다는 말이므로 Content의 더 비중이 있음을 알려준다. 그래서 그림과 같이 점점 더 숫자가 커질수록 Content가 더 부각되는 것을 볼 수 있다.

결과적으로, Content에서는 전체적인 틀(Feature and global arragement)이 남게 되고 사라지는 픽셀에 Style Reparentation (Texture)가 씌어지는 결과로 이어진다.

5. Method & Structure

Neural Network

Artistic Style Transfer는 구조가 비교적 쉽다. VGG19가 나란히 2개로 되어 있는 모델이다. 각 층에서 나오는 합성된 이미지를 하나씩 선택한다. 그래서 얕은 층부터 깊은 층까지 있는 합성된 사진에서 관찰되는 이미지를 가지고 한개의 합성된 이미지를 만든다. 논문에서는 conv1_1, conv2_1, conv3_1, conv4_1, conv5_1의 사진을 사용하였으며 다른 위치에 있는 이미지를 사용하여도 상관없다.

그렇다면 loss fucntion은 어떻게 정의할 수 있을까? Loss Function은 Content의 Loss와 Style의 Loss의 합이다. 앞에 hyperparameter인 알파와 베타를 사용하여 어디에 더 중점을 둘지 선택 할 수 있다.

Loss Function

Content Loss function은 간단하다. x는 결과 이미지이고, p는 content이미지이다. F는 x를 통과시킨 l층에 있는 j위치에 있는 i번째 Feature map을 의미한다. P는 p를 통과시킨 l층 j위치에 있는 i번째 Feature map을 의미한다. Square Loss를 사용하여 단순히 Loss Function을 구성했다. 이 loss를 통해 x가 p로 수렴할 것임을 예측할 수 있다.

contentLoss

Style Loss function에서 새로운 개념인 Gram Matrix가 도입된다. Gram Matrix의 역할은 l층에 있는 Style Representation들의 서로 내적하여 하여 구한다. 즉, l층에 있는 모든 Style과 x사이의 Style Representation의 평균값을 구해 loss를 minimize해준다. wl은 어떤 층을 활성화 시킬것인지를 나타내주는 가중치이다. 위에서 말했듯이 여기서는 conv1_1, conv2_1, conv3_1, conv4_1, conv5_1만을 사용하였다. wl의 합은 항상 1이고, 각 층에 1/사용될 층의 개수(여기서는 5)만큼 주어진다.

Gram Matrix
Style Loss Function

Total은 위에서 보았듯이 Content Loss와 Style Loss합이고 이것을 minimize해준다. Total은 global minimum에 도달할지 몰라도 Content와 Style의 Loss는 어느 지점에서 합의를 보게 될 것이다.

Gram Matrix이해하기

Gram Matrix가 조금 애매했던게 수식에서 한가지를 생략했기 때문이다. 내 생각에는 수식이 아래처럼 바뀌어야 한다고 생각한다.
$$ G_{ij}^{l} = \sum_{k} F_{ik}^{l}(F_{jk}^{l})^{T} $$
수식을 보면 알겠지만 각 layer에 있는 rgb채널의 공분산을 이용하여 style representation을 레이블링으로 하여 학습시키는 것이다.

728x90

'A.I > IMAGE PROCESSING' 카테고리의 다른 글

Siamese Neural Networks for One-shot Image Recognition  (0) 2020.09.27

댓글