논문 읽기/Object Detection

[논문 리뷰] SPPnet (2014) 리뷰, Spatial Pyramid Pooling Network

AI 꿈나무 2021. 2. 10. 23:39
반응형

 이번에 리뷰할 논문은 SPPnet 'Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition' 입니다.

 


SPPnet 등장 배경

 SPPnet은 CNN 구조가 고정된 입력 이미지 크기를 입력으로 취하는 데에서 발생한 문제점을 개선하기 위해 고안되었습니다.

 

 기존 CNN은 고정된 입력 크기를 맞춰주기 위해서 crop, wrap을 적용합니다.

 

 참고로, crop과 warp은 classification에서는 data augmentation, detection에서는 region proposal을 입력 사이즈에 맞춰주기 위해 이용합니다.

 

 

 crop과 warp을 적용하면 문제점이 발생합니다.

 

 crop을 적용하면 crop된 구역만 CNN을 통과시키기 때문에, 전체 이미지 정보가 손실이 발생합니다.

 

 위 그림만 보더라도 자동차 사진을 입력 크기로 맞춰주기 위해 자동차가 잘려나간 것을 확인할 수 있습니다.

 

 또, warp을 적용하면 이미지에 변형이 일어납니다.

 

 등대가 기존의 가로세로비를 유지하지 못하고 옆으로 퍼진 채로 CNN을 통과하게 되는 것입니다.

 

 이처럼 입력 이미지 크기를 고정시키면 이미지 정보 손실과 변형이 발생합니다.

 

 

 그러면 왜 CNN은 입력 이미지 크기가 고정되어야 할까요?

 

 그 이유는 FC layer가 고정된 입력 크기를 필요로 하기 때문입니다.

 

 convolutional layer는 슬라이딩 윈도우 방식을 이용하기 때문에 고정된 사이즈가 필요하지 않습니다.

 

 

 SPPnet은 FC layer 이전에 Spatial Pyramid Pooling layer를 추가하여 convolutional layer가 임의의 사이즈로 입력을 취할 수 있게 합니다.

 

 입력 사이즈 제한을 제거함으로써 입력 이미지를 crop / warp 필요성을 없앤 것입니다.

 

 아래 그림처럼 spatial pyramid pooling layer를 추가하여 crop/warp 단계를 제거했습니다.

 

 

 어떻게 고정된 크기 제한을 제거했는지 알아보겠습니다.

 


SPP layer

 SPPnet은 5개 conv layer와 3개 fc layer를 활용합니다.

 

 SPP layer 위치는 conv5 layer 이후에 위치 시킵니다.

 

 SPP layer가 어떻게 작동하는지 알아보겠습니다.

 

 

 우선 spatial bins의 개수를 선정합니다.

 

 예를 들어 50 bin = [6x6, 3x3, 2x2, 1x1], 30 bin = [4x4, 3x3, 2x2, 1x1] 을 생각해 볼 수 있습니다.

 

 여기서 [6x6, 3x3, 2x2, 1x1]은 conv5의 feature map에 pooling을 적용하여 생성되는 출력 크기 입니다.

 

 위 그림에서는 21 bin = [4x4, 2x2, 1x1] 인 경우입니다. 21 bin의 경우에 3개의 pooling 으로 이루어져있습니다.

 

 각각의 pooling을 conv5 layer에 적용하여 특징을 추출하고 4x4, 2x2, 1x1의 크기를 출력합니다. 이를 일자로 피면 bin의 수가 되는 것입니다.

 

 입력 사이즈가 다양하므로 conv5에서 출력하는 feature map의 크기도 다양하게 됩니다.

 

 다양한 feature에서 pooling의 window size와 stride 만을 조절하여 출력 크기를 결정합니다.

 

 window size = ceiling(feature map size / pooling size)

 stride = floor(feature map size / pooling size) 로 계산하면 어떠한 feature map 크기가 오더라도 고정된 pyramid size를 얻을 수 있습니다.

 

 아래 표는 13x13 feature map에서 각각의 pooling의 window size, stride를 계산한 표입니다.

 

 [pool3x3] 의 window size = ceiling(13 / 3) = 5, stride = floor(13 / 3) = 4 로 설정되었습니다.

 

 

 그리고 SPP layer의 출력 차원은 k * M 이 됩니다.

 

 k는 conv5 layer에서 출력한 feature map의 filter 수 입니다.

 

 M은 사전에 설정한 bin의 수 입니다.

 

 위 그림에서는 256개의 feature map, 21개 bin이므로 SPP layer는 256 * 21 차원 벡터를 출력합니다.

 

 그리고 이 256 * 21 차원 벡터가 fc layer의 입력으로 통과합니다.

 

 feature map 크기와 관계 없이 bin과 feature map의 filter 수로 출력 차원을 계산하므로 고정된 차원 벡터를 갖게 됩니다.

 

 이를 통해 다양한 입력 이미지 크기를 입력 받아 다양한 feature map size가 생성되고 SPP layer를 거쳐서 고정된 크기의 벡터가 생성됩니다.

 


SPP-Net for Object Detection

  SPPnet을 object detection에 이용할 수 있습니다.

 

 

 R-CNN 단점과 SPPnet 장점을 먼저 살펴보겠습니다.

 

R-CNN 단점

 R-CNN은 이미지당 생성된 2000개의 region에 CNN을 적용합니다. 이는 시간이 오래 걸립니다.

 

SPPnet 장점

 (1) SPPnet은 CNN을 이미지에 한 번만 적용하여 속도가 빠릅니다.

 (2) CNN으로 생성된 feature map에서 selective search를 적용하여 생성된 window에서 특징을 추출합니다.

 (3) feature map에서 임의의 크기 window로 특징 추출이 가능합니다.

 (4) 입력 이미지의 scale, size, aspect ratio에 영향을 받지 않습니다.

 


SPPnet 작동 방식

 

(1) Selective Search를 사용하여 약 2000개의 region proposals를 생성합니다.

(2) 이미지를 CNN에 통과시켜 feature map을 얻습니다.

(3) 각 region proposal로 경계가 제한된 feature map을 SPP layer에 전달합니다.

(4) SPP layer를 적용하여 얻은 고정된 벡터 크기(representation)를 FC layer에 전달합니다.

(5) SVM으로 카테고리를 분류합니다.

(6) Bounding box regression으로 bounding box 크기를 조정하고 non-maximum suppression을 사용하여 최종 bounding box를 선별합니다.

 


참고 자료

[1] arxiv.org/abs/1406.4729

[2] penglog.tistory.com/21

[3] 89douner.tistory.com/89

[4] yeomko.tistory.com/14

반응형