iMTE

CAM (Class activation mapping) 내용 정리 [XAI-2] 본문

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

CAM (Class activation mapping) 내용 정리 [XAI-2]

Wonju Seo 2021. 4. 8. 17:55

논문 제목 : Learning deep features for discriminative localization

논문 주소 : openaccess.thecvf.com/content_iccv_2017/html/Selvaraju_Grad-CAM_Visual_Explanations_ICCV_2017_paper.html

 

ICCV 2017 Open Access Repository

Grad-CAM: Visual Explanations From Deep Networks via Gradient-Based Localization Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra; Proceedings of the IEEE International Conference on Computer Vision (

openaccess.thecvf.com

주요 내용 :

1) CNN 에서 다양한 layer의 convolutional units은 object detectors로서 역할을 한다. 하지만, fully connected layer의 사용은 이런 object를 localize하는 특징을 잃어버리게 한다. 그래서 최근 fully-convolutional neural network 방법들이 사용되고 있다. Regularization 방법으로 사용되었던 global average pooling (GAP)을 사용해서 localization을 유지하는 것을 바탕으로 class specific activation map을 만들어내는 것을 목표로 한다. 이 방법은 end-to-end 방법으로 한번의 forward pass로 CAM을 구할 수 있다.

2) GAP는 global max pooling 보다 나은데, 저자는 강력한 discriminative object 만을 classificaiton에 사용하는 것보다는 모든 discriminative object를 classification에 사용하는 것이 더 나은 것이라고 말하고 있다. (주된 feature를 사용하는 것보다 약하지만 여러 개의 feature를 사용하는 것은 성능 향상에 어느정도 도움이 된다.)

3) 먼저, CNN 이후 flatten layer를 GAP으로 대체하고 fully-conncted layer를 연결한다. (CNN-GAP-Dense-Softmax) 기본적으로 CNN의 top layer 에서의 feature map은 특정 object에 대한 정보를 담고 있다. 이 정보를 GAP로 하나의 point로 만들고, 이에 weights sum이 softmax에 입력이 되는 형태이다. 아래의 그림은 이를 나타내고 있다.

위의 그림에서 w1~wn은 각 object의 중요도를 담는다. 최종적으로 해당 class의 weights과 feature map을 다 곱하고 sum을 함으로써 특정 class의 결정에 영향을 미치는 object가 heatmap에서 나타날 수 있는 것이다. 만약, 사진에 고양이가 있고 이 그림을 고양이라고 분류했다면, 네트워크의 고양이와 관련된 object를 담는 feature map의 weights들은 다른 feature map의 weights에 비해서 값이 클 것이다. 이 값들을 weights sum 하게 되면 고양이와 관련된 object 부분이 highlight가 될 것이다.

4) 위의 과정을 이해하기 위해서 수식적으로 정리해보자.

$f_k(x,y)$는 k 번째 feature map의 (x,y) 좌표의 activation을 의미한다. 다음에는 GAP가 이어짐으로, k번째 feataure map에 해당하는 값은 다음과 같다. $F_k=\sum_{x,y}f_k(x,y)$. 여기서 특정 class c에 대한 class score는 다음과 같이 계산된다. $S_c=\sum_k w_k^c F_k$. 

$w_k^c$ 는 c class에 대한 k 번째 feature map의 GAP 값의 중요도이며, 이는 학습되는 parameter 이다. Class score를 다시 풀어보면, $S_c=\sum_k w_k^c \sum_{x,y}f_k(x,y)=\sum_{x,y} \sum_k w_k^c f_k(x,y)$가 된다.

$M_c=\sum_k w_k^c f_k(x,y)$라고 정의하면, $S_c=\sum_{x,y} M_c(x,y)$가 된다. $M_c(x,y)$는 직접적으로 class c에 대한 (x,y) 좌표의 score를 나타내고, $M_c$는 class c에 대한 CAM이 된다. 계산된 CAM은 input image에 비해서 size가 작아 upsampling을 함으로 image size를 input size에 맞춰준다. 그 다음으로, heatmap을 그 위에 씌워주어 어느 부분이 classification에 영향을 미치는지 알 수 있게 된다.

5) 몇가지 예측 사례를 확인해보자.

위의 그림들에서 해당 class와 연관있는 region이 highlight 되는 것을 확인할 수 있다. 사람의 행동에 대한 classificaiton에서는 행동과 관련된 영역에서 highlight가 되는 것을 확인할 수 있고, 물체 classificaiton에서는 다른 물체가 있어도 해당 class와 관련된 영역만 highlight가 되는 것을 확인할 수 있다.

위의 사진을 보면, bounding box가 없이도, CAM을 사용하면 bounding box가 위치한 곳을 가리킬 수 있으며 labeling 없이, bounding box를 정해주는 도구로서 사용될 수 있다.

Comments