본문 바로가기
논문 리뷰/Object Detection

[논문 리뷰] SPPNet(2014) 설명 (Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)

by inhovation97 2022. 11. 3.

 

R-CNN에 이어 SPPNet 논문을 리뷰합니다. 

사실 SPPNet은 풀링기법을 제안하는 논문이라서 object detection뿐만 아니라 CNN에 전부 적용할 수 있지만, R-CNN에서의 큰 단점을 커버하면서 추천되는 object detection논문들에서 빠지지 않습니다.

 

해당 논문에서는 "SPP-Net for Object Detection"부분이 있습니다. 

이 부분을 위주로 어떻게 적용하는지에 대해 포스팅합니다.

이전 R-CNN 포스팅

1. Abstract
2. 기존 CNN의 문제점
3. Spatial Pyramid Pooling Layer 작동원리
4. R-CNN 적용
5. 문제점

 

 

1. Abstract

 

당시 CNN은 고정된 사이즈의 224x224 해상도의 이미지만 입력 받았습니다. 이 조건은 굉장히 "artificial"합니다. arbitrary(제각각인)한 이미지를 일정 사이즈로 제한하면, 성능에도 영향을 미칠겁니다.

(FC layer에서 고정길이 벡터만 받을 수 있기 때문)

 

따라서 해당 논문에서는 이러한 조건을 없애기위한 "spatial pyramid Pooling"이라는 풀링기법을 제안합니다. 

제안한 기법을 SPP-net이라고 이름을 붙이며, 이를 이용하면 이미지의 사이즈나 스케일에 상관없이 고정된 길이의 벡터를 생성할 수 있습니다.

Classification task에서도 SOTAR의 성능입니다.

 

또 SPP-net은 obj-detection에서 매우 유용한데, SPP-net을 이용하면 CNN에 image를 딱 1번만 입력하면 됩니다.

(R-CNN에서는 생성된 RoI 2,000개를 전부 입력했었음.)

 

 

 

2. 기존 CNN의 문제점

 

Abstract에서도 언급했지만 기존 CNN은 큰 문제점이 하나 있습니다. 

fc layer가 고정된 사이즈의 벡터만 입력으로하기 때문에 반드시 이미지를 위와 같이 자르거나 비율을 왜곡시켜서 정방형으로 리사이징하여 CNN에 입력해야했습니다. 이는 고정 사이즈를 받는 SVM으로 분류하는 R-CNN에서도 마찬가지였습니다. 

 

컨볼루션 필터는 이미지를 슬라이딩 윈도우 방식으로 훑어나가는데, 위 그림처럼 이미지 내의 객체가 잘리거나 비율이 왜곡되어 입력되면 성능저하가 우려됩니다. 특히 이미지 내 객체를 검출하는 Object detection모델은 더욱 치명적일 수도 있을 것 같습니다. 

 

사실 Fc layer전까지의 CNN 자체는 임의의 사이즈(arbitrary)를 넣어도 괜찮기 때문에 본 논문의 핵심은 원본 영상을 왜곡없이 입력으로 넣어 feature들을 압축하면, 이를 최종적으로 fc layer에 맞게 고정 길이의 벡터로 압축하는 풀링 방법론을 제안합니다. 

이 방법이 Object Detection 모델에 크게 유효했습니다.

 

 

 

3. Spatial Pyramid Pooling Layer 작동원리

 

이미지를 보면서 이해하면 쉽습니다. 

input image가 고정 사이즈가 아니었기 때문에 최종 Conv를 거친 Feature map은 사이즈가 arbitrary합니다.

이때 feature map사이즈가 어떻든간에 피라미드 풀링을 하면 전부 bin x 256 으로 feature를 고정된 사이즈로 압축가능합니다.

 

Spatial Pyramid Pooling 적용 예시

직접 그려서 올리니 좀..ㅋㅋㅋ,,

위처럼 다양한 사이즈를 동일한 feature map에 적용해서 전부 Concat하는 구조라 "피라미드"라는 이름을 붙인 것 같습니다.

위에 figure 3을 그대로 하여 Conv`5에서 나온 feature map에 bin=21인 피라미드 풀링을 적용하면, 제가 그린 그림처럼 최종 벡터가 완성됩니다. 

이때 풀링 전 검은색 feature map은 arbitrary size이지만, 최종적으로 완성되는 벡터는 bin * 256(최종 feature map의 채널)으로 고정될 수 있는거죠.

 

맥스 풀링도 window size랑 stride가 있습니다.

최종 feature map(그림에서 검은색 feature map)의 사이즈를 axa라고 할 때 적용하려는 피라미드 풀링 사이즈가 n x n이면 윈도우 사이즈는 ceiling(a/n), stride는 floor(a/n)입니다. (각각 소수점 올림, 버림)

빨간색 풀링은 흔히 알고있는 Global max Pooling이 되겠네요.

 

( 사실 이렇게 다양한 사이즈로 풀링을 진행하면, 정보가 더욱 다양해지는 효과가 있습니다. 다양한 사이즈의 객체를 검출하는 데에 유리한 장점이 있게되죠! SPP는 그렇게 정교한 구조는 아니지만.,, 나중에 YoLo도 이 부분에 초점을 맞춰서 아키텍쳐를 발전해갑니다. )

이건 논문 내에서 13x13 feature map에서 bin = 14를 적용한 피라미드 풀링이라고합니다.

pool 3x3의 윈도우 사이즈 = ceiling(13/3) = 5

pool 3x3의 stride사이즈 = poor(13/3) = 4

 

 

 

4. R-CNN 적용

 

이제 R-CNN에 SPP기법이 어떻게 적용되는지 봅시다.

1. 영상에 대해 Selective Search를 적용하여 RoI 후보군을 추출합니다.

2. 영상을 crop & warp를 하지 않고, 그대로 ConvNet에 입력합니다. (2,000 -> 1번의 입력)

3. 컨볼루션으로 나온 최종 Feature map에 원본 영상에서 압축된 비율과 동일하게 2,000개의 RoI도 전부 축소시켜(projection) 이를 Feature map에 적용합니다. (이미지 왜곡 문제 해결)

4. feature map으로부터 추출한 RoI feature에 SPP를 적용합니다. (고정된 벡터로 압축가능)

5. 압축한 벡터를 SVM에 입력하여 class 분류

6. b-box 회귀 진행

7. NMS로 객체별 최종 b-box 예측

사실 저도 6,7번의 순서는 잘 모르겠습니다 하하... 

 

 

 

5. 문제점

 

아직 해결해야 할 문제점은 남아있습니다.

 

1. end to end가 아니라서 feature들을 저장하여 알고리즘들을 각각 따로 학습시켜야 한다. 

2. 각각 학습을 하기 때문에 CNN 알고리즘도 svm과 regressor의 결과와 독립적으로 학습되어 아쉽다.

 

다음 포스팅은 end-to-end 문제를 해결한 Fast R-CNN입니다!

'논문 리뷰 > Object Detection' 카테고리의 다른 글

RoI(Region of Interest) Pooling 이해하기  (0) 2022.12.01
[논문 리뷰] R-CNN (2014) 설명  (0) 2022.11.02

댓글