최근 CNN 계열에서 classifier 로서 GAP (Global Average Pooling)를 사용하는 추세입니다.
conv layer에서 많이 사용하는 pooling으로는 max pooling이 있습니다.
feature의 일부 영역에서 가장 큰 값을 선택하여 (max pooling) 하나의 숫자로 만들고, 전체 영역에 대한 2차원 숫자 배열을 만듭니다.
또는, feature의 일부 영역에서 평균값을 선택하여 (average pooling) 하나의 숫자로 만들고, 전체 영역에 대한 2차원 숫자 배열을 만듭니다.
GAP 는 기존에 일반적으로 사용하던 구조인 CNN + FC (Fully Connected layer)에서
분류기인 FC를 없애기 위한 방법으로 도입하였습니다.
뒤로 갈 수록 추상화되고 함축되는 정보가 feature에 담기게 되는데, 결과적으로 마지막 feature 를 분류기로
사용하는 방식입니다.
각 feature의 각 평균값을 사용하여 분류합니다.
FC는 전체의 CNN보다 더 많은 parameter를 가지고 계산이 오래 걸리고, 입력단의 숫자의 갯수가
고정되는 단점이 있습니다. 그리고, feature의 위치에 대한 정보가 모두 사라집니다.
예를 들어, 암 진단의 결과 암이라고 분류 결과가 나왔는데, 어떤 부분을 보고서 그런 결과를 내었는지 확인을 하기위해 FC를 사용하지 않고 GAP를 사용합니다.
GAP를 분류기로 사용하면, 입력되는 원본 image size 와 관계없이 사용할 수 있습니다.
쉽게 말하면, Fully connected(FC) layer을 다 제거하고 마지막에 Global Average Pooling(GAP)을 하여 1x1x512 같은 vector로 mapping한다.
그리고 여기서 FC layer를 달아서 softmax로 classification을 학습시킨다. FCN을 지향하기 때문에 GoogLeNet의 성능이 제일 좋다.
GAP
: 쉽게 설명해보자면, 우리가 CNN에서 주로 하던 pooling은 max-pooling이다.
Pooling을 하는 이유는 CNN feature dimension을 줄여서 over fitting을 피하고자함이고,
max-pooling을 하는 이유는 activation된 neuron을 더 잘 학습하고자함이다. (사실 실험적인 이유가 큰듯한데)
주로 2x2 max-pooling을 해서 HxWxC dimension을 H/2xW/2xC, 1/4배로 줄였는데, global pooling은 HxW pooling이란 의미이다.
즉 한 feature map (HxWxC)을 전부 pooling해서 한 neuron(1x1xC)으로 mapping 시킨다는 것.
따라서 각 feature map은 GAP을 통해 한 neuron이 된다.
그리고 이 neuron들에 적절한 weight를 준 FC layer을 학습시켜서 classification을 하게 되는데,
만약에 Australian terrier로 classification이 되면 그렇게 분류 시킨 FC의 weight를 고대로 각 feature map에 가중치를 주어서 CAM을 뽑아낸다.
'AI시작' 카테고리의 다른 글
3-2 CNN 용어들 (Kernel, Stride, Pooling..) (0) | 2019.12.10 |
---|---|
사물인식을 원한다면 YOLO 는 기본 (0) | 2019.09.26 |
6-6 Non Maximum Suppression (0) | 2019.09.05 |
6-5 인식모델 평가지표(IOU 등) (0) | 2019.09.05 |
6-4 Precision and recall (0) | 2019.09.05 |