논문/Grad-CAM

Learning Deep Features for Discriminative Localization(CAM)

cvlab_김준수 2025. 1. 7. 17:29

 

grad CAM에 대해서 알기 전에, CAM에 대해서 알야한다. 그리고 CAM에 대해서 알기 전에, CNN에 대해서 알아야한다.

 

 

CNN

 CNN이란, 이미지나 비디오와 같은 시각적 데이터를 처리한데 사용하는 딥러닝의 한 종류이다. CNN은 Covoulution Layer, Pooling Layer, Fully connected Layer로 나뉘어진다.

 

 

 

[Covoulution Layer]

  • 입력된 이미지에 필터를 이용해서, Feature map을 추출한다.
  • 필터는 크기 또는 슬라이드 거리를 조정할 수 있다. 방식에 따라 다양한 Feature map이 생성된다.

 

[Pooling Layer]

  • Feature map을 다양한 풀링 방법을 통해서 크기를 줄인다.
  • 풀링을 통해서 입력 데이터의 계산량을 감소시키고, 더 중요한 특징을 추출하도록 돕는다.

 

[Fully connected Layer]

  • 최종적으로 도출된 Feature map을 1차원화 시켜서, 모든 값을 각각 클래스에 연결한다.
  • 이렇게 연결된 가중치를 기반으로, 각 클래스에 대한 확률이 도출된다.
  • 가장 큰 확률이 예측된 클래스이다.

 

 

이런 CNN은 이미지에 대한 예측을 할 수 있다는 장점이 있지만, 이러한 결과에 대한 해석이 어렵다. 즉, 사용자의 의도로 특정 클래스가 제대로 예측이 된건지 아니면 우연하게 특정 클래스라고 예측을 한건지 알 수 없다. 

 

이러한 문제로, CAM(Class Activation Map)을 통해서 모델이 어떤 부분때문에 특정 클래스로 분류한 것인지를 시각적으러 살펴보자는 방법이 나오게되었다.

 

 

 

 

CAM(Class Activation Map)

CNN과 전체적인 흐름은 유사하지만, Fully connected Layer 전에 GAP를 추가해서 학습을 진행시키고 결과를 도출해내는 다른 점이 있다.

 

 

 

GAP(Global Average Pooling)란?

 

Feature map의 값 하나를 fₖ(x, y)라고 한다면 Fₖ = Σ x,y f ₖ (x, y) 즉, F 를 k번째 Feature map의 값을 모두 더한 값이라고 할 수 있다

 

Fₖ가 바로 GAP된 값이다. 사실, GAP는 평균값이기 떄문에 값의 개수로 나눠야하지만. 논문에서는 나누지 않았기 떄문에 논문을 따라서 수식을 살펴보자. (나누지 않아도 각 이미지의 크기는 같기 때문에 같은 상수라 의미는 같다.)

 

 

 

CAM(Class Activation Map)이란?

 

GAP된 출력은 각 클래스의 가중치와 곱하고 그 값을 모두 더해서 Sc를 추출한다. 이러한 Sc는 Softmax를 통해 클래스 예측이 이루어지게 된다.

 

 

이때, 특정 Feature map의 클래스 별 가중치가 곱해진 값을 CAM이라고 한다. 수식으로 작성하면 아래와 같다.

 

 

 

이렇게 계산된 Map을 CAM이라고 한다. 즉, 각 Class에 대해서 활성화되는 x, y 값을 수치적으로 나타낸 것을 의미한다.

 

이를 시각적으로 값이 높은 부분을 빨간색, 낮은 부분을 파란색으로 나타내면 아래와 같이 시각화할 수 있다.