iMTE

Grad-CAM++ 내용 정리 [XAI-3] 본문

Deep learning study/Explainable AI, 설명가능한 AI

Grad-CAM++ 내용 정리 [XAI-3]

Wonju Seo 2021. 4. 9. 14:53

논문 제목 : Grad-CAM++: Generalized Gradient-based Visual Explanations for Deep Convolutional Networks

논문 주소 : arxiv.org/pdf/1710.11063.pdf

IEEE WACV (2018, ieeexplore.ieee.org/document/8354201)에 나온 논문을 바탕으로 이해하고 내용을 작성한다. arixv에서 나온 버전이 좀 더 extended version임으로 Grad-CAM++에 더 깊은 이해를 위해서는 extended version을 읽는 것을 추천한다.

주요 내용 :

1) Deep models은 "black box"로서 internal function을 이해하는데에는 어려움이 있다. 이를 해결하기 위해서 저자는 class activation map (CAM)과 Grad-CAM 연구로 아이디어를 받아서 Grad-CAM++을 제안하였다. Grad-CAM과 비슷한 면이 있지만, weighted sum을 적용하여 Grad-CAM에서 global average pooling (GAP)을 하는 것을 대체하였다. (잘 생각해보면 각 위치의 gradients를 GAP하는 방법은 주요한 gradients를 뭉개는 작업을 하기 때문에 visualization에서 한계가 있을 것으로 생각할 수 있다. 보통 average 를 하는 것은 이런 단점이 있기 때문에, weighted sum을 선택한 것은 합리적인 선택이라고 볼 수 있다.)

2) CAM의 문제는 softmax layer 전에 무조건 GAP을 사용해야한다는 점이고, Grad-CAM의 문제는 두가지가 있다. (1) 이미지 안에 같은 class의 여러 object가 있을 때, localize하는데 어려움을 갖고 있다. (2) 전체 object를 localize하지 못하는 문제가 있다. 밑의 그림을 보면 이를 이해할 수 있다.

왼쪽 위, 아래 그림에서 Guided Grad-CAM을 보면, 같은 class의 많은 objects를 검출하지 못하는 것을 확인할 수 있다. (개가 5마리인데, 3마리만 localize가 되었거나, 개가 3마리인데, 2마리만 localize 되는 등의 현상) 오른쪽 위, 아래 그림에서 Guided Grad-CAM을 보면, 하나의 object에 대해서 주요한 정보를 localize 못하는 것을 확인 할 수 있다. (Hedgehog의 코와 bird의 다리에 localize가 되어있지 않다.)

보통 한 이미지에 하나의 object만 있는 것이 아닌, 여러 object가 있을 수 있으며, model의 trust를 높이기 위해서는 하나의 object의 주요 특징들에 대해서는 충분히 localize를 할 수 있어야만 한다.

3) 이런 Grad-CAM의 문제를 해결하기 위해서, 저자는 Grad-CAM++를 제안한다 먼저, class c에 해당하는 class score는 다음과 같이 표현된다.

$$Y^c =\sum_k [\sum_i \sum_j \{\sum_a \sum_b \alpha_{ab}^{kc}\cdot relu(\frac{\partial Y^c}{\partial A_{ab}^k})\}A_{ij}^k]$$

위의 식이 복잡해 보이지만, 이전 Grad-CAM의 class score 식을 보면 이해할 수 있다.

$$Y^c=\sum_k w_k^c \sum_i \sum_j A_{ij}^k, w_k^c =\frac{1}{Z}\sum_a \sum_b \frac{\partial Y^c }{\partial A_{ab}^k}$$ 

위 식에서 $w_c^k$는 class c에 대한 k 번째 feature map의 importance를 의미한다. ReLU를 사용하는 이유는 Grad-CAM과 같이 positive gradient가 class score에 긍정적으로 영향을 미치는 것을 의미하기 때문이다.

$$Y^c =\sum_k [\sum_i \sum_j \{\sum_a \sum_b \alpha_{ab}^{kc}\cdot relu(\frac{\partial Y^c}{\partial A_{ab}^k})\}A_{ij}^k]$$

$$w_k^c=\sum_i \sum_j \alpha_{ij}^{kc}\cdot relu(\frac{\partial Y^c}{\partial A_{ij}^k})$$

이 식에 양 변에 $A_{ij}^k$에 대하여 편미분을 취하고, 다시 한번더 편미분을 취한 다음 우리가 알아야 하는 $alpha_{ij}^kc$에 대해 정리하면 다음과 같다.

$$\alpha_{ij}^{kc}=\frac{\frac{\partial^2 Y^c}{(\partial A_{ij}^k)^2}}{2\frac{\partial^2 Y^c}{(\partial A_{ij}^k)^2}+\sum_a \sum_b A_{ab}^k \frac{\partial^3 Y^c}{(\partial A_{ij}^k)^3}}$$

만약, $\forall i,j$에 대해서 $\alpha_{ij}^{kc}$=1/Z 라면, Grad-CAM과 똑같아진다. 그러므로 Grad-CAM++은 Grad-CAM의 generalized 버전이라고 볼 수 있다. 위의 식에서 higher derivatives를 계산해야하는 문제가 생기는데, 이를 다음과 같은 과정으로 해결할 수 있다.

