SPPNet
본 포스팅은 SPPNet(Spatial Pyramid Pooling Network)에 대해 공유합니다.
등장 배경
CNN 모델은 FullyConnected layer(fc layer)의 입력이 고정 크기를 조건으로 갖기 때문에, 입력 이미지의 크기가 고정되어 있어야 한다는 단점이 있습니다. 따라서, 이미지 크기를 고정하기 위한 전처리 과정이 필요합니다. 전처리 과정은 이미지를 자르거나 (crop) 비율을 변경하는 것(warp)을 예로 들 수 있습니다. SPPNet은 객체 탐지 모델에서 쓰이는 기법으로, 별다른 이미지 전처리 과정 없이 사용할 수 있다는 장점이 있습니다.
구조
sppnet의 구조는 cnn 구조를 따르며, convolution layer 5개와 fc layer 3개로 이루어져 있습니다. convolution 연산의 결과인 feature map에 spp를 적용합니다. 즉, 어떠한 크기의 이미지를 입력해도 fc layer에는 같은 크기의 입력 값이 들어가게 됩니다.
구조에 따른 연산 순서는 다음과 같습니다.
<연산 순서>
1. spatial bin 수 설정
2. 분할 면 수 = 이미지크기/bin
3. 각 면 마다 max pooling 연산 (결과값 : 벡터)
4. 추출된 벡터 연결 (concat)
5. fc layer 입력
6. binary SVM(Suport Vector Machine) 입력
7. Bounding box 회귀
다음 예시는 13*13 feature map에 spp를 적용한 경우입니다.
sppnet은 RCNN의 단점을 개선하기 위해 제안되었던 방법으로, 객체 탐지에서 주로 사용됩니다. 하지만 pooling 기법 중 하나이기 때문에 분류/예측(CNN 모델)에서도 사용할 수 있습니다.
참고
[1] sppnet
[2] 논문