본문 바로가기
Deep Learning

[XAI] CAM, GradCAM (작성중)

by 룰루셩 2022. 3. 28.

석사 때 GradCAM을 이용하여 음향 장면 분류 모델에 대하여 각 class별 특징을 확인하고 논문으로 쓴 적이 있다.

이때도 작성해놓은 적이 있는데, 이번에 공부하면서 좀더 보충해서 작성하였다. 

 

전에 작성했던 글!

2020.11.13 - [Deep Learning/papers] - [논문 리뷰] Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization

 

[논문 리뷰] 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에 입력된다.

    이때의 weightfeature map의 채널에 대한 weight라고 볼 수 있다.

- Convolution layer를 거쳐 얻은 마지막 feature map꺼내와서 채널별로 대응하는 weight를 곱한 후 모두 더해주면

  모델이 어느 부분을 보고 class를 분류했는지 알 수 있다.


GradCAM

Gradient Class Activation Map

- Gradient signal통해 최종 결과에 대한 미분값을 feature map과 결합하여 모델이 어떤 부분을 보고 결과값을 예측하였는지 그 중요도를 히트맵으로 표시한다.

- CAM다른점: weight를 구하는 방법이 다름 → gradient(미분) 개념을 사용하여 weight를 구할 것

- 관찰하려는 convolutiongradient와 그 layer를 통과한 output 정보(feature map)가 필요하다.

 

GradCAM 예시

사진 출처:  https://realblack0.github.io/2020/04/27/explainable-ai.html

 


GradCAM 구하는 방법

1) Feature map의 각 원소가 특정 calss에 주는 영향력인 Gradient를 구한다.

  클래스 c에 대한 예측 스코어인 yc를 Feature map 내 i,j에 위치한 값으로 미분한다. 

  Feature map이란 관찰하려는 layer를 통과한 output을 말한다.

 

2) 각 Feature map의 Gradient 평균을 구한다.

  위(1)의 과정처럼 yc에 대해서 모든 Feature map의 i, j 좌표으로 미분한 값(Gradient)이 있을텐데

  이들의 평균을 구한 것이 weight이다.

  여기서 Z는 feature map의 개수이다.

  이 weight는 yc값이 나오도록 하는데에 얼마나 중요한 역할을 하는지에 대한 weight값이다.

 

3) Featuremap과 weight를 선형결합하고 이때 ReLU를 사용한다.

  ReLU를 사용하는 이유는 관심 class에 positive한 영향을 주는 특징에만 관심이 있기 때문이다.

  yc는 확률값이고 이 값을 증가시키기 위해 강도를 증가시켜야 하는 픽셀에만 관심이 있다.

 

위의 과정을 통해 얻어진 값으로 히트맵을 그려서 많이 활성화된 부분이 예측값이 그렇게 나오도록 하는데에 영향을 주었다고 해석을 한다.


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

댓글