CNN은 non-linear activation function이 이어진 연산기
하지만 black box라고 불릴만큼 해석이 어려움
CNN을 시각화 한다는 것은 디버깅 도구를 갖는다는 것과 같은 의미
안에 뭐가 들어있고, 왜 좋은 성능이 나오고, 어떻게 개선할지를 알 수 있음
CNN layer들이 각 위치에 따라 어떤 지식을 습득하는지 deconvolution으로 시각화
낮은 단계에서는 edge나 block을 익히고, 높은 단계에서는 구체적인 정보를 익힘
ImageNet 2013에서 우승
Filter visualization으로 CNN의 첫 layer가 어떤 특징에 집중하는지 알 수 있음
Low level feature는 시각화 할 수 있지만 그 이상 올라가면 channel 수가 커져서 visualization이 불가
예제 영상을 통해 visualize 하는 방법
DB에는 분석을 위한 예제 dataset이 존재
Query image와 유사한 이웃 영상들을 DB에서 찾아 거리순으로 정렬
의미론적으로 유사한 영상들이 cluster 되어있음
하지만 검색된 예제를 통해서 분석하는 방법은 전체적인 그림을 파악하기 어려운 단점이 존재
NN에서 마지막 fc layer를 제거해 input image의 feature vector를 추출할 수 있게 만듬
DB의 모든 image들을 feature vector를 추출해 다시 DB에 저장
Backbone network을 활용해서 특징을 추출하게 되면 고차원 특징 벡터가 나오게 되는데 이것이 너무 고차원이라 해석하기 힘든 문제가 있다
이런 문제를 해결하기 위해서 고차원 벡터를 저차원으로 내려서 표현하는 방법 즉, 차원 축소 방법을 통해서 눈으로 쉽게 확인 가능한 분포를 얻어내는 방법을 소개
t-SNE
: t-distributed stochastic neighbor embeddingLayer의 activation을 분석함으로써 모델의 특성을 파악하는 방법
위 첫번째 행은 AlexNet에서 Conv5 layer의 138번째 채널의 activation을 적당한 값으로 threshoding 후 마스크로 만들어서 영상에 overlay 한 결과
각 activation의 채널이 어디를 중점적으로 바라보고 있는지 파악할 수 있음
CNN은 중간의 hidden node들이 손, 얼굴 등 부분을 detect하는 것을 다층적으로 쌓아서 물체를 인식한다는 것을 알 수 있음
각 layer의 채널에서 하는 역할을 판단하기 위해서 그 hidden node에서 가장 높은 값을 갖는 위치의 patch를 출력
국부적 patch만을 보기 때문에 mid layer에 적합
새 class에서는 새 모습들이, 개 class에서는 개 모습이 추출되는 것을 확인 가능
개 class에서는 개 뿐만 아니라 인간의 모습도 출력되고 있음
--> 1. 이 모델은 개를 파악하기 위해 해당 물체만 찾는게 아니라 주변의 사람 같은 모습도 찾고 있다
--> 2. Dataset이 가족적인 사진으로 biased 돼있다
모델이 특정 입력을 어떤 각도로 해석하고 있는지 분석하는 방법
특정 영역을 occlusion 했을 때 전체 image를 정확한 class로 판별할 확률을 heatmap으로 만듬
진한 색일수록 class 검출에 중요한 영역이라는 것을 파악할 수 있음
특정 이미지를 classification을 해보고 최종 결론이 나온 class에 결정적으로 영향을 미친 부분이 어디인지 heatmap 형태로 나타내는 기법
관심 물체 영역에 밝은 값이 분포
일반적으로 CNN에서 ReLU를 이용하면 forward에서 음수인 부분은 0으로 masking됨
Zeiler는 deconvolution된 activation이 backward로 내려올 때 gradient 자체에 ReLU를 적용
: Convolution layer의 output인, convolution map(혹은 feature map)의 channel 수
: FC layer에서 class 에 해당하는 weight
class 에서 의 중요도를 나타냄
: conv map의 k번째 channel에서 (x, y)좌표 pixel의 값
: conv map의 k번째 channel의 모든 pixel을 GAP한 값(node)
: weight 와 feature 의 linear combination
class C에 대한 score
: (x, y) 좌표의 pixel의 class 에 대한 중요도
(input이 c로 분류되는데 해당 pixel이 얼마나 영향을 미치는지)
GAP을 적용하기 전이기 때문에 공간에 대한 정보(width , height )가 남아있음 --> image처럼 visualization이 가능
일부 model에서는 CAM을 사용하기 위해선 architecture를 바꾼 후 재학습을 해야된다는 점이 단점
--> 성능이 떨어지거나 parameter tuning이 다시 필요함
GoogLeNet 같은 경우는 마지막에 AveragePooling, FC layer가 있기 때문에 CAM을 적용하기 쉬움
참고: https://mole-starseeker.tistory.com/m/66?category=859657
https://kangbk0120.github.io/articles/2018-02/cam
--> 코드도 있음!
Pre-trained network를 변경하지 않고 사용할 수 있음
Model을 변경할 필요가 없기 때문에 image task에만 국한되지 않고 backbone이 CNN이기만 하면 사용 가능
CNN backbone 외엔 별다른 요구사항이 없기 때문에 classification, RNN 등 여러 task에 적용할 수 있는 일반화된 도구
Grad-CAM은 rough, smooth, class에 민감하고 Guided Backprop은 sharp, sensitive, high frequency하기 때문에 둘의 결과를 곱해서 특정 class에 대한 texture만 알아낼 수 있음
(1) 왜 filter visualization에서 주로 첫번째 convolutional layer를 목표로할까요?
(2) Occlusion map에서 heatmap이 의미하는 바가 무엇인가요?
(3) Grad-CAM에서 linear combination의 결과를 ReLU layer를 거치는 이유가 무엇인가요?