R-CNN 이전의 object detection에 사용되던 방법들은

 

hand-crafted feature에 기반하는 SIFT와 HOG와 같은 알고리즘이였다.

 

AlexNet 이후에 버클리 연구팀이 CNN을 이용하여

 

detection 분야에 R-CNN이라는 알고리즘을 만들었다.

 

R-CNN: Regions with CNN features

먼저 입력 이미지로부터 약 2,000개의 후보 영역을 설정한다.

 

후보 영역 설정은 selective search 방법을 사용한다.

 

selective search는 계층적 그룹핑 방법이며, region의 유사도를 따져서 반복적으로 통합하는 방법이다.

 

후보 영역을 설정하면 해당 영역을 모두 동일한 224x224 크기로 warping을 수행한다.

 

AlexNet 구조를 활용했기때문에 입력 크기를 224x224 크기로 통일했다. (위 그림 3번)

 

마지막 layer인 FC를 통해 feature vector를 얻으면

 

linear SVM loss를 이용하여 해당 후보 영역에 대한 클래스를 분류한다.

 

selective search로 추출한 bounding box는 부정확하기 때문에 선형 회귀(linear regression) 방법을 사용한다.

 

아래 수식에서 x, y, w, h는 x, y 좌표, width, height를 뜻한다.

 

P는 selective search의 bounding box 이고 G는 ground truth의 bounding box이다.

 

P를 G로 회귀하도록 학습하는것이 목표이다.

 

Bounding Box Regression

x, y, w, h를 각각 이동하는 함수들을 표현하면 아래와 같다.

 

x, y는 좌표이기 때문에 이미지 크기에 관계없이 위치만 이동시키면 된다.

 

width와 height는 이미지 크기에 비례하여 조정해야 한다.

 

이러한 특성을 적용하여 P를 G로 이동시키는 함수는 식 (1), (2), (3), (4)와 같다.

 

여기서 학습을 통해 얻으려는 함수는 d 함수이다.

 

R-CNN에서는 d 함수를 구하기 위해 pool5 layer에서 얻은 feature vector를 사용했다. 식 (5) 아래.

 

loss 함수인 식 (5)에서 t는

 

P를 G로 이동시키기위해 필요한 이동량을 의미하며 식 (6), (7), (8), (9)와 같다.

 

결국 pool5 layer에서 얻은 feature vector와 x, y, w, h를 조정하는 함수의 w를 곱해서

 

bounding box를 조정해주는 regression을 학습한다.

 

R-CNN은 여러 문제점이 있다.

 

입력 이미지의 크기를 224x224로 강제 warping 했기 때문에 이로 인한 성능 저하가 있을 수 있다.

 

약 2,000개의 후보 영역(region proposal)에 대해 순차적으로 CNN을 수행해야해서 학습시간이나 추론(inference)시간이 오래 걸린다.

 

특히 후보 영역 검출 방법이 병렬적인 처리가 빠른 GPU 사용에 적합하지 않았다.

 

selective search는 CPU를 이용하는 알고리즘이다.

 

SPPNet은 R-CNN의 문제를 해결하려고 했다.

 

AlexNet에서 convolutional layer는 sliding window 방식이기 때문에 입력 크기에 영향을 받지 않으며,

 

뒤에 오는 FC layer만 입력 이미지 크기에 영향을 받았다.

 

Distortion due to Warping

위 그림은 crop이나 warping을 하면 왜곡이 발생하는 것을 보여준다.

 

이 문제는 crop이나 warp 대신 conv layer를 거치고 spatial pyramid pooling을 수행함으로써 해결했다.

 

spatial pyramid pooling은 pyramid 연산을 통해 입력 이미지의 크기에 따라 대응할 수 있게 한다.

 

SPPNet은 BoW(Bag of Word) 개념처럼 여러 단계의 pyramid 레벨에서 얻을 수 있는 feature들을 FC layer의 입력으로 사용하고,

 

pyramid 출력을 영상의 크기에 관계없이 사전에 미리 정하면,

 

이미지의 크기에 제한을 받지 않게 된다.

 

BoW 개념이란, 특정 객체를 분류하는데 굵고 강한 특징에 의존적인게 아닌

 

여러개 작은 특징을 사용하여 객체를 잘 구별할 수 있다는 것이다.

 

spatial pyramid pooling은 직전 conv layer 결과를 여러 단계의 pyramid로 나누고,

 

여러 단계에서 얻어진 결과를 concat하여 FC layer의 입력으로 사용한다.

 

여러 단계의 예시를 들면,

 

1단계는 1x1 pooling, 2단계는 2x2 pooling, 3단계는 4x4 pooling 이런식으로 spatial bin이라고 불리는 총 M개의 영역으로 나눈다고 볼 수 있다.

 

아래 그림을 보면 좀 더 쉽게 이해할 수 있다.

SPPNet

+ Recent posts