본문 바로가기
Have Done/Grad-Cam

[Grad-CAM] How? ; Section 3.1

by 에아오요이가야 2022. 2. 8.

Grad-CAM generalizes CAM => Grad-CAM 이 CAM을 커버할 수 있다 로 이해하시면 무리 없습니다.

 

paper에서 Grad-CAM이 CAM을 generalize 한다는 formal 한 증명을 준다고 하니 한번 자세히 들여다봅시다.

 

우선 CAM의 논리가 무엇인지 자세히 들여다보겠습니다.

 

CAM은 Global Average Pooling 와 Softmax 두 개의 layer가 직접적으로 연결돼있는 CNN모델에서만 loclization map을 얻을 수 있습니다.

 

자세히 적으면, 뒤에서 두 번째 layer가 K개의 feature maps를 생성한다면, \( A^k \in \mathbb {R}^{u \times v}\), 이 feature maps들에 index \( i, j \)를 붙여 \(A^k_{i, j}\)로 표현할 수 있고 이는  \(i, j\) 위치에 대한 feature map \(A^k\)의 activation이라고 할 수 있습니다.

 

이 feature map들에 spatially pooled using Global Average Pooling 연산을 적용한 뒤 선형 변환하여 class \(c\)에 대한 score \(Y^c\)를 생성합니다.

 

\(Y^c = \sum\limits_k w^c_k \frac {1}{Z} \sum\limits_i \sum\limits_j A^k_{ij}  \)

 

\(w^c_k\)                : weight connecting the \(k^{th}\) feature map with \(c^{th}\) class 

\(\frac {1}{Z} \sum\limits_i \sum\limits_j\)      : global average pooling

\(A^k_{ij}  \)               : feature map

 

자! 이제 \(w^c_k\)가 정확히 뭔지 알아보기 위한 계산들을 진행해보겠습니다.

사실 우리는 답이 뭔지 알고 끼워 맞추고 있지만 처음 생각해 낸 사람은 정말 대단한 것 같습니다.

 

이를 쉽게 풀어가기 위해서 

 

\(\frac {1}{Z} \sum\limits_i \sum\limits_j\) : global average pooling

\(A^k_{ij}  \) : feature map 이 부분을 \(F^k\)로 치환해주겠습니다.

 

즉, \( F^k = \frac {1}{Z} \sum\limits_i \sum\limits_j A^k_{ij} \)이라면

 

CAM이 score for c, \(Y^c\)를 구하는 식은 다음과 같이 적어줄 수 있습니다.

 

\(Y^c = \sum\limits_k w^c_k \cdot F^k\)

 

이제 score of class \(c\), \(Y^c\)의 \(F^k\)에 대한 변화량을 계산해보겠습니다.

 

\(\frac {\partial  Y^c}{\partial F^k}  = \frac { \frac {\partial Y^c}{\partial A^k_{ij}}  }{\frac {\partial F^k}{\partial A^k_{ij} }   } \)

 

위의 식을 보면 \( F^k = \frac {1}{Z} \sum\limits_i \sum\limits_j A^k_{ij} \) 었기 때문에

 

\(\frac {\partial F^k}{\partial A^k_{ij}} = \frac {1}{Z} \)입니다.

 

그럼

 

\(\frac {\partial  Y^c}{\partial F^k}  = \frac { \frac {\partial Y^c}{\partial A^k_{ij}}  }{\frac {\partial F^k}{\partial A^k_{ij} }   }  =  \frac {\partial Y^c}{\partial A^k_{ij}} \cdot Z\)으로 적어 줄 수 있습니다.

 

다시,  \(Y^c = \sum\limits_k w^c_k \frac {1}{Z} \sum\limits_i \sum\limits_j A^k_{ij}  \) 이기 때문에

 

\(\frac {\partial Y^c}{\partial A^k_{ij}} =w^c_k \)이고

 

\(w^c_k = Z \cdot \frac {\partial Y^c}{\partial A^k_{ij}} \) 

 

등식의 성질을 이용하여 모든 index \(i,j\)에 대한 덧셈을 적용시켜주겠습니다.

 

\( \sum\limits_i \sum\limits_j w^c_k = \sum\limits_i \sum\limits_jZ \cdot \frac {\partial Y^c}{\partial A^k_{ij}} \) 

 

여기서 상수 \(Z\)는 index \(i,j\)에 대하여 independent 함으로 앞으로 빼주겠습니다.

 

\( Z w^c_k = Z \sum\limits_i \sum\limits_j \cdot \frac {\partial Y^c}{\partial A^k_{ij}} \) 

 

이는 다시  \(w^c_k\)앞에 Z가 붙은 이유는 \(Z=I\times J\)이기 때문입니다. 직전 포스팅에서 확인하실 수 있습니다.

 

\( w^c_k = \sum\limits_i \sum\limits_j \cdot \frac {\partial Y^c}{\partial A^k_{ij}} \)로 적을 수 있습니다.

 

이는 놀랍게도 Grad-CAM에서 정의한 \(\alpha^c_k\) : weight connecting the \(k^{th}\) feature map with \(c^{th}\) class 와 상수 배만큼(\(\frac {1}{Z} \)) 차이가 납니다.

 

이는 실제로 시각화 하거나 활용할 때 무시될 수 있는 [성질을 변환시키지 않는] 정도의 차이이기 때문에,

Grad-CAM이 CAM을 generalize한다고 할 수 있습니다.

 

'Have Done > Grad-Cam' 카테고리의 다른 글

[Grad-CAM] 간단히 발표용  (0) 2022.02.16
[Grad-CAM] How? ; Section 3.2  (0) 2022.02.08
[Grad-CAM] How? ; Section 3 detail  (0) 2022.01.26
[Grad-CAM] How? ; Section 3  (0) 2022.01.24
[Grad-Cam] What? ; Section 1, 2  (0) 2022.01.24

댓글