본문 바로가기

카테고리 없음

CAM(Class Activation Mapping)

CNN에서 마지막 FCN을 제거하고 GAP(Global Average Pooling)을 적용하는 것은 대략 2015년 이후부터 자주 사용되는 방법이다.

 

위와 같이, feature map인 f1,f2...fk가 GAP를 거쳐 F1,F2...Fk(각각은 scalar)로 변환되고, 여기서 weighted sum이 일어나며 C class에 속할 score가 구해진다.

 

위를 보면, GAP를 가장 나중에 걸어도 결과 값이 같음을 알 수 있다. 즉 feature map에 먼저 weighted sum을 적용하고, 그 뒤에 GAP를 적용하는 것이다. Feature map에 weight가 곱해진 matrix는 weighted activation map이라고 할 수 있을 것이다.

 

다시 GAP를 먼저 하는 방식으로 돌아와서, weight 벡터는 어떤 feature map에 집중해야 할 지에 대한 정보를 담고 있다(weight도 learnable 하므로 그런 방향으로 학습이 된다). 여기서 위에서 언급한 weighted activation map을 다시 생각해보면, feature map에, 그 feature map의 중요도가 곱해진 matrix이다. 이제 이 weighted activation map들을 sum해서 하나의 matrix로 만들어 보면, c class의 score를 구할 때 모델이 어떤 부분에 attention을 했는지 알 수 있다.

 

위와 같이 말이다. 즉, 모델의 판단 근거를 알 수 있다.