CAM 관련 이전 블로그 글 : https://chang-aistory.tistory.com/34?category=933399
CAM의 한계점 :
Global Average Pooling Layer(GAP) 사용해야 하는 한계
→ GAP는 별도의 CNN구조라고 할 수 있으므로, 뒷부분의 CNN구조를 다시 fine tuning해야하는 문제
마지막 conv layer에 대해서만 CAM 추출 가능한 것이 한계
Grad CAM: Visual Explanations from Deep Networks via Gradient-based Localization
Abstract
CAM의 한계점을 Gradient로 해결
어떠한 목적을 위한 CNN일지라도 마지막 conv layer로 흐른 gradient로 이미지의 중요한 영역을 강조하는 localization map을 만든다 → 모델의 구조 변화 / 재학습 필요 x
Grad-CAM
FC 레이어에서는 공간적 정보의 손실이 일어나기 때문에 마지막 conv 레이어를 사용
마지막 conv 레이어는 이미지에서 클래스의 의미와 관련된 정보를 포함한다.
<notation 정의>
: u(width), v(height), class(C)에 대한 class-discrimitive-localization map
: softmax이전의 class c에 대한 score
첫번째로 conv레이어의 featurea map activations 에 대해 에 대한 gradient를 계산한다.
그리고 이 거꾸로 흘러간 gradient들은 width와 height 차원들(각각 i와 j로 인덱싱) 대해 GAP된다. → neuron importance weights인 를 구하기 위해
를 activation에 대해 gradient를 역전파하면서 계산하는 동안에, 정확한 계산은 gradient가 전파되는 최종 conv layer까지 활성화 함수에 대한 gradient와 weight matrices의 연속 행렬 곱(successive matrix products)에 해당한다.
: deep network의 partial linearization, featuremap k(채널)의 class C에 대한 중요도를 나타냄
: 마지막 CNN레이어 출력의 k번째 채널 featuremap
이것과 forward activation maps()의 weighted combination을 수행하고 ReLU를 수행해준다. ReLU는 class C에 긍정적 영향을 미치는 feature만을 확인하기 위해 사용된다.
(부정적인 영향을 끼치는 픽셀을 알아보기 우해서는 weighted combination에 -를 붙여서 ReLU를 수행하주면 되겠다.)
이것이 마지막 conv 레이어 통과한 피쳐맵의 사이즈와 같은 사이즈의 coarse heatmap을 결과로 만들어낸다는 것을 알아야 한다.
일반적으로 는 꼭 CNN에서 나온 score일 필요는 없다. 그것은 자막이나 질문에 대한 대답의 단어를 포함하여 어떤 구별 가능한 activation일 수 있다.
Grad-CAM은 CAM의 일반화이다
<CAM의 수식>
<GAP의 아웃풋>
<CAM이 최종 score를 계산하는 식>
이 때 는 k번째 featuremap과 class c를 잇는 weight
<class score 에 대한 featuremap 의 gradient>
Guided Grad-CAM
Grad-CAM은 이미지 픽셀 단위의 세밀한 요소들은 다루지 못한다.
Guided Grad CAM은 ReLU를 거쳐 backpropagation할 때 음의 gradient를 없애며 쉽게 시각화 한다.
Grad CAM의 다소 조잡한 히트맵을 보완해 직관적으로 중요한 픽셀을 알아보기 위함이다.
두 방법론의 장점을 결합하여 Guided backpropagation과 Grad-CAM을 element-wise 곱하여 시각화를 진행한다. 이 때 의 경우에는 2차원 선형보간법으로 인풋이미지와 같은 사이즈로 리사이즈 한다.