본문 바로가기

DeepLearning Specialization(Andrew Ng)/Convolutional Neural Networks

[Week 4] 2. Neural Style Transfer

728x90
Neural Style Transfer
1. What is neural style transfer?
2. What are deep ConvNets learning?
3. Cost Function
4. Content Cost Function
5. Style Cost Function
6. 1D and 3D generalizations

1. What is neural style transfer?

요로코롬 Content(C)를 넣었을 때, Style(S)에 맞게 Generated image(G)로 바꾸는 것.

 

참고.

www.popit.kr/neural-style-transfer-%EB%94%B0%EB%9D%BC%ED%95%98%EA%B8%B0/

 

Neural Style Transfer 따라하기 | Popit

Style Transfer를 해야 할 일이 생겨서 관련 자료를 정리하고, 주요 논문은 가능하면 직접 코딩하거나 이미 짜여진 코드를 분석하기로 마음 먹었다. 따라갈 로드맵은 Lunit Tech Blog의 Style Transfer을 참

www.popit.kr

kyounju.tistory.com/3

 

Artistic Style Transfer이해하기 (2020.09.06수정)

1. INTRO 졸업작품으로 썼던 모델이다. 구현하는 데 고생했다. 이름(Transfer)처럼 단순히 그림의 패턴을 전달해 주는 모델로 학습모델은 아니다. 학습되는 것으로 바꾸는데 지식도 모자르고 코팅실

kyounju.tistory.com


2. What are deep ConvNets learning?

  •  특정 layer의 특정 unit의 역할(?)을 알기 위해 그 유닛 값을 최대화 시키는 9개의 image patch를 찾고 위와 같이 만든다. 같은 과정을 다른 unit에 반복한다. 위 사진은 9개의 unit에 대해 실행한 것.
  • image patch는 특정 한 image에서 뽑은게 아니라 수많은 사진의 image patch 중에서 뭐가 unit의 activation을 최대화하는지 찾은 것. 

cf) 9개는 그냥 임의의 숫자인듯. 16개도 되고, 25개의 image patch를 결합시켜 봐도 됨. 이 모든건 특정 unit이 어떤 역할을 하는지 시각화하기 위함. 

 

  • Conv 연산의 특성상, 부분을 unit으로 추출하고 그 unit들을 부분적으로 모아서 또 unit을 만드는 구조이다. 따라서 뒤로 갈 수록 좀 더 복잡하고 많은 부분을 볼 수 있게 된다. 

3. Cost Function

- 전체 ConvNet의 특정 layer 에서 C와 G 그리고 S와 G의 차이를 cost로 정의하고 위와 같이 더하여 총 cost를 정의함.

- 위와 같이 Cost function을 정의했다면, G를 랜덤하게 초기화하여 그것으로 J(G)를 구하고 G를 계속해서 update한다. 


4. Content Cost Function

  • 먼저 Content Cost Function에 대해서 알아보자.
  • 앞서 언급했듯이 pre-trained ConvNet을 하나 가져와서, C와 G를 ConvNet에 input 시킨다. 
  • 특정 layer에서 C와 G의 activation 값을 비교하고, cost는 위와 같이 L2 값으로 한다. 
  • 깊은 layer의 feature map을 이용하므로 C와 G가 실제로 어떤 content 를 가지고 있는지 비교할 수 있다(낮은 layer로 한다면 해당 feature map은 아주 단순한 선 정도의 정보밖에 포함하지 않아 비교하는 것이 무의미할 수 있다. 물론 같은 conv net을 이용해야 특정 요소에 특정 정보가 담길 수 있으므로 비교하는게 유의미하겠지. 

cf) feature map 이란 특정 측에서의 activation값이다. 이 feature map의 각 요소요소는 h w c 가 바뀌면서 픽셀 수준의 정보는 사라지지만 semantic 정보는 유지된다. 즉, 해당 이미지의 '특성'에 대한 정보를 가지고 있는데 layer가 깊어질수록 각 요소는 더 복잡한 패턴에 대한 feature 정보를 보유한다(얕은 layer는 세로선, 가로선 등 선 정도의 정보라면 깊은 layer의 요소는 강아지, 고양이, 특정 패턴 등 복잡한 패턴에 대해 반응한다).


