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
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이 약한 상관관계를 가진다고 이해할 수 있다.
공분산과 상관계수의 개념을 참고하면 좋을 듯하다.
공분산(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일 수도 있겠지?
비판과 질문은 언제나 환영입니다. 많이 꾸짖어주세요.
'DeepLearning Specialization(Andrew Ng) > Convolutional Neural Networks' 카테고리의 다른 글
[Week 4] Quiz & Programming Assignments (0) | 2020.11.30 |
---|---|
[Week 4] 1. Face recognition (0) | 2020.11.14 |
[Week 3] Quiz & Programming Assignments (0) | 2020.11.13 |
[Week 3] 1. Detection Algorithm (0) | 2020.11.12 |
[Week 2] Programming assignments (0) | 2020.11.09 |