-
* Pooling layer
- Pooling layer는 주로 convolution layer를 input으로 받음
- Convolution layer는 각 필터 당 하나의 feature map이 형성되고, 그 feature map을 스택처럼 쌓아둔 것
- 복잡한 데이터셋으로 CNN을 구현하는 경우 매우 많은 수의 필터 필요
- 필터가 많다는 것은 CNN의 차원이 매우 크다는 것을 의미함
- 고차원을 구현하려면 그에 상응하는 더 많은 수의 파라미터 필요
- 오버피팅을 초래할 수 있음
- 차원을 감소하기 위한 방법 중 하나가 pooling layer
* Global Average Pooling Layer (GAP)
- 각 feature map 상의 노드 값들의 평균을 계산하여 급격하게 CNN의 차원을 줄임
- Window size나 stride 지정할 필요 없음
- Global average pooling layer의 최종 output은 single value로 크기가 감소된 feature map
- 즉, (height, width, channel) 형태의 3D array를 input으로 받아 (channel,) 형태의 벡터를 리턴
* Why?
- CNN + FC Layer에서 classifier인 FC layer를 없애기 위한 방법으로 도입
- 이전 feature map들이 갖고 있는 spatial information을 유지하면서 category로 직접 연관시키는 역할을 하기 때문에 얻어낸 feature map 중 어느 부분이 해당 class로 분류되는데 주요한 역할을 했는지를 알 수 있는 confidence map (=feature map)을 얻어낼 수 있음
* FC layer
- Fully-connected Layer
- FC layer는 마지막 feature와 matrix 곱을 하여 feature 전체를 연산의 대상으로 삼아 결과를 출력
- 즉, feature가 이미지 전체를 함축하고 있다고 가정하면 이미지 전체를 보고 출력을 만들어 냄
- 그러나 FC layer를 classifier로 사용하는 경우 파라미터의 수가 많이 증가하는 단점
- feature 전체를 matrix 연산하기 때문에 위치정보 사라짐
- FC layer 사용 시 반드시 지정해 주어야 하는 FC layer의 사이즈로 인해 입력 이미지 사이즈 고정됨
* FCN
- Fully convolutional network
- Object detection과 같이 classification과 localization 둘다 수행해야 할 경우 위치정보를 손실하는 FC layer 사용 불가
- 1 x 1 convolution layer을 사용하여 위치정보가 손실되는 것을 막아줌
- 이미지 크기 자체는 그대로 보존하기 때문에 filter의 수에 따라 output의 차원이 달라짐
- (H, W, C)의 feature map에 1x1 conv filter K개 사용하면 (H, W, K) output 나옴
- Feature map의 크기를 유지하면서 차원 줄이고 싶을 때 1x1 conv 사용
- Classification 작업을 최정적으로 수행하는 FC layer의 기능을 대신하지는 못함
* GAP
- Global average pooling
- GAP의 경우 어떤 크기의 feature라도 같은 채널의 값들을 하나의 평균 값으로 대체하기 때문에 입력 사이즈에 유동적
- 단순한 평균 연산이므로 파라미터가 추가되지 않아 학습 속도 및 오버피팅 측면에서 유리
- 연산 결과가 1차원 벡터이므로 최종 출력에 FC layer 대신 사용할 수 있음
- Feature map과 category data를 직접 연관지음으로써 모델이 훨씬 더 interpretable 해짐
- FC layer에서는 오버피팅을 막기 위해 dropout을 사용했지만, 파라미터가 없는 GAP는 자체적으로 오버피팅을 막게 되어 regularization 효과 있음
- Spatial information을 요약하여 반영하기 때문에 FC layer에서 공간 정보가 없어지는 것을 막을 수 있고 훨씬 더 공간적 정보를 잘 담을 수 있음 (?)
- 경우에 따라 FC layer와 같이 사용되기도 함
- GAP를 이용하여 차원을 줄여서 벡터로 만든 다음에 FC layer로 전달하면 쉽게 사이즈를 맞출 수 있음
- 경우에 따라 평균 내지 않고 모두 더하기만 하는 경우도 있음
참조
- https://gaussian37.github.io/dl-concept-global_average_pooling/
- https://strutive07.github.io/2019/04/21/Global-average-pooling.html
- https://vision4me.tistory.com/5
- https://adventuresinmachinelearning.com/global-average-pooling-convolutional-neural-networks/
- https://poddeeplearning.readthedocs.io/ko/latest/CNN/CAM%20-%20Class%20Activation%20Map/
개인적인 리뷰 :
- GAP는 한 feature map에서 공간정보 무시하고 전부 다 합해서 평균을 내버리는데 왜 공간정보를 유지한다는 거지???
'공부' 카테고리의 다른 글
Transformer (0) 2021.08.09