해당 글은 CS231n 12강 Visualization and Understanding 의 내용을 공부하고 재구성하여 정리한 글입니다.

Visualization and Understanding (1)Visualization and Understanding (2) 와 이어지는 글 입니다!


시각화로 재밌는 실험해보기

앞선 내용들을 바탕으로 재밌는 일들을 할 수 있습니다!

 

Deep Dream

Deep Dream이라는 주제인데, 이 이름이 왜 이렇게 붙게 되었는지를 살펴봅시다.

이것을 하기 위해 이미지를 네트워크 중간까지 통과시켰다가 Back Propagation을 하며 이미지를 업데이트 합니다.

이것을 통해 네트워크가 이 장면에서 무엇을 찾고 있는지를 알 수 있습니다.

예를들어서 위쪽 사진들을 보면 무엇이 보이나요?

저는 산, 나무, 그리고 정체모를 식물이 하나 보입니다.

 

그렇다면 이 네트워크는 이 사진을 보고 무엇을 생각하고 있었을까요?

이 네트워크는 첫번째는 타워, 두번째는 빌딩, 세번째는 새를 찾았다고 합니다.

이는 학습시킨 데이터와 관계가 있는데,

만약 이 네트워크에게 타워나 빌딩사진이 아닌 샤프나 볼펜사진을 학습시켰다면

이 사진에서 볼펜을 볼 수도 있었을 것 같습니다.

 

해당 레이어의 특징벡터로부터 이미지를 업데이트 해보면,

이미지의 어떤 정보가 특징벡터에서 포착되는지를 짐작할 수 있습니다.

그래서 이 Deep Dream이라는 이름이 사람이 착시현상을 일으키는 것과 비슷하다고 하여 붙은 이름이라고 합니다.

(즉 네트워크가 의도된 이미지의 형태만 과장하고 그 외의 요소는 무시해서 이미지를 왜곡시킵니다.)

 

Feature Inversion

Feature Inversion은 말 그대로 나온 Feature들을 Inversion해서 다시 원상복구 시켜보는 건데요,

그동안은 저희가 원본 이미지에서 어떻게 Feature를 뽑아내는가에 관심을 가졌었는데,

이것은 Feature에서 원본이미지들을 다시 생성해 본 결과입니다.

가령 저 왼쪽의 원본사진들을 VGG16네트워크의 각 레이어들을 거쳐서

나온 특징 벡터를 가지고 다시 이미지를 재구성해보면 다음과 같은 이미지들을 볼 수 있는데요,

 

앞쪽의 부분들은 원본 이미지의 느낌이 아직 잘 살아 있습니다.

근데 그것에 비해서 뒷부분은 디테일들이 많이 손실되어 있음을 볼 수 있습니다.

이로 알 수 있는 점은, 뒤쪽 네트워크로 갈 수록 픽셀값이 정확히 얼마인지와 같은 정보들 보다,

색이나 텍스쳐 같은 더욱 강인한 의미론적 정보들만 유지하려고 한다는 점입니다.

 

수식을 보면 어떻게 Feature Map으로 부터 이미지를 복원시키는 지가 나와있습니다.

일단 이미지는 화이트 노이즈로 부터 시작하고,

Φ(x)는 그때부터 Generate된 피쳐맵, Φ_0는 Original Image의 피쳐맵입니다.

여기 l이라는 함수는 밑쪽 수식에 정의되어 있는데, mean squared error를 뜻합니다.

이때 이게 최소가 되는 x를 구하게 됩니다. x는 이미지 입니다.

 

Texture Syntehsis : Nearest Neighbor

다음으로는 Texture Synthesis를 설명해 드리겠습니다.

사실 이 텍스쳐 합성은 신경망 없이도 가능합니다.

간단한 텍스쳐 합성 같은 경우에는 고전적인 방법들이 넘쳐납니다.

예를들면 Nearest Neighbor과 같은 방법들이 있습니다.

하지만 복잡한 텍스쳐에서는 조금 다릅니다. 복사같은 간단한 방법으로는 어림도 없죠.

 

Texture Synthesis : Gram Matrix

