2020. 5. 31. 00:11ㆍResearch
Motivation
이미지 분류 문제를 풀면서 딥러닝 모델이 과연 어떤 정보에 기반하여 이러한 분류 결과를 냈을까라는 궁금증을 가질 수 있다. 아래의 그림은 "Visualizing and Understanding Convolution Networks"라는 논문에서 가져온 것으로, 완전히 학습된 모델에서 각 layer의 feature map을 시각화 한 것이다. 이와 같은 이전 연구들에서는 CNN 모델의 얕은 층에서는 대상의 edge와 같은 간단한 정보를 찾아내고 깊은 layer에서는 보다 고차원적인 feature를 추출한다는 것을 밝혀냈지만, 모델이 어떤 정보를 통해서 최종적인 분류 결과를 냈는지는 알 수가 없다. Classification 문제를 풀기 위해 모델을 학습하는 동시에 input 이미지의 중요한 부분(discirminative region)을 캡쳐해낼 수 있는 방법이 바로 이 논문에서 제시하는 Class Activation Map(CAM)이다.

1. Introduction
Classifier로 인한 localization 정보 상실
- VGG, ResNet과 같은 기존 CNN 모델들은 마지막에 분류를 위하여 FC layer가 달려있다.

- 위의 그림(ResNet50)에서도 convolution layer에서는 2048×512×1×1의 weight를 가지지만 FC layer(avg pooling + flatten + addmm) 를 거치면서 flatten opearation이 불리게 되고, 이 과정에서 feature 정보가 일그러지게 된다. 이 지점이 convolution layer의 localization ability가 상실되는 부분이다.
- "Network In Network" 논문과 GoogLeNet 논문에서는 파라미터 수 감소를 위해 FC layer를 제거하고 average pooling을 사용함.
- CIFAR-10의 경우, 10개의 class를 분류해야하므로 마지막 conv layer의 feature map channel 수를 10으로 맞추고, 각 채널마다 weighted sum을 하여 이를 logits과 같이 사용함.
- ex) 첫 번째 채널은 첫번째 class에 대한 logit.
- 가장 weighted sum 값이 큰 채널이 예측 클래스가 됨
- CIFAR-10의 경우, 10개의 class를 분류해야하므로 마지막 conv layer의 feature map channel 수를 10으로 맞추고, 각 채널마다 weighted sum을 하여 이를 logits과 같이 사용함.
- 위와 같은 방법을 사용하면 마지막에 flatten 연산을 사용하지 않았기 때문에 feature map의 localization 정보가 소실되지 않음.
NIN 논문에서는 global average pooling을 오버피팅 방지를 위한 정규화 용도로 사용했지만, 이 논문에서는 localization ability에 주목했다는 차이가 있음.

이전 Related Works들과의 차이점
- E2E 학습이 가능하며, single forward pass 만으로 localizing이 가능하다.
- Global Max Pooling(GMP)는 object의 경계선 부분에 대해서만 localizing을 하는 반면에 Global Average Pooling(GAP)는 대상의 중요한 부분 전체를 포착할 수 있다.
- 이전 연구에서 이미 CNN이 학습 과정에서 object detection을 위한 정보를 학습한다는 것을 밝혔지만 이들은 FC layer는 무시하고 conv layer 개별에 대해서 분석을 함. 반면, 이 연구는 분류 문제를 풀 수 있는 완전한 CNN 모델 구조에서 E2E 학습을 하더라도 이미지의 중요한 부분을 특정 가능함을 보임.
2. Class Activation Mapping (CAM)
이 섹션에서는 CNN 모델에서 GAP를 활용하여 어떻게 CAN을 생성할 수 있는지 그 방법에 대한 내용을 다룬다.
- 기본적인 GoogLeNet의 아키텍쳐를 활용하였고, 마지막 output layer(classification의 경우 probability를 뽑기 위한 softmax) 이전에 convolution feature map에 GAP를 적용하여, 이를 categorical ouput을 내뱉는 FC layer와 같이 사용함.
- 이와 같은 구조의 모델에서 이미지의 중요한 부분을 파악하기 위해선 단순히 output layer의 weights를 마지막 convolution feature map으로 projecting 하기만 하면 됨.
참고) GoogLeNet의 전체 구조(torchvision의 구현체)

CAM을 얻는 방법

- 위의 Figure 2에서는 GAP를 통해 마지막 conv layer의 feature map의 spatial average를 추출할 수 있음을 보여준다.
- 마지막 feature map에 대해서 weighted sum을 함으로써 CAM을 얻을 수 있다.
Specification
- fk(x,y): 마지막 conv layer의 unit(채널) k의 activation map의 (x,y) 좌표의 값.
- 마지막 conv layer의 k 번째 채널의 값 중 (x,y) 좌표에 위치한 값
- Fk: unit k의 GAP 이후의 값
- Fk=∑x,yfk(x,y) (reduced sum)
- wck: class c의 Fk가 얼마나 중요한가.
- 채널 k와 클래스 c에 대응되는 값
- wck가 클수록 Fk가 중요
- Sc: class score(softmax의 input)
- ∑kwckFk
- Pc: softmax 이후의 값
- Mc: 클래스 c에 대한 CAM
- (x,y)에 위치한 값이 클래스 c로 분류되는데 미치는 중요도

최종적으로 Sc=∑x,yMc(x,y)를 얻을 수 있음.
- Figure 2에서 GAP 이전의 feature map이 fk이고, 이들을 채널 단위로 찹쳐주면 Fk가 됨.
- 그림에서 동그라미 하나가 Fk에 해당.
- 이들을 softmax에 넣어서 분류 결과를 뽑기 위해서 FC layer 하나가 들어가는데 이 때 weight들이 wck

'Research' 카테고리의 다른 글
[CV Study] Generative Adversarial Nets (0) | 2020.06.11 |
---|---|
더욱 정교한 DeepFake: GANprintR (0) | 2020.05.31 |
[CV Study] Spatial Transformer Networks (NIPS '15) (0) | 2020.05.30 |
[CVPR 2020] Designing Network Design Spaces (1) | 2020.05.08 |
[ASPLOS 2020] PatDNN: Achieving Real-Time DNN Execution on Mobile Devices with Pattern-based Weight Pruning (4) | 2020.05.03 |