CNN 시각화 : 피처맵 (1)

가끔 수업을 들으러 오는 수강생들로부터
파이쿵 블로그에 대한 얘기를 듣는다.
아직 내공이 깊지 않아
기본적인 것들에 대해서만 게시하고 있을 뿐인데
자주 방문했고 도움이 되었다고 한다.

과거에 수업했던 자료들을 모두 올려놓긴 했지만
최근 자료들은 괜히 부담스러워서 수업에서만 사용하고 있었는데
수강생들의 얘기를 듣다 보니
대단하지 않아도 많은 분들에게 보여드려야 하겠다는 압박을 은연 중에 받았다.

"케라스 창시자"라는 도서에 딥러닝 관련 좋은 예제들이 많다.
최근에 나온 책이라 모두 잘 동작하고
박해선님께서 번역해서 번역도 깔끔하지만
도서 하단의 역자 주가 아주 매력적인 책이다.
최근의 수업에서는 이 책에 나오는 내용 일부를 수정해서 진행한다.
수업을 진행하면서
이 책에서 발췌했다고 하고
괜히 무안해서 내 식대로 많이(?) 수정해서 사용한다고 얘기한다.



앞에 있는 사진이 딥러닝 기초를 수업할 때 가장 중요하게 생각하는 사진이다.
이 사진 한 장이면 딥러닝이 무엇인지 알 수 있다고 수업을 한다.

사진을 보면 레이어가 뒤쪽으로 넘어가면서
모양이 선명하지 않고 뭉개지는 것을 볼 수 있다.
이게 사람이 사물을 기억하는 방식이다.
앞에서는 선명하게 기억하려고 노력하겠지만
결국에는 사물에 대한 흐릿하게 기억할 수밖에 없다는 것을 보여준다.

멀리서 엄마가 걸어오고 있다고 판단했지만
가까이 와서 보니 엄마가 아니었다.
이게 CNN이다.
레이어 후반에 있는 흐릿한 이미지가 될 수 있는 사진은 매우 많다.
선명한 사진을 압축하는 과정에서 동일한 이미지처럼 보여지는 것이다.

CNN 아키텍처에서는 일반적으로 풀링(pooling)을 거치게 되면
가로와 세로 크기가 절반으로 줄어든다.
여기서 절반으로 줄어든다는 것은 필터 슬라이딩의 결과물인 피처 맵(feature map, activation map)이다.
따라서 앞의 사진에서 주의해야 할 점은 
레이어 뒤쪽으로 갈수록 크기가 줄어들고 있다는 점이다.
다만 보기 좋게 출력하기 위해 모두 같은 크기로 했지만
실제로는 풀링을 거칠수록 줄어들기 때문에 픽셀이 거칠게 표시되는 것이다.
대신 채널(channel, 두께)의 깊이가 깊어진다.
다만 이 사진에서는 특정 피처맵 하나만 출력해야 하기 때문에 채널을 표시할 수는 없다.

참.. 앞의 사진이 피처맵을 보여준다는 것은 알고 있겠지?
설마..

CNN 아키텍처에서 이미지로 표현할 수 있는 데이터에 어떤 것이 있을까?
가중치로 표현되는 필터와 필터의 결과물인 피처맵밖에 없다.
피처맵은 컨볼루션과 풀링 레이어의 결과물이고
첫 번째 입력인 원본 사진과 달리
RGB 컴포넌트로 구성된 것이 아니라서 색상을 입힐 수가 없다.
16개의 필터를 사용했다면 채널 16개인 피처맵이 만들어지고
그중에서 1개의 피처맵만 표시하게 된다.

사진 또는 이미지라고 불리는 것은
픽셀이라는 형태로 표현되는 데이터이긴 하지만
인접한 데이터(픽셀)는 연관성이 깊을 수밖에 없고
이것을 상관관계가 강하다고 한다.
내 친구가 검정이라면 나 또한 검정일 확률이 높다는 뜻이다.
피처맵이 이미지는 아니지만
이미지로 표시할 수 있는 데이터의 범위로 스케일링한다면
각각의 픽셀(데이터)이 갖는 상관관계를 시각적으로 볼 수 있게 된다.

실제로 표시를 해보면
앞의 사진에서 보는 것처럼
완전 엉뚱한 형태의 이미지가 나타나지 않는다는 것을 알 수 있다.
원본 사진을 한 번 필터링했다고 해서
자동차가 알 수 없는 무언가로 변하지는 않는다.

간단하게 코드만 올리려고 했는데
강사의 직업병으로 인해 설명이 길어졌다.
코드는 다음 글에서 따로 게시한다.

'케라스' 카테고리의 다른 글

CNN 시각화 : 피처맵 (3)  (0) 2019.07.15
CNN 시각화 : 피처맵 (2)  (0) 2019.07.15