석사 때 GradCAM을 이용하여 음향 장면 분류 모델에 대하여 각 class별 특징을 확인하고 논문으로 쓴 적이 있다.
이때도 작성해놓은 적이 있는데, 이번에 공부하면서 좀더 보충해서 작성하였다.
전에 작성했던 글!
[논문 리뷰] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
[논문 리뷰] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization 안녕하세요. 이번에 제가 읽은 논문은 Grad-CAM 기술을 소개한 논문입니다. 논문은 여기를 눌러 확인..
sotudy.tistory.com
CAM
Class Activation Map
- 이미지 분류 모델에서 이미지의 어느 부분을 보고 class를 예측했는지 시각화한다.
- CNN 모델 중 flatten layer 중 GAP(Global Average Pooling)이 사용된 모델에 사용한다.
* GAP: 마지막 feature map의 각 채널은 1개의 값으로 변환되며 각각의 weight가 곱해져서 output layer에 입력된다.
이때의 weight는 feature map의 채널에 대한 weight라고 볼 수 있다.
- Convolution layer를 거쳐 얻은 마지막 feature map을 꺼내와서 채널별로 대응하는 weight를 곱한 후 모두 더해주면
모델이 어느 부분을 보고 class를 분류했는지 알 수 있다.

GradCAM
Gradient Class Activation Map
- Gradient signal을 통해 최종 결과에 대한 미분값을 feature map과 결합하여 모델이 어떤 부분을 보고 결과값을 예측하였는지 그 중요도를 히트맵으로 표시한다.
- CAM과 다른점: weight를 구하는 방법이 다름 → gradient(미분) 개념을 사용하여 weight를 구할 것
- 관찰하려는 convolution의 gradient와 그 layer를 통과한 output 정보(feature map)가 필요하다.
GradCAM 예시

GradCAM 구하는 방법

1) Feature map의 각 원소가 특정 calss에 주는 영향력인 Gradient를 구한다.
클래스 c에 대한 예측 스코어인
Feature map이란 관찰하려는 layer를 통과한 output을 말한다.
2) 각 Feature map의 Gradient 평균을 구한다.
위(1)의 과정처럼
이들의 평균을 구한 것이 weight이다.
여기서 Z는 feature map의 개수이다.
이 weight는
3) Featuremap과 weight를 선형결합하고 이때 ReLU를 사용한다.
ReLU를 사용하는 이유는 관심 class에 positive한 영향을 주는 특징에만 관심이 있기 때문이다.
위의 과정을 통해 얻어진 값으로 히트맵을 그려서 많이 활성화된 부분이 예측값이 그렇게 나오도록 하는데에 영향을 주었다고 해석을 한다.
GradCAM 코드
출처
[1] https://realblack0.github.io/2020/04/27/explainable-ai.html
[2] https://wordbe.tistory.com/entry/Grad-CAMGradient-weighted-Class-Activation-Mapping
[3] https://velog.io/@tobigs_xai/CAM-Grad-CAM-Grad-CAMpp
[4] https://github.com/vickyliin/gradcam_plus_plus-pytorch
'Deep Learning' 카테고리의 다른 글
[XAI] LRP (0) | 2022.03.28 |
---|---|
[XAI] SHAP (0) | 2022.03.28 |
[XAI] LIME (1) | 2022.03.22 |
[모두RL-⑥] DQN (0) | 2022.03.07 |
[모두RL-⑤] Q-Network (0) | 2022.03.07 |
댓글