ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스 활성화 맵(Class Activation Map, CAM)
    AI 2026. 2. 4. 14:20

    딥러닝 모델, 특히 CNN(Convolutional Neural Networks)은 흔히 '블랙박스'라고 불립니다. 결과는 잘 나오지만, "도대체 이미지의 어떤 부분을 보고 그렇게 판단했는가?"라는 질문에 답하기 어렵기 때문입니다.

    이를 해결하기 위해 등장한 것이 클래스 활성화 맵(Class Activation Map, CAM) 계열의 기술들입니다. 개발자 관점에서 수식과 구조를 포함해 아주 자세히 파헤쳐 보겠습니다.

     


    CAM (Class Activation Map)

    2016년 Learning Deep Features for Discriminative Localization 논문에서 제안된 방식입니다.

    핵심 구조: Global Average Pooling (GAP)

    CAM을 사용하려면 모델의 아키텍처가 특정 형태여야 합니다. 기존의 CNN은 마지막에 3차원 특징 맵(Feature Map)을 1차원으로 펼치는 Flatten 과정을 거친 후 Fully Connected (FC) Layer를 통과시킵니다. 하지만 이 과정에서 공간 정보(Spatial Information)가 손실됩니다.

    CAM은 이를 해결하기 위해 GAP를 사용합니다.

    1. 피처 맵 생성: 이미지 입력 → CNN 통과 → 마지막 피처 맵 $f_k(x, y)$ 생성 (예: 512채널, $7 \times 7$ 크기).
    2. 평균 내기 (GAP): $7 \times 7$ 이미지 하나당 모든 픽셀을 더해서 면적(49)으로 나눕니다. 결과물은 512개의 숫자(평균값 $F_k$)가 됩니다.
    3. 최종 판단: 이 512개의 평균값에, 모델이 학습한 가중치 $w_k$를 곱해서 다 더합니다.
      • 식: $Score_c = w_1 F_1 + w_2 F_2 + \dots + w_k F_k$
      • 여기서 $w_k$는 학습을 통해 얻은 "해당 특징의 중요도"입니다.
      • 오차 확인 (Loss): 이 스코어가 실제 정답과 얼마나 차이 나는지 계산합니다. (예: 정답은 10점인데 모델은 2점이라면 오차는 8점)
      • 이값이 소프트맥스를 통해서 확률로....

    CAM 시각화 과정 (어디를 봤는지 어떻게 보여주나?)

    이 단계가 바로 우리가 계속 이야기한 그 수식의 단계입니다. 여기서는 평균값을 쓰지 않습니다.

    $$M_c(x, y) = \sum_k w_k^c f_k(x, y)$$
    • 재료 1 ($f_k$): 평균 내기 전의 원본 $7 \times 7$ 피처 맵을 다시 가져옵니다. (위치 정보가 살아있음)
    • 재료 2 ($w_k$): 위 예측 과정에서 썼던 그 가중치(중요도)를 그대로 빌려옵니다.
    • 합성:$7 \times 7$ 맵(512)에 가중치를 곱해서 다 겹칩니다.
      • 결과: 모델이 "중요하다($w$)"고 생각한 특징이 "어디($f$)"에 있었는지가 히트맵으로 나타납니다. 이것이 바로 CAM입니다.

    우리가 CAM을 만드는 이유는 단순히 화려한 히트맵을 보기 위해서가 아닙니다. 인간이 인공지능을 통제하고, 검증하고, 함께 협력하기 위해서입니다. "맞혔으니 됐다"가 아니라 "제대로 보고 맞혔는가"를 확인하는 것이 현대 인공지능 개발의 핵심입니다.

     

    CAM의 한계

    • 구조적 제약: 반드시 마지막에 GAP 층이 있어야 합니다. GAP가 없는 기존 모델(VGG, AlexNet 등)은 구조를 바꾸고 다시 학습(Retraining)시켜야 합니다.
    • 성능 저하 가능성: GAP를 강제로 도입하면 모델의 원래 성능이 떨어질 수 있습니다.

     

    Grad-CAM (Gradient-weighted CAM)

    2017년 제안된 Grad-CAM은 CAM의 구조적 제약을 완벽하게 극복한 범용적인 방법입니다.
    아까 우리가 배운 CAM은 성능은 좋지만 치명적인 단점이 있었어요. 모델의 마지막 부분을 반드시 GAP(Global Average Pooling) + 출력층 구조로 만들어야 했거든요.

    하지만 실제 우리가 쓰는 레즈넷(ResNet)이나 VGG 같은 복잡한 모델들은 중간에 층이 아주 많고 복잡합니다. 모델을 억지로 뜯어고치지 않고도 "어딜 보고 맞췄니?"라고 묻고 싶어서 만든 것이 바로 Grad-CAM입니다.

    핵심 아이디어: 가중치 대신 그래디언트(Gradient)

    수많은 가중치 중 어떤 놈이 '특정 피처맵'과 '최종 정답'을 연결하는 핵심 가중치인지 콕 집어낼 수 없습니다..

    Grad-CAM은 "가중치를 모델 파라미터에서 직접 가져오지 말고, 역전파(Backpropagation)되는 그래디언트를 통해 계산하자"는 아이디어에서 시작합니다.

     

    연결의 핵심 도구: 연쇄 법칙 (Chain Rule)

    복잡한 모델(ResNet 등)에서 최종 점수($y$)와 피처맵($A$) 사이에는 수많은 뉴런과 가중치들이 층층이 쌓여 있습니다.

    $$y = f_3(f_2(f_1(A)))$$

    이때, 우리는 $A$$y$에 얼마나 영향을 주는지 알고 싶습니다. 수학적으로는 $\frac{\partial y}{\partial A}$를 구하면 되는데, 이때 역전파가 사용하는 마법이 연쇄 법칙입니다.

    "최종 오차부터 시작해서, 중간에 있는 가중치($w$)들을 하나씩 곱하면서 거꾸로 내려오면, 결국 맨 밑에 있는 피처맵까지의 영향력이 계산된다!"

     

    작동 단계

    1. 이미지를 모델에 입력하여 특정 클래스 $c$에 대한 스코어 $y^c$(소프트맥스 통과 전 값)를 얻습니다.
    2. 이 스코어 $y^c$를 마지막 컨볼루션 층의 특징 맵 $A^k$미분합니다.
    3. 구해진 미분값(그래디언트)을 통해 특징 맵의 중요도 $\alpha_k^c$를 계산합니다.
    $$\alpha_k^c = \frac{1}{Z} \sum_i \sum_j \frac{\partial y^c}{\partial A_{ij}^k}$$
     

    수식의 주인공: $\frac{\partial y^c}{\partial A_{ij}^k}$ (픽셀별 영향력)

    이 부분은 "피처맵 $k$$(i, j)$ 위치에 있는 픽셀 하나가 변할 때, 최종 정답 점수($y^c$)가 얼마나 변하는가?"를 나타냅니다.

    • 비유: 우리가 사진(피처맵)을 보고 있는데, 특정 위치의 픽셀 하나를 아주 살짝 더 밝게 만들었을 때 모델이 "어! 강아지 확률이 올라갔어!"라고 반응하는 정도입니다.
    • 역전파의 역할: 이 값을 구하기 위해 모델은 정답에서부터 거꾸로 계산하며 내려옵니다. 이 값이 크다는 건, 모델이 그 특정 픽셀을 아주 눈여겨보고 있다는 뜻입니다.

    합치고 나누기: $\frac{1}{Z} \sum_i \sum_j$ (전체 픽셀의 평균)

    픽셀 하나하나의 영향력만 가지고는 "이 피처맵 전체가 얼마나 중요한지" 말하기 어렵습니다. 그래서 피처맵 전체의 영향력을 하나로 요약해야 합니다.

    • $\sum_i \sum_j$: 피처맵 안에 있는 모든 픽셀의 기울기(영향력)를 다 더합니다.
    • $\frac{1}{Z}$: 그걸 전체 픽셀 수($Z$)로 나눕니다. 즉, 평균을 내는 것이죠.
    • GAP 효과: 이 과정이 바로 우리가 앞에서 배운 Global Average Pooling(GAP)과 수학적으로 똑같은 동작입니다.
      • CAM은 피처맵의 을 평균 냈다면,
      • Grad-CAM은 피처맵의 기울기를 평균 내는 것입니다.
     
    최종 맵은 이 중요도와 특징 맵을 선형 결합한 후 ReLU를 적용합니다.
    $$L_{\text{Grad-CAM}}^c = \text{ReLU}\left( \sum_k \alpha_k^c A^k \right)$$

    왜 ReLU를 쓰는가?

    우리는 클래스 $c$를 결정짓는 데 긍정적인 영향을 미치는 특징에만 관심이 있습니다. ReLU를 통해 음수 값(판단에 방해가 되거나 상관없는 부분)을 제거하고, 양수 값(판단을 돕는 부분)만 남겨서 시각적 선명도를 높입니다.

     

     

     CAM vs Grad-CAM 상세 비교

    항목 CAM Grad-CAM
    핵심 기법 GAP 가중치 직접 참조 그래디언트(미분값) 활용
    모델 수정 필요 (GAP 구조 필수) 불필요
    재학습 필요 불필요
    적용 범위 CNN (GAP 기반) CNN, RNN, VQA 등 모든 미분 가능 모델
    특징 정확도가 높으나 범용성 낮음 범용성이 매우 뛰어나며 구현이 쉬움
Designed by Tistory.