본문 바로가기
Deep Learning/XAI

[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에 대한 예측 스코어인 $y^c$를 Feature map 내 i,j에 위치한 값으로 미분한다. 

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

 

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

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

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

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

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

 

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

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

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

 

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


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' 카테고리의 다른 글

[XAI] LRP  (0) 2022.03.28
[XAI] SHAP  (0) 2022.03.28
[XAI] LIME  (0) 2022.03.22

댓글