Hello Computer Vision

CAM, Grad-CAM 공부해보기 본문

딥러닝

CAM, Grad-CAM 공부해보기

지웅쓰 2023. 6. 30. 15:55

이번에 Pseudo segmentation 논문을 읽으면서 Grad-CAM 에 대한 내용이 나오는데 읽어야 잘 이해할 수 있겠다고 생각해서 공부해보려고 한다. 논문을 읽을까 생각했는데 자세히 나와있는 포스팅이 많아서 참고하였다.

해당 내용에 대한 참조는 아래 있습니다.

 

CAM이란?

https://arxiv.org/abs/1512.04150

 

Learning Deep Features for Discriminative Localization

In this work, we revisit the global average pooling layer proposed in [13], and shed light on how it explicitly enables the convolutional neural network to have remarkable localization ability despite being trained on image-level labels. While this techniq

arxiv.org

우리가 딥러닝 모델을 통해 개-고양이 분류하고자 할 때 모델이 어떻게 분류하였는지가 궁금할 수 있다. 따라서 결과에 대해 역추적해서 이를 시각화하는 것이다.

 

쉽게  나타내면 다음과 같다. 일반 CNN모델에 GAP(Global Average Pooling)이 들어간 것을 확인할 수 있으며 이를 통해 모델이 feature map의 어떤 부분을 활성화 시켰는지 알 수 있다. 

GAP 에 대해 조금 더 설명하면 위 이미지와 같다. 마지막 feature map들을 받는다면 이를 평균을 내 1차원의 값으로 내보내는 것이다.

이렇게 GAP을 통해 얻은 값들을 FCN을 붙여서 class에 대한 결과값을 확인할 수 있다.

전체적인 과정을 보면 위와 같다. 따라서 만약 input값이 camel이 들어왔고 output도 camel이란 것을 잘 예측했을 때의 마지막 feature map을 시각화해본다면 camel  의 어떤 부분을 많이 활성화 해서 camel이라고 예측했는지 알 수 있다.수식에 나온 f는 feature map인데 각각의 GAP값과 pixel wise sum을 해준다고 할 수 있다.

 

그리고 또 다른 설명들을 보면은 GAP값이 학습될 수 있다고 하는데 내가 이해한 CAM의 과정을 말해보면 GAP는 일정한 값을 뱉지만 CNN-GAP-FCN으로 이어지기 때문에 FCN에서 학습되는 파라미터라 같은 GAP값이라 하더라도 학습되는 FCN에 따라 값이 달라진다. 그래서 설명에서 나온 Wck는 GAP값과 뒤에 연결되는 FCN까지 같이 고려한 값이 아닐까 생각된다.

 

CAM의 단점이라고 하면 이를 확인하기 위해서는 GAP을 기존 모델에 사용해야하며, 뒤에있는 FCN까지 추가로 학습해야한다는 단점이 있다. 그리고 CNN에서만 사용할 수 있다는 단점이 있다(Attention 은 안되는 듯 하다)

 

Grad-CAM이란?

https://arxiv.org/abs/1610.02391

 

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

We propose a technique for producing "visual explanations" for decisions from a large class of CNN-based models, making them more transparent. Our approach - Gradient-weighted Class Activation Mapping (Grad-CAM), uses the gradients of any target concept, f

arxiv.org

Grad-CAM은 한마디로 Gradient 와 CAM을 활용하는 것이다.

 

위 이미지를 보면 대략적으로나마 직관적으로 이해할 수 있다. 결과값에 대해서 gradient를 계산한다면 input값이 얼마나 output값에 대해 영향을 주었는지 알 수 있다.

Grad-CAM의 장점은 따로 CNN을 사용하지 않아도 되고, GAP를 사용하지 않아도 된다는 것이 큰 장점이다.

 

수식은 위와 같다. 기존의 Wk에서 ak로 변경됐고 ReLU가 추가되었음을 알 수 있다.

ak를 설명해본다면 k번째 feature map의 원소가 output class에 얼마나 영향력을 주었는지의 평균이라고 할 수 있다. 단순하게 이해해서 GAP를 대체하였으니 gradient가 이 역할을 대신한다고 보면 된다.

해당 과정을 표현하면 위와 같다.이에 추가적으로 ReLU가 적용된다는 것을 알 수 있다.

 

Grad-CAM을 적용한 결과이다.

 


Reference

https://tyami.github.io/deep%20learning/CNN-visualization-Grad-CAM/

https://velog.io/@teang1995/CAMClass-Activation-Map-%EA%B5%AC%ED%98%84

https://gaussian37.github.io/dl-concept-global_average_pooling/