기존 CNN의 모델은 classification 을 이미지 내에서 어떤 특징(feature)를 보고 판단하는지 알 수가 없었다.

하지만, **Class Activation Map(CAM)**은 출력의 결과를 시각화하여 실제 모델이 이미지의 어떤 부분을 보고 분류하는지 알 수 있게 함.

CAM이란 CNN이 입력으로 들어온 이미지를 분류할 때 "어떤 부분을 보고" 예측을 했는지를 알려주는 역할을 한다.

입력 이미지에 히트맵을 씌워 주어진 단어를 예측하는 데에 있어 중요한 부분에 가까워질수록 가시광선의 파장에서 파란색에서 빨간색(온도가 높은 = 활성화가 많이 된 = 중요도가 높은)으로 변해감을 확인할 수 있다.

Untitled

기존 일반적인 모델에서는 마지막 feature map을 flatten하여 1차원 벡터로 만든 뒤 이를 Fully Connected Netowork를 통과하여 softmax로 classification을 하였다.

하지만 flatten을 거치면서 feature map의 인접한 픽셀간의 spatial한 정보를 잃게 되고, 또한 이로인해 FC의 input수가 매우 많아지기 때문에, 파라미터의 수가 급증하는 문제가 있었다.

Untitled

위의 그림에서 w1~wn은 각 object의 중요도를 담는다. 최종적으로 해당 class의 weights과 feature map을 다 곱하고 sum을 함으로써 특정 class의 결정에 영향을 미치는 object가 heatmap에서 나타날 수 있는 것이다.

만약, 사진에 고양이가 있고 이 그림을 고양이라고 분류했다면, 네트워크의 고양이와 관련된 object를 담는 feature map의 weights들은 다른 feature map의 weights에 비해서 값이 클 것이다. 이 값들을 weights sum 하게 되면 고양이와 관련된 object 부분이 highlight가 될 것이다.

그래서 마지막 Conv layer의 feature map과 FC layer의 weight를 곱해서 합해서 살펴보면, 모델이 이미지의 어떤 부분을 보고 class를 분류했는지 알 수 있게 된다.