그래서 저희는 여기에 딥러닝을 적용할 것인데, Gram Matrix를 사용하게 됩니다.

서로 다른 Feature들끼리의 correlation으로 정의합니다.

사진을 네트워크에 통과시킨 후에, 네트워크의 특정 레이어에서 맵을 가져오면

다음과 같이 C*H*W일겁니다. H*W는 공간 정보를 가지고 있습니다.

H*W 한 점에 있는 C차원 특징 벡터는 해당 지점에 존재하는 이미지의 특징을 담고 있다고 할 수 있고,

서로 다른 특징 벡터를 뽑아서 외적을 하여 C*C Maxrix를 만드는데,

서로 다른 두 지점에 있는 특징들 간 co-occurence를 담고 있습니다.

이 과정을 H*W에서 전부 수행해주고 결과에 대한 평균을 계산하면 C*C Gram Matrix를 얻을 수 있다고 합니다.

 

선택한 레이어에 대해서 Gram Matrix를 구하고 이것을 저희가 만드려는 Traget의 Gram Matrix와 비교를 합니다.

여기서 나온 Gram Matrix값 간에 L2 distance의 합을 구한뒤, 이를 통해서 Loss값을 구하고

Backpropagation을 통해 생성된 이미지 픽셀의 그레디언트를 계산합니다.

그리고 Gradient Ascent를 통해서 이미지의 픽셀을 조금씩 업데이트 하게 됩니다.

오른쪽 밑에 그림은 레이어별로 Gram matrix를 구해서 재 생성해낸 Texture 입니다.

 

Style Transfer

마지막으로 설명하게 될 것은 위 두가지 질문으로 시작을 하게 됩니다.

이것에 대한 해답 중 하나가 바로 Style Transfer 모델입니다.

 

Style Trasnfer 논문은 사람이 예술 행위를 할 때

그림의 Style과 Content 사이에 어떤 신경망의 상호작용을 Neural Network로 설명하는 논문입니다.

Deep Learning과 인간의 생물학적 비전(Vision)과 많이 유사하기에 그대로 구현해 놨더니

인간의 예술행위를 할 수 있게 되었다 라는 것이 이 논문의 시작점이라고 합니다.

 

이 Style Transfer논문은

- CNN이 그림의 Style을 어떻게 추출해 내며,

- Content가 CNN을 지나치면서 어떤 Feature들이 남아있는가

를 보여준다는 것에서 이번 Visualization and Understanding 주제에 맞는 배울점이 많은 모델입니다.

 

 

일단 Style Transfer은 사람의 예술적 행위를 알고리즘 화 한 모델입니다.

그리고 많이 들어보셨을 내용이기도 합니다. 이론적인 내용은 위와 같습니다.

 

어떻게 동작하는지를 살펴봅시다.

지금부터 Style과 Content가 CNN 내부에서 어떻게 변화하는지를 관찰해 봅시다.

Style은 앞서 Gram Matrix때 보았던 것 처럼 Style에서 Texture들을 뽑아내게 됩니다.

Content는 Feature Inversion때 보았던 것 처럼 네트워크를 거쳐서 나온 Feature들을 재구성 하여

디테일한 정보가 줄어들은 Content 사진도 뽑아냅니다.

 

저희의 목표는 이 Content 이미지와 Output이미지의 Loss를 줄임과 동시에 Style에 대한 Loss도 줄이고 싶습니다.

따라서 Output 이미지에 대한 Loss Function은 두 Loss를 합해서 구해주게 됩니다.

 

여기 α와 β를 사용해서 Style과 Content의 정도를 조절할 수 있고

이 식에 새로운 스타일의 이미지 Term을 추가해 여러 Style을 혼합할 수도 있다고 합니다.

이러한 Style Transfer의 단점은 많은 Forward/Backward pass를 해야 해서 많이 느리다고 합니다!

 


조금이나마 CNN의 내부가 잘 이해가 가셨기를 바라면서

이상으로 글을 마치겠습니다!

읽어주셔서 감사합니다:D

 

발표슬라이드의 전체적인 내용은 다음과 같습니다!

 

+ Recent posts