Class score Y를 penultimate layer score의 값이라고 하면, 다음과 같이 나타낼 수 있다.

$$Y^c=exp(S^c)$$

$$\frac{\partial Y^c}{\partial A_{ij}^{k}}=exp(S^c)\frac{\partial S^c}{\partial A_{ij}^k}$$

위 식에서, $\frac{\partial S^c}{\partial A_{ij}^k}$ 값은 쉽게 계산이 된다. (tensorflow나 pytorch에 의해서..) 그 다음, 편미분을 다시 한번더 해보면 다음과 같이 식이 만들어진다.

$$\frac{\partial^2 Y^c}{(\partial A_{ij}^k)^2}=exp(S^c)[(\frac{\partial S^c}{\partial A_{ij}^k})^2+\frac{\partial^2 S^c}{(\partial A_{ij}^k)^2}]$$

위 식에서, relu activation function에 의해서 relu function partial derivative는 다음과 같이 표현된다.

$$\frac{\partial f(x)}{\partial x}=1, x>0$$

$$\frac{\partial f(x)}{\partial x}=0, x<=0$$

$$\frac{\partial^2 f(x)}{\partial x^2}=0$$

위의 식을 high-derivative 식에 집어넣게 되면 다음과 같이 식이 간단하게 바뀐다.

$$\frac{\partial^2 Y^c}{(\partial A_{ij}^k)^2}=exp(S^c)(\frac{\partial S^c}{\partial A_{ij}^k})^2$$

$$\frac{\partial^3 Y^c}{(\partial A_{ij}^k)^3}=exp(S^c)(\frac{\partial S^c}{\partial A_{ij}^k})^3$$

따라서, $\alpha_{ij}^{kc}$는 다음과 같이 식이 변화된다.

식을 쓰려다가 자꾸 깨져서 그냥 식을 가져왔다.

최종적으로 $w_k^c=\sum_i \sum_j \alpha_{ij}^{kc} relu(\frac{\partial Y^c}{\partial A_{ij}^k})$을 구하면, CAM을 구할 수 있다.

$$L_{ij}^c=relu(\sum_k w_k^c\cdot A_{ij}^k)$$

$Y^c=\frac{exp(S^c)}{\sum_k  exp(S^k)}$에 대한 gradient weights에 대한 풀이도 있으나, 위의 단계를 충분히 이해했다면, 구할 수 있음으로 skip 한다.

4) CAM, Grad-CAM, Grad-CAM++의 과정은 밑의 그림에 모두 표현되어있다.

저자는 explanation map $E^c$에 대해서 다음과 같이 표현하였다.

$$E^c=L^c\circ I$$

$\circ$은 Hadamard product로 point-wise multiplication을 의미한다. I는 입력 이미지, $L^c$는 class-conditional saliency maps 즉, CAM 이다.

5) 성능을 평가하기 위해서 average drop %, % increase in confidence, win %에 대해서 정의를 하였다. 각각 의미는 다음과 같이 정리된다.

Avarege drop % : 주요한 부분을 occlusion하였을 때, 성능 저하가 얼마나 되는지?

% increae in confidence : unimportant regions을 occlusion 하였을 때, 성능이 얼마나 향상되는지?

win % : 모든 이미지에서 Grad-CAM++로 생성된 explanation map의 confidence가 Grad-CAM 에서 생성된 explanation map보다 confidence 하락이 얼마만큼 되는지를 보는 것이다. (즉, Grad-CAM++의 confidence 하락이 Grad-CAM으로 인한 하락보다 작은 이미지의 개수를 평가에 사용하는 것이다.)

당연히 Grad-CAM++는 Grad-CAM보다 여러 데이터 셋에서 (ILSVRC2012, PASCAL VOC2007)  좋은 결과를 보여준다.

6) Numerical performance (faithfulness와 연관)외에도 human interpretability를 위해서 시각화의 결과를 확인한다.

위 두그림에서 알 수 있는 것 처럼, Grad-CAM++는 더 object에 localize되었을 뿐만 아니라 여러개의 같은 class가 있더라도 localize를 잘 하는 것을 확인할 수 있다.

7) 마지막으로 13명의 사람으로 부터 Grad-CAM과 Grad-CAM++로 만들어진 explanation map을 보고 이 두 map이 같은지 혹은 어느것이 더 잘 설명하는 지를 설문한 결과 (총 250장에 대해서), Grad-CAM++은 109.69의 점수를, Grad-CAM은 56.08의 점수를 얻었다. (나머지는 두 map이 같은 것으로 대답하였다.)

+

몇몇 연구들을 보다보면 average에 대한 단점을 풀기 위해서 weighted sum을 사용하는 접근들이 많다. 예를 들어 시계열에서도 average loss function을 사용하기 보단 최신 데이터에 좀 더 weight을 주는 loss function을 사용할 때 좀 더 effective prediction horizon이 길어지는 것을 확인할 수 있는데, 이 연구도 마찬가지로 Grad-CAM의 GAP를 weighted sum으로 대체하여 좀 더 localize가 뭉개지지 않고 specific 하도록 설계하였다. weights을 구할 때 higher-order deritvative를 요구하지만, relu의 특성으로 인해 이들은 간단하게 backpropagation 한번으로 구할 수 있는 값으로 변환된다.

Comments