Curaai00's Deep Learning Blog

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

딥러닝/시각화
Grad-CAM

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

기본적으로 Deep Neural Network는 black box이다. network가 output을 어떻게 만들었는지 모른다. 그래서 우리는 통계적인 방법을 이용하여 분석을 한다. 예를들어 precision, recall, acucracy, confidence, loss 등등 다양한 meausre를 통해 결과를 분석하고 네트워크의 문제점을 알아낸다.

하지만 결과를 바탕으로 네트워크가 어떻게 판단을 하는지 추정은 할수 있지만, 우리는 정확히 네트워크의 forwarding 과정을 알지 못한다. 그것을 해결하기 위한 분야가 visualization 이다.

Class Activation Mapping

classification에서 사용하는 visualzing method이다. CNN은 low level의 feature에서는 edge나 color등등 단순한 특징을 학습한다. 하지만 high level에 가까워 질수록 물체를 인식한다. 일반적으로 마지막 conv feature에는 어떠한 물체를 인식하여 디테일한 spatial information을 가지고 있다. 하지만 fully-connected layer를 거치며 정보가 사라진다.

위의 문제를 해결하기 위해 output layer 전의 conv layer에서 fully-connected layer를 global average pooling을 실행한 후에 사용한다. global average pooling을 하면 무엇을 activation한 각각의 channel의 정보량을 압축한다.

network를 통과한 feature $f_k(x, y)$는 $k$번째 unit의 $(x, y)$ spatial location의 activation을 나타낸다. $k$번째 unit에 대한 global average pooling의 결과는 $F_k = \sum_{x, y} f_k(x, y)$이다. class $c$에 대한 softmax의 input은 $S_c = \sum_k w^c_k F_k$이다. 이때 weight $w^c_k$는 class $c$에 대한 가중치로 대응된다. 즉 $w^c_k$는 class $c$에 대한 $F_k$의 중요도를 나타낸다고 다시 말할수 있다. 최종적으로 softmax의 output $P_c$는 $\frac{exp(S_c)}{\sum_c exp(S_c)}$로 구한다. 이때 bias term은 무시한다.

class activation mapping을 하는 방법은 각 feature map에 대해 class $c$에 대한 중요도 $w^c_k$를 곱해준다.

class $c$에 대한 Class Activation Map $M_c$는 Eqn (1)로 표현된다.


Grad-CAM

CAM은 좋은 성능을 보여줬지만, deep neural network는 CNN classification model만 있는 것이 아니다. CNN + RNN, object detection, face recognition 등등 cnn이 wide하게 사용된다. 하지만 CAM은 가중치 $w^c_k$를 softmax와 연결된 fully-connected에서 왔지만, 일반적인 CNN은 fully connected를 사용하지 않는 경우가 많다. 이때는 CAM을 사용하지 못한다. 또한 classification model에서도 마지막 fully connected layer를 교체하여 재학습 해야한다. CAM은 general 하게 사용할 수 없다.

그 해결방안이 Grad-CAM이다. Deep Learning을 이용한 neural network는 한가지 공통점이 있다. 바로 gradient이다. 모든 neural network는 gradient를 back propagation해서 학습을 하기 때문에, 이 공통적인 gradient를 visualizing하고 싶은 Layer의 feature에 가중치로서 사용한다.

weight $\alpha ^c_k$는 neuron importance를 나타낸다. 여기에 $k$번째 unit의 feature map $A^k$와 $\alpha ^c_k$를 weighted combination한뒤, gradient이다 보니 다른 class에 대한 gradient가 포함될수 있는데, 이때 positive한 gradient는 class $c$이고, negative gradient는 다른 class이므로, ReLU 연산을 통해 class $c$에 대한 Gradient-Class Activation Map 을 만든다.

수식으로 표현하자면 Eqn (3)과 같다.


Guided Back Propagation은 positive gradient만을 visualizing 한 것이다.Grad-CAM은 feature 사이즈 이므로 bilinear interpolation을 사용하여 source image로 resize한다.

위의 그림은 Visual Question Answering에서 사용한 Grad-CAM이다.