5. Style Cost Function

  • Content Cost와 마찬가지로 우선 특정 층을 골라서 cost를 구한다. 단, content cost와는 다르게 가중치를 부여하여 모든 층에 대해 style cost를 구하여 합한 것을 최종 style cost로 활용한다.

  • 여기서 style이란 추상적인 개념을 어떻게 수치화할 것이냐가 문제가 된다. 
  • 기본적인 개념은 특정 layer에서 channel 간의 correlation 정도를 수치화한 것을 특정 image의 style로 정의한다. 
  • 위의 사진에서 교수님은 첫번째 channel이 세로빗살무늬를, 두번째 channel이 옅은 주황색 배경을 감지한다고 예를 들었다. 

  • 이 때 등장하는 것이 Gram Matrix 이다. 
  • Gram Matrix 는 위와 같이 특정 image에 대한 특정 layer의 activation 값이 channel 간에 얼마나 상관성이 있는지를 측정하여 행렬화한 것이다.
  • 즉, 위의 식을 살펴보면 알 수 있듯이 layer l 에서 k channel과 k' channel 을 activation 값들을 다 곱해서 더한 값이 G[l] 에서 (k, k')의 요소값이 된다. 
  • 이게 왜 image의 style을 나타내는 행렬인가가 제일 궁금할 것이다. 그 이유는 식의 특성을 보면 알 수 있다. G는 마치 공분산 행렬처럼 같은 위치에 대응하는 activation 값들이 곱해져서 더해지고 그것들이 각각의 요소를 이룬다. 즉, G를 공분산행렬이라고 이해하면 쉽다(물론 공분산행렬의 경우 평균을 빼고 시작하지만). 
  • 다시 Style 의 정의로 돌아가자면, Style Matrix 는 feature map에서 channel간의 상관관계를 수치화하여 Gram matrix로 나타낸 것을 의미한다. 곱씹어 생각해보면, 우리가 생각하는 style 또한 이 정의에 부합한다고 할 수 있다. 예를 들어, 어떤 그림에서 A(빗살무늬)라는 feature와 B(옅은 주황색)이라는 feature가 같이 등장하거나 혹은 같이 등장하지 않는다면 그것이 그 그림의 화풍이자 Style 이 되는 것이다. 

cf) 공분산을 구할 때처럼 X, Y(여기서는 channel 별 activation) 에 각각의 평균을 안빼는데 어떻게 공분산행렬과 비슷하게 취급할 수 있느냐라는 의문점이 생길 수 있다. 생각해보건데, Conv net에서는 normalization 과정이 포함이 되고 있고, 그렇지 않더라도 G가 어느정도 channel 간의 상관관계를 나타냄은 자명하다. 즉, G의 값이 크다면 그건 두 channel이 강한 상관관계를 가지며 G의 값이 작다면 두 channel이 약한 상관관계를 가진다고 이해할 수 있다.

 

 

공분산과 상관계수의 개념을 참고하면 좋을 듯하다. 

destrudo.tistory.com/15

 

공분산(Covariance)과 상관계수(Correlation)

확률변수X가 있을때 우리가 흔히 이 분포를 나타낼때 쓰는것이 첫번째로 평균이고 두번째로 분산이다. 평균으로써 분포의 중간부분을 알아내고 분산으로써 분포가 얼마나 퍼져있는지 알아낸다

destrudo.tistory.com

  • 앞서 언급했듯이 Content Cost 와는 다르게 S와 G에 대한 모든 층의 Gram matrix를 구해서 Frobenius norm 을 취해주고 각각에 가중치를 곱해줘서 총 Style Cost 를 구한다. 이를 통해 입맛에 맞게 모든 층을 고려할 수 있다. 얕은 층, 깊은 층 모두 한쪽이 중요하다 할 수는 없기 때문이다. 단지 얕은 층은 픽셀수준의 feature, 깊은 층은 복잡한 패턴에 대한 feature map 을 가질 뿐이다.   

6. 1D and 3D Generalizations

  • 지금까지는 2D 이미지에 대해서만 Conv Net을 수행해보았다. 
  • 그러나 1D, 3D에서도 Conv Net 을 수행할 수 있다. 방식은 같다. 위는 1D image인 경우의 예.

  • 3D의 경우 CT 사진이 예가 될 수 있다. 흑백이므로 nw x nh x (slice 의 수) x nc(=1) 이 3D input image라고 할 수 있다.

  • 마찬가지로 nc 는 같게 유지되어야 함.
  • 연산은 뭐 똑같다. input image가 컬러라면 nc 가 3일 수도 있겠지?

 

 

비판과 질문은 언제나 환영입니다. 많이 꾸짖어주세요. 

 

728x90