Grad-CAM

쌀과자AI·2025년 9월 3일

XAI

목록 보기
5/5

설명가능한 AI(Explainable AI, XAI) 분야에서 Grad-CAM (Gradient-weighted Class Activation Mapping)딥러닝 비전 모델의 결정 과정에 대한 시각적 설명을 제공하는 기법입니다. 주로 CNN 기반 이미지 분류 모델에 적용되며, 모델이 특정 예측을 할 때 어떤 영역(픽셀들)에 주목했는지를 시각적으로 보여줍니다.


🔍 핵심 개념 요약

항목내용
전체 이름Gradient-weighted Class Activation Mapping
주요 목적CNN 기반 모델이 이미지를 분류할 때 어디를 집중해서 판단했는지 시각화
주로 사용되는 모델VGG, ResNet, DenseNet 등 Conv layer 기반 이미지 모델
사용 대상분류하려는 특정 클래스(class c)
출력 결과원본 이미지 위에 heatmap(중요도 맵)을 겹쳐서 시각화

⚙️ 동작 방식

Grad-CAM은 특정 클래스에 대한 출력 score와 마지막 Convolution layer의 feature mapgradient를 활용합니다.

1. 마지막 Conv Layer 선택

  • Grad-CAM은 마지막 convolutional layer를 선택하여 사용합니다.
    • 그 이유는: 마지막 layer는 공간적 정보(spatial resolution)를 어느 정도 보존하면서도 의미 있는 semantic 정보를 담고 있음

2. 특정 클래스에 대한 gradient 계산

  • 예측하고자 하는 클래스 cc에 대해, score ycy^c를 각 채널 AkA^k에 대해 미분합니다:
    ycAk\frac{\partial y^c}{\partial A^k}
  • 이 gradient를 평균 풀링하여 채널별 중요도(가중치)를 구합니다:
    αkc=1ZijycAijk\alpha_k^c = \frac{1}{Z} \sum_i \sum_j \frac{\partial y^c}{\partial A_{ij}^k}
    여기서 ZZ는 feature map의 공간적 크기 (예: 14×14)

3. 가중합 후 ReLU 적용

  • 각 채널의 feature map AkA^k에 대해 위의 중요도 αkc\alpha_k^c를 곱하고 합칩니다:
    LGrad-CAMc=ReLU(kαkcAk)L_{\text{Grad-CAM}}^c = \text{ReLU} \left( \sum_k \alpha_k^c A^k \right)
  • ReLU를 사용하는 이유는: 양수 activation만 중요하다고 간주하기 때문입니다.

📌 직관적 이해

  • Grad-CAM은 “해당 클래스 점수를 올리는 방향으로 gradient가 강한 feature map 영역”에 주목합니다.
  • 즉, 모델이 “이 이미지를 강아지로 판단하게 만든 부분은 어디인가?“를 heatmap으로 보여줍니다.

🖼️ 예시

예를 들어 “Golden Retriever”로 분류된 이미지를 Grad-CAM으로 보면:

  • 얼굴, 귀, 몸통 등의 영역이 빨갛게 표시됨 (→ 모델이 해당 부분을 보고 판단함을 시사)

🧠 Grad-CAM의 장점

장점설명
모델 수정 불필요기존 CNN 모델의 내부 구조를 수정할 필요 없음
직관적인 시각화인간이 쉽게 이해 가능한 heatmap 결과
클래스별 해석 가능특정 클래스에 대해 조건부 시각화 가능

❗ 유의할 점 및 한계

한계점설명
Conv 기반 모델에 국한Vision Transformer, MLP 계열 등에는 기본 방식으로 사용 불가
해상도 제한마지막 conv layer의 해상도에 따라 heatmap이 흐릿할 수 있음
해석의 정확성강조된 영역이 반드시 모델의 실제 reasoning과 정확히 일치한다고 볼 수는 없음

🔁 관련 기법 비교

기법설명
CAM (Class Activation Mapping)특정 구조를 가진 CNN에서만 가능 (예: GAP layer 필요)
Grad-CAM++Grad-CAM의 개선형으로, 다중 객체 인식에 더 잘 작동
Score-CAMGradient 사용 없이, score 차이를 기반으로 중요도 추정
XAI 비교 예시Grad-CAM은 이미지용, LIME/SHAP은 탭/텍스트에도 활용됨

🧪 실습 예시 (PyTorch 기반)

# pytorch-grad-cam 라이브러리 활용
from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image

target_layer = model.layer4[-1]  # 마지막 Conv block
cam = GradCAM(model=model, target_layers=[target_layer], use_cuda=True)

grayscale_cam = cam(input_tensor=input_tensor, target_category=281)  # ex. tabby cat
visualization = show_cam_on_image(rgb_image, grayscale_cam[0])

📚 참고 논문

“Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization”

Ramprasaath R. Selvaraju et al., ICCV 2017

Grad-CAM: Visual Explanations from Deep Networks via...


profile
AI에 관심이 많은 23살 대학생입니다.

0개의 댓글