일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- GAN
- Machine Learning
- AI
- coding test
- keras
- python
- 설명가능한 인공지능
- cs231n
- grad-cam
- 설명가능한
- Explainable AI
- meta-learning
- Cam
- 코딩 테스트
- Deep learning
- xai
- 머신러닝
- 딥러닝
- 메타러닝
- Unsupervised learning
- SmoothGrad
- Score-CAM
- Class activation map
- Interpretability
- 백준
- 코딩테스트
- 기계학습
- 시계열 분석
- 인공지능
- Artificial Intelligence
- Today
- Total
iMTE
Grad-CAM++ 내용 정리 [XAI-3] 본문
논문 제목 : 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 한번으로 구할 수 있는 값으로 변환된다.
'Deep learning study > Explainable AI, 설명가능한 AI' 카테고리의 다른 글
Sanity checks for saliency maps, Equation sheets, [XAI-6 (1)] (0) | 2021.04.20 |
---|---|
SmoothGrad : removing noise by adding noise 내용 정리 [XAI-5] (0) | 2021.04.15 |
Smooth Grad-CAM++ 내용 정리 [XAI-4] (0) | 2021.04.14 |
CAM (Class activation mapping) 내용 정리 [XAI-2] (0) | 2021.04.08 |
Grad-CAM (Gradient-weighted class activation mapping) 내용 정리 [XAI-1] (0) | 2021.04.08 |