YongWook's Notes

<인공지능> Multiple-Object Detection (2) - SPP-Net 본문

-software/AI

<인공지능> Multiple-Object Detection (2) - SPP-Net

글로벌한량 2017. 3. 14. 19:17

오후 내내 작성하던 포스트를 다 날리고 처음부터 다시 작성하려니 마음이 아프다...

이전 포스트에서 Multiple-Object Detection의 첫주자로 R-CNN를 다뤄보았다. 

요약하자면, R-CNN은 먼저 Input image를 Selective Search를 통해 Object 후보들을 뽑는다. 그리고 이 후보들을 각각 Conv layer에 넣어 Feature를 추출하고 Classifier에 넣어 분류하는 동시에 Bounding Box를 그려낸다. 

하지만 직사각형 등으로 검출되는 Object를 Conv layer의 Input size에 맞추기 위해 Warping 하면서 생기는 정보왜곡의 문제와 3단계 파이프라인 구조와 많은 양의 Convolution 연산에서 오는 저속의 문제가 R-CNN의 단점이었다. 이번 포스트에서는 R-CNN의 문제를 어느정도 해결한 SPP-Net에 대해서 알아보자.




SPP-Net

SPP는 Spatial Pyramid Pooling의 줄임말이다. 이것에 관해서는 뒤에서 다루기로하자. 일단은 SPP-Net이 어떻게 만들어졌을지 생각해보자.

나는 Multiple-Object Detection을 하려고 한다. R-CNN을 쓰려고 보니, Input image에서 Object 후보들을 찾는 것 까지는 좋은데, 이들을 Conv layer의 Input size로 Warp할때 정보왜곡현상이 생긴다는 점이 마음에 들지 않았다. 그런데 잘 생각해보니 Input image를 굳이 먼저 자르지 않더라도 Conv layer에서 이미지를 여러개의 filter로 잘라서 Feature Extracting을 수행한다. 즉, Conv layer에서 Cropping과 Warping의 기능을 할 수 있을 것 같다. 그래서 다음과 같이 순서를 바꿔보았다.

전체 Input image를 Conv layer에 넣고 Feature를 추출한 후, 검출된 Feature들을 SPP-layer에 입력한다. 그리고 그 결과를 Fully-Connected layer의 입력으로 사용한다.

SPP-Net에서는 이러한 구조적 순서 변화를 통해 인위적인 image crop이나 warp을 통한 정보손실을 막을 수 있었고, R-CNN과 달리 CNN 연산이 한번만 요구되므로 속도도 훨씬 빨라질 수 있었다.

다음은 SPP-Net의 전체적인 구조이다. Spatial Pyramid Pooling layer 부분에 집중하자.


그렇다면 SPP-layer가 하는 일이 무엇인지 궁금하다. SPP-layer는 Conv layer에서 추출된 Feature를 입력으로 받고 이를 Spatial bin 이라고 불리는 1*1, 2*2, 3*3, 4*4 등의 filter들로 잘라내어 pooling한다. 그리고 각각의 결과를 Concatenate하는데 이 과정에서 Feature Map Local정보를 취합하여 RoI(object) 탐색을 수행된다. 이것은 BoW(Bag of Word)라는 개념을 사용한 것인데, 간단히 말하자면 특정 개체의 분류에 '굵은 소수'의 특징이 아닌 '작은 다수'의 특징에 의존하는 방법이다.

FC layer는 항상 고정된 size의 입력을 요구한다. 이것을 맞춰주기 위해 R-CNN에서는 Conv layer를 그대로 두고 Input image의 size를 제어했던 것이고 SPP-Net은 Input Image를 그대로 두고 Conv layer의 결과물인 Feature Map을 SPP-layer를 이용하여 제어했다고 생각할 수 있다.  이 부분에 대해서 다음 그림을 참조하자.


SPP-Net 구조의 마지막에는 Classifier와 Bounding Box Regressor를 FC-layer 위에 올리게 된다.

-결과

SPP-Net은R-CNN에 비해서는 훨씬 빠르다. 인위적인 Crop과 Warp도 효과적으로 없앴다. 하지만 여전히 Training에서 3단계 파이프라인을 사용한다는 점이 남았다. 또한 Backpropagation을 할때, SPP-layer 하단의 ConvNet으로는 학습을 할 수 없다. 이것은 SPP-Net의 성능 저하를 불러왔다. 

하나 더 꼽자면, SPP-layer에서 Region 단위 연산을 수행하면서 뽑아낸 RoI에 따라 학습의 무게가 쏠린다는 단점도 있다. 다시 말해, Image Centric이 아닌 RoI Centric이기 때문에 각 Training Sample의 RoI들이 서로 다른 이미지에서 왔을 때 비효율적인 Backprogagation이 된다. 

이러한 남은 문제들을 해결하기 위해 Multiple-Object Detection의 다음 계보는 Fast R-CNN으로 향한다.


Comments