본문 바로가기
딥러닝(Deep Learning)/논문 paper 리뷰

[X:AI] SPPNet 논문 이해하기

by rahites 2022. 7. 7.

SPPNet

 

SPPNet은 기존에 공개된 R-CNN의 단점을 극복하고자 소개된 논문이다. R-CNN은 Selective Search를 사용하였음에도 각 Region Proposal마다 분류를 실행하기에 속도가 비교적 오래걸리고, 여러 Region Proposal들을 모델이 요구하는 고정 Input size에 맞추기 위해 Cropping이나 Warping을 사용하기에 이미지 정보가 손실될 수 있다는 단점을 가진다. 또한 CNN, SVM, Bounding Box 선형 회귀까지 3개의 모델로 이루어져 있어 복잡한 구조를 가지며 Multi-stage로 구성되어 있어 SVM의 학습 결과가 CNN을 업데이트 할 수 없다.

 

SPPNet은 여러 R-CNN의 단점 중 Cropping이나 Warping을 사용하지 않고 가변적인 Input size를 가능케 하는데 초점을 맞춘 모델이다. 


SPPNet : Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition. 2014. 

 

0. Abstract

- 기존 CNN은 고정 크기의 입력 이미지가 필요하다는 단점을 지닌다.

- 따라서 이미지 크기에 상관없이 고정 길이 표현을 생성할 수 있는 "spatial pyramid pooling" 네트워크 구조를 제안한다.

※ CNN에 고정 크기의 입력이 필요한 이유
: Convolution 과정은 Sliding Window 방식으로 모든 크기의 feature map을 출력할 수 있어 입력의 크기와 상관이 없지만 Fully Connected Layer가 고정된 크기의 입력을 필요로 하기 때문이다. 

 

1. Introduction

- CNN은 고정 입력 이미지 크기를 제한하기 때문에 입력 이미지의 가로 세로 비율과 크기를 모두 제한한다.

- 따라서 CNN은 입력 이미지의 크기가 맞지 않을 경우 cropping이나 warping 방법을 이용한다. 하지만 이러한 방법들은 개체 전체를 포함하지 않을 수 있고, 내용물이 왜곡될 때 원치 않는 기하학적 왜곡이 발생할 수 있다. 

cropping & warping

- 위의 예시처럼 cropping을 할 경우 차의 전체 특성을 가져올 수 없고 warpping을 할 경우 기하학적 왜곡이 발생한다.

 

※ Spatial Pyramid Pooling

SPP를 이해하기 위해서는 우선 BoW(Bag of Words)와 SPM(Spatial Pyramid Matching)을 이해해야 한다. BoW(Bag of Words) 기법은 본래 NLP에서 등장한 기법으로 글에 포함된 단어들의 Frequency를 보고 해당 문서를 분류하는 기법을 의미하는데 이를 컴퓨터 비전에 적용시켜 이미지를 분류하거나 검색하는데에 사용하였다. 

Bag of Words : http://people.csail.mit.edu/torralba/shortCourseRLOC/index.html

예를 들어 위와 같이 3가지의 이미지가 있다고 가정할 때 각 이미지별로 Feature를 추출할 수 있다. 그렇게 찾아낸 Feature들을 Clustering을 통해 center를 찾아 codeword(Feature를 대표할 수 있는 값)로 저장한다. 그렇게 저장한 codeword들의 빈도수를 각각의 이미지에 대한 히스토그램으로 표현한다. 따라서 히스토그램을 보고 어떤 codeword가 많으면 어떤 이미지일 것이라는 추측이 가능하게 된다. 

 

하지만 이와 같은 Bag of Words 방법은 이미지의 위치 관계를 잃어버린다는 단점을 가진다. 따라서 이를 극복하기 위해 제안된 방식이 SPM(Spatial Pyramid Matching) 방법이다. SPM 방법은 이미지를 여러 영역으로 분할하여 각 영역마다 BoW를 적용한 방식이다.

Spatial Pyramid Matching / Spatial Pyramid Pooling [Lazebnik et al. 2006]

위와 같이 분할을 진행하지 않았을 때, 2x2로 분할 하였을 때, 4x4로 분할 하였을 때 등으로 진행하며 각각의 영역에서 BoW를 적용한 히스토그램의 결과가 모여 Pyramid를 형성한다. 이 때의 Pyramid는 각 level에서 나온 벡터들을 모두 결합하여 쌓이게 된다.

 

그렇다면 SPM과 SPP 방식의 차이는 무엇일까?

 

그 차이는 SPP의 이름에도 들어있듯이 Pooling에 있다. SPM이 벡터를 결합할 때 level 1 보다 깊어질 때 모든 벡터의 값을 합쳐서 Pyramid를 쌓아준다면, SPP는 각 요소의 Matrix에서 Max Pooling을 진행한 값을 추출해 결과 벡터에 추가해주는 방법을 취한다. 예를 들어 위 그림에서 level 1의 SPM 방식은 16개의 값을 벡터로 출력하지만 SPP 방식은 각 요소별로 Pooling을 진행하기 때문에 3개의 값만을 벡터로 출력해 주게 된다. 

 

