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을 했는지 알 수 있다.
위와 같이 말이다. 즉, 모델의 판단 근거를 알 수 있다.