논문 정리

[CAM] Learning Deep Features for Discriminative Localization

강담비 2020. 1. 25. 22:30
반응형

 

 

안녕하세요!!

 

 

 

오늘은 Learning Deep Features for Discriminative Localization 라는 논문에 대해서 이야기해보려 합니다.

 

 

먼저 이 논문이 2015년 논문임에도 불구하고 리뷰하게 된 계기는

 

현재까지도 많은 논문에 인용되어 모델을 분석하거나 성능을 비교할 때 사용되기 때문입니다.

 

 

 

이 논문이 나오기 전부터 CNN을 해석하려는 노력이 많이 있었습니다.

 

그러나 초반 레이어에서는 엣지를 보고 레이어가 깊어질수록 특정 피쳐를 찾아낸다는 점 정도만 알아냈다고 합니다. 

 

 

이 논문에서는 모델이 어디부분을 보고 input이 특정 클래스라고 판단하는지를 대략적으로 알 수 있는 CAM을 소개합니다.

 

 

예시 이미지의 Class Activation Map

 

이런 식으로 오른쪽 사진을 보고 "Brushng teeth"라고 판단하는 model을 분석하기 위해 CAM을 만들어낸 결과입니다.

(기존 사진이랑 겹치는 등 여러 시각화 과정을 거친 것)

 

 

CAM을 만드는 과정을 설명하기 전에 global average pooling 에 대한 설명을 잠깐 하겠습니다.

 

 

기존에 일반적으로 사용하던 구조인 CNN 거친 후에 Fully Connected layer(FC)를 사용하는 방식에서는

 

 

FC를 만들기 위해서 flatten 하는 과정이 있는데 GAP(global average pooling)을 사용하면 

 

 

 

FC vs GAP

 

flatten하지 않고 한 feature map 당 한 노드(1x1)로 대응됩니다.

( feature map이 n개면 GAP를 거친 후 nx1크기의 layer가 생긴다.)

 

 

어떻게 보면 이 노드 값이 각 feature map을 대표한다고 생각이 됩니다. 

 

 

CAM을 생성하려면 CNN -> FC 대신에 GAP를 사용해야 합니다.

 

 

(그 이유는 이 이미지를 보면 바로 이해가 되실 것 같아요!)

 

  

 

CAM 예시

 

 

마지막 conv layer의 channel 수를 n이라고 할 때

 

 

GAP를 하면 nx1의 layer 가 생기고 각 노드들은 W1 ~ Wn까지의 가중치를 가지고 이 사진이 "Australian terrier" class score에 영향을 줍니다.

 

 

이 Wi 값이 i 번째 마지막 conv layer의 i 번째 feature map의 중요도(?) 정도로 직관적 이해가 가능합니다.

 

 

CAM을 만들기 위해서는 각 feature map에 대응되는 W값을 다 곱해서 더해주는 방식으로 CAM을 만들어 냅니다.

 

 

----------------------------------------------------------------------------------------------------------------------

 

 

논문에서는 CAM을 Weakly-supervised Object Localization로 활용하기도 했습니다.

 

논문에서는 유명한 CNN모델인 AlexNet, VGGnet, GoogLeNet에 FC layer를 빼고 결과 나오기 직전에 GAP을 넣어

 

CAM을 사용할 수 있게 모델을 바꿨습니다.

 

이 모델을 classification 바탕으로 학습시킨 후

 

CAM을 뽑아내 상위 20% 값을 segment한 후 가장 큰 덩어리를 커버하는 bounding box를 만듭니다.

 

이렇게 하면 classification 트레이닝과 데이터셋 가지고 object localization을 할 수 있습니다.

 

 

CAM object localization performance

성능표를 보시면 Backprop을 이용한 것보다 CAM을 활용한 게 대체로 성능이 좋은 것을 보실 수 있습니다.

 

또 CAM 중에 가장 성능이 좋은 GoogLeNet-GAP(huristics)은

 

full supervision인 AlexNet과 별로 차이가 나지 않는다는 것이 인상적입니다.

 

 

 

----------------------------------------------------------------------------------------------------------------------

 

 

제가 시간이 지날 수록 헷갈리는 부분을 말해보자면

 

CAM에서 activate된 부분은 모델이 그 부분을 보고 A라고 판단한 것이지 그 부분이 A가 아니라는 것입니다.

 

당연하게 느껴지실 수도 있지만 저는 가끔 헷갈리더라고요!

 

그렇지만 대부분의 경우에는 CAM에서 activate 된 경우가 A입니다.

 

(CAM으로 object localization이 가능한 이유이기도 합니다.)

 

 

 

 

 

 

극단적인 예를 들면 축구선수인지 아닌지를 판단하는 딥러닝 모델에 넣어준 training 이미지에

 

대부분 축구선수 옆에 축구공이 있어서 이 모델이 축구선수임을 판단하는데 기여하는 큰 요소가 축구공이라고 하면

 

CAM을 생성했을 때 축구공이 축구선수가 아니지만 축구공 부분이 activate 될 수 있다는 것입니다.

 

 

 

 

논문 - Learning Deep Features for Discriminative Localization

 

 

오늘 포스팅은 여기까지 마무리 하겠습니다.

 

 

틀린 부분이 있으면 댓글로 알려주시기 바랍니다.

 

 감사합니다.