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

[Grad-CAM] How? ; Section 3

by 에아오요이가야 2022. 1. 24.

[그림 1] Grad-CAM overview

Section 3. Grad-CAM

 

Convolutional layers은 spatial 한 information 즉 feature map을 얻는데 이는 fully-connected layer에서 없어집니다. 이는 곧  convolutional layer의 결과가 object parts의 정보를 제공한다는 의미로 해석될 수 있습니다.

 

Grad-CAM는 각각의 neuron이 particular decision of interest에 importance values를 assign 하기 위해 CNN의 마지막 convolutional layer로 흘러들어오는 gradient information을 사용합니다.

 

자! 글쓴이가 원하는 바가 소개됐네요.

CNN의 마지막 convolutional layer에서 계산되는 Gradient information을 얻을 겁니다!!

그리고 이것을 시각화할 것입니다! => Class-discriminative localization map을 얻을 것입니다.

 

결론부터 말씀드리고 천천히 설명드리겠습니다. 

\(L_{Grad-CAM}^{c}= ReLU(\sum\limits_{k} \alpha_k^c A^k) \)  이것이 바로 Class-discriminative localizaiton map입니다.

 

마지막 convolutional feature maps의 사이즈가 가로 \(u\), 세로 \(v\)이고 class가  \(c\) 일 때,

\(L_{Grad-CAM}^{c}\in \mathbb {R}^{u \times v} \), Class-discriminative localization map, \(=L\)을 얻기 위해,

 

즉,  \(\frac {\partial  y^c}{\partial A^k}\)을 계산하여 값을 얻습니다.

 

\(c\)는 목표 class이고,

\(u\)는 localization map의 가로길이이고,

\(v\)는 localization map의 세로 길이이고,

\(L_{Grad-CAM}^{c}\)은 Class c에 대한 localization map이고,

\(y^c\)는 class c에 대해 Softmax 계산되기 전의 fully-connected 결과이고, score for class \(c\)입니다.

\(A\)는 feature map Activations에서 A를 따온 건 알겠는데, \(A^k\)는 뭘까요?

 

여기서 \(k\)는 마지막 convolutional layer의 결과 중 채널을 지칭하는 notation입니다. (전체 채널 수를 \(K\) 개라고 하겠습니다.)

 

그에 따른 k개의 neuron importance weights를 \(\alpha_k^c\)로 정의합니다.

 

이를 얻기 위해 모든 dimension에 대해 gradients를 global-average-pool 합니다.

 

\( \alpha_k^c =   \frac{1}{I\times J} \sum\limits_{i}\sum\limits_{j} \frac {\partial y^c}{\partial A_{i, j}^k}  \)  이걸 조금 더 쉽게 풀어쓰면,

 

\( \alpha_k^c = \frac{1}{I\times J} \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1} \frac {\partial y^c}{\partial A_{i, j}^k}  \)

 

\( \frac{1}{I\times J} \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1} \) 부분은 모든 dimension에 대한 global average pooling을 의미하고

 

\(\frac {\partial y^c}{\partial A_{i, j}^k} \) 부분은 backpropagation을 통해 나온 gradient입니다.

 

\(\alpha_k^c\)는 \(A\)로 부터 얻을 수 있는 정보의 부분적 선형화를 의미하고

이는 곧 target class \(c\)를 위한 feature map \(k\)의 importance를 의미합니다.

 

convolutional feature map들과 coarse heatmap의 결과는 같은 사이즈를 갖습니다.

 

ReLU가 없다면, 성능이 떨어집니다.

왜냐하면 알고 싶은 class에 positive 한 영향을 주는 feature들만 알고 싶기 때문입니다.

즉,  \(y^c\)를 증가시키기 위해 이용되는 pixels 알고 싶기 때문입니다.

Negative pixels들은 보통 image에 다른 category에 속합니다.

 

\(\alpha_k^c\)를 풀어봤으니 Class-discriminative localization map의 수식을 풀어써봅시다.

 

\(L_{Grad-CAM}^c =ReLU(\sum\limits_k  \frac{1}{I\times J} \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1}   \frac {\partial y^c}{\partial A_{i, j}^k} A^k\))입니다.

 

여기서 \( I,J \)는 상수이기 때문에 앞으로 빼줄 수 있고요, 다음과 같은 식과 동일합니다.

 

\(L_{Grad-CAM}^c =\frac{1}{I\times J} ReLU(\sum\limits_k  \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1} \frac {\partial y^c}{\partial A_{i, j}^k} A^k\))

 

마지막 convolutional layer의 결과가 되는 채널 수 \( K \) 부분까지 풀어써주면 꽤나 익숙한 식이 됩니다.

 

\(L_{Grad-CAM}^c =\frac{1}{I\times J} ReLU(\sum\limits_{k=0}^{K-1}  \sum\limits_{i=0}^{I-1}\sum\limits_{j=0}^{J-1} \frac {\partial y^c}{\partial A_{i, j}^k} A^k\))

 

이 수식을 말로 풀어보겠습니다.

 

마지막 convolutional layer의 결과인 \(A^k\) 로 인한 target class \(c\)의 softmax가 계산되기 전인 score \(y^c\)의 변화량이 class를 구분하는 importance weight가 되어 이를 다시 Convolutional layer의 결과인 \(A^k\)에 곱해주어 Activation map에서 중요한 부분을 hightlight 해준 뒤 Global average pooling을 해주고 ReLU 함수를 적용하여 효과를 극대화하면 Class-discriminative localization map about class c 를 얻을 수 있다고 이해하시면 됩니다.

 

 

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

[Grad-CAM] How? ; Section 3.2  (0) 2022.02.08
[Grad-CAM] How? ; Section 3.1  (0) 2022.02.08
[Grad-CAM] How? ; Section 3 detail  (0) 2022.01.26
[Grad-Cam] What? ; Section 1, 2  (0) 2022.01.24
[Grad-Cam] Why?  (0) 2022.01.24

댓글