이와 같은 SPP 방식을 사용하면 입력 크기와 상관없이 고정 길이의 출력을 생성할 수 있고 그 덕분에 다양한 scale의 feature들을 pooling하여 과적합을 방지하고 deep network의 정확도를 높이는 데 도움이 된다. 또한 Multi-level spatial bin을 사용해 객체 변형에 강하며, 입력 척도의 유연성 때문에 가변 척도로 추출된 특징을 pooling할 수 있다는 장점을 가진다.

 

https://darkpgmr.tistory.com/125

 

Bag of Words 기법

최근 Bag of Words (BoW) 기법에 대해 정리를 해 보려고 자료를 봤는데 생각보다 시간이 많이 걸렸습니다. 개념과 주요 접근법에 대해서만 정리하려고 했는데 어느 논문 하나에서 막히는 바람에 몇

darkpgmr.tistory.com

 

2. Deep Networks with Spatial Pyramid Pooling

- 기존 7-layer를 가지는 CNN 구조를 생각해보면 5개의 Convolutional layer(이 중 일부는 Pooling layer)와 2개의 Fully-connected layer로 구성되어 있다. Fully-connected layer는 softmax 함수를 거쳐 N개의 output을 만드는데 이 때에 layer에 입력되는 값이 고정된 크기여야 한다. 이미지를 Convolution layer를 거쳐 Feature map을 만들고 이 Feature map을 가지고 Fully-connected layer를 거쳐 N개의 라벨 값을 출력하는 것이다. 

A network structure with a spatial pyramid pooling layer

- 임의의 크기의 이미지에 대응하기 위해 마지막 pooling layer를 spatial pyramid pooling layer로 대체한다. 

- SPPnet은 5개의 Convolutional layer와 3개의 Fully-connected layer 으로 구성되어 있다. 

- bin의 개수를 정해서 주어진 input의 크기가 어떻든 정해진 개수로 이미지를 나누는 것이다.

- 위의 예시는 4x4, 2x2, 1x1 크기로 이를 펼치면 총 21개의 bin의 수가 나온다. 

- 각 spatial bin(격자) 마다 Max Pooling을 진행하고 그 결과로는 k x M 크기의 벡터가 나오게 된다. 이 때 k는 해당 계층의 필터 개수(위 사진에서는 256개)이고 M은 spatial bins의 개수(16+4+1=21)이다. 

Window / Stride size Calculation

Single-size training

- 입력 이미지가 일정하다면 SPP에서 사용하게 될 bin의 크기를 계산할 수 있는데 feature map의 크기가 A x A 이고 spatial bin의 크기가 N x N 일 때 Window의 크기는 ceiling(A/N)(올림), stride의 크기는 floor(A/N)(내림)으로 구할 수 있다.

- 이를 이용해 pyramid의 단계별 window의 크기와 stride의 크기를 구할 수 있다. 

An example 3-level pyramid pooling in the cuda-convnet style

Multi-size training

- Multisize의 이미지를 훈련할 때 크기가 다른 A x A, B x B 이미지가 있다면 우선 A x A 이미지를 전체 epoch만큼 훈련을 한 후, B x B 이미지를 전체 epoch만큼 훈련하고 이를 반복한다. 이 과정이 반복되게되면 Single-size의 이미지를 훈련할 때와 결과가 비슷해진다. 

- Single-size 방법이든 Multi-size 방법이든 학습에 사용하는 방법으로 Test에는 다양한 크기의 이미지를 사용할 수 있다.

 

3. SPP-Net for Image Classification

- 실험 과정과 결과를 서술한 부분

- ImageNet 2012 dataset으로 Train

- 계층의 깊이가 깊어질 수록 crop 이미지보다 전체 이미지를 사용할 때 성능이 좋다.

- ILSVRC 2014에서 GoogLeNet, VGG에 이어 3위에 해당하는 결과를 보였다. 

 

4. SPP-Net For Object Detection

- R-CNN은 이미지마다 만들어진 2000개의 region을 전부 통과시키기 때문에 시간이 오래 걸린다. 

- SPPNet은 input image를 한번만 CNN에 통과시켜 속도가 빠르고 CNN을 거쳐 만들어진 feature map에 selective search를 적용하여 만들어진 window에서 feature를 뽑아낸다. 

 

 

참고자료

https://techblog-history-younghunjo1.tistory.com/180

 

[ML] SPP(Spatial Pyramid Pooling) Object Detection 모델

🔊 해당 포스팅에서 사용된 컨텐츠는 인프런의 딥러닝 컴퓨터 비전 완벽 가이드 강의 내용을 기반으로 했음을 알립니다. 설명에서 사용된 자료는 최대한 제가 직접 재구성한 자료임을 알립니

techblog-history-younghunjo1.tistory.com

https://bkshin.tistory.com/entry/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-SPP-net-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0

 

논문 리뷰 - SPP-net 톺아보기

본 글에서 주요 내용 위주로 SPP-net 논문을 번역/정리했습니다. 글 중간에 로 부연 설명을 달아놓기도 했습니다. 틀린 내용이 있으면 피드백 부탁드립니다. 논문 제목: Spatial Pyramid Pooling in Deep Conv

bkshin.tistory.com


세 줄 요약

1. Input 이미지의 고정 크기 제한을 해결하기 위해 SPP 계층을 제안
2. SPP 계층을 통해 다양한 크기의 Input 값으로 부터 고정된 크기의 Feature Vector를 뽑아냄
3. Object Detection 분야의 선행 모델인 R-CNN 보다 속도가 빠름

댓글