오늘은 CNN 모델 시각화 기법인 Grad-CAM에 대해서 알아보도록 하겠습니다.
Reference
[1] CAM 논문
[2] Grad-CAM 논문
[3] 관련 블로그
[4] 관련 블로그
Grad-CAM
CAM(class activation map), Grad-CAM(gradient-weighted class activation mapping)은 CNN 계열 모델의 결과를 시각적으로 표현해 모델 이해도를 높일 수 있는 기법입니다.
아래 그림처럼 모델이 이미지의 어떤 파트가 도출한 prediction에 영향을 많이 주는지 해석이 가능합니다.
이러한 설명 가능한 AI가 중요한 이유는 크게 2개로 말할 수 있습니다.
먼저, CNN 모델들이 좋은 성능을 얻기 위해 더 깊어지고 무거워질수록 모델 추론 결과를 직관적으로 이해하기가 어렵습니다. 만약 모델이 추론에 실패한다면 그 원인을 파악하는데 어려움이 많아질 것입니다.
두 번째로, 실제 AI 기술이 우리의 삶을 바꾸기 위해서는 우리에게 신뢰를 주는 모델을 사용함이 중요하고 신뢰도 향상을 위해서는 모델에 대한 충분한 이해와 해석이 필요합니다. 즉, 투명한(transparent)한 모델을 통해 왜 모델이 어떤 추론을 했는지를 제시할 수 있어야 합니다.
Grad-CAM and CAM
기존 CAM 시각화는 아래와 같은 한계를 갖고있습니다.
- GAP(global average pooling)을 사용하는 CNN 모델에만 적용 가능
- 만약 기존 FC layer를 GAP로 대체한다면 re-train 과정이 필요
- 중간 layer가 아닌 마지막 layer에만 적용 가능
Grad-CAM은 CAM의 일반화 버전으로 위 한계를 해결했습니다.
- FC layer를 갖고있는 CNN 모델들에도 사용 가능
- 모델 재학습 과정 불필요(gradient만 사용)
- VQA, 강화학습과 같이 특정 task를 수행하는 CNN에도 적용 가능
아래 그림은 Grad-CAM의 전체적인 과정을 말해줍니다.
Grad-CAM 원리
먼저 수식에 대해 용어를 정리하고 시작하도록 하겠습니다.
- \( y^c \) : c class에 대해 softmax layer 에 들어가는 값(before softmax)
- \( A^k \) : convolution layer의 k번째 feature map
- \( \frac{\partial y^c}{\partial A^k} \) : \( y^c \)가 \( A^k \)에 갖는 gradient
위 수식들을 사용해 Grad-CAM을 구할 수 있습니다.
$$ \alpha_k^c = \frac{1}{Z} \sum_{i}^{} \sum_{j}^{} \frac{\partial y^c}{\partial A_{ij}^k} $$
Backprop을 통해 구한 gradient에 GAP를 적용한 결과입니다. Feature map k가 class c에 주는 importance, 중요도를 의미합니다.
$$ L_{grad-cam}^c = ReLU(\sum_{k}^{}\alpha_k^c A^k) $$
이제 \(\alpha_k^c\)와 \( A^k \)를 곱해 weight sum을 구해줍니다. 그러면 각 피쳐맵이 합쳐져 하나의 Heatmap으로 정리됩니다.
여기서 ReLU를 적용하는 이유는 positive influence만 관심있기 때문입니다.
다음 글에서는 TensorFlow를 사용해 Grad-CAM 코드를 구현해보겠습니다.
'머신러닝' 카테고리의 다른 글
[Dataset] Tiny ImageNet (0) | 2022.10.01 |
---|---|
[ML] MobileNetV2 with TensorFlow (0) | 2022.09.28 |
[ML] Depthwise Separable Convolution (0) | 2022.09.16 |
Raspberry Pi 4B Tensorflow 설치법 (0) | 2022.09.01 |
Tensorflow 설치 방법 및 주의사항 (0) | 2022.06.16 |
댓글