R-CNN
R-CNN에 대해 말하기 전에 Object Detection의 2가지 구조에 대해 알아보겠습니다.
Object Detection은 입력 이미지를 1-stage, 2-stage로 처리하는 구조로 나뉩니다.
2-stage Detector는 입력 이미지에서 이미지가 있을법한 영역(Region)을 제안하는 Region Proposal과 제안된 Region에 어떤 물체가 있을지 Classification을 수행하는 2개의 단계로 나누어 입력 이미지를 처리합니다.
1-stage Detector는 입력 이미지에서 이미지가 있을법한 Region을 찾는 것과 해당 Region에 어떤 물체가 있을지 Classification하는 것을 동시에 처리합니다.
2-stage Detector가 입력 이미지를 2단계로 나누어 이미지를 처리하기에 속도가 느리지만, 정확도가 높다는 특징을 갖고 있고, 반대로 1-stage Detector는 속도가 빠르지만, 정확도가 부족하다는 특징을 갖고 있습니다.
이제 R-CNN에 대해 알아보겠습니다.
R-CNN은 앞에서 말한 구조중에서 2-stage Detector에 해당합니다.
R-CNN은 CNN을 Object Detection분야에 처음으로 도입시킨 2-stage Detector의 초기모델입니다.
그렇다면 CNN은 어디에 사용되었을까요? R-CNN 모델 구조를 보며 알아보겠습니다.
위의 그림에서 파란색으로 묶인것이 Region Proposal 단계이고, 빨간색으로 묶인것이 Classification단계입니다. 어떻게 R-CNN이 입력 이미지에서 Object Detection을 수행하는지 봅시다.
1) Selective Search알고리즘을 사용하여 RoI(Region of interest)를 추출합니다.
여기서는 입력 이미지 안에 물체가 있을 법한 영역을 찾는 것이 목표입니다.
이때 Selective Search 알고리즘을 사용합니다. Selective Search알고리즘은 객체의 주변간의 색감, 질감 차이, 다른 물체에 애워 쌓여 있는지 여부 등을 파악하여 인접한 유사한 픽셀끼리 묶어 물체의 위치를 파악할 수 있도록 하는 알고리즘입니다. 1개의 입력 이미지가 Selective Search 알고리즘을 통과하면 약 2000개의 RoI가 추출됩니다.
2) 추출된 RoI를 warp하여 pre-trained CNN에 넣고, 4096차원의 Feature Vector를 추출합니다.
추출된 RoI에 어떤 Object가 있는지 파악하기 위해 Pre-trained CNN에 RoI를 넣어 RoI의 Feature vector를 얻습니다. 이때 사용되는 CNN 모델은 당시 SOTA를 달성했던 AlexNet 구조를 재사용하였고, AlexNet의 Input size인 227x227를 맞춰주기 위해 추출된 2000여개의 RoI를 227x227크기로 warping하는 작업을 수행합니다. Pre-trained CNN을 거친 RoI는 4096차원의 Feature Vector로 변환됩니다.
3) 추출된 Feature Vector를 SVM을 이용하여 Classification을 수행합니다.
추출된 Feature Vector는 Linear SVM을 사용하여 Classification 작업을 수행합니다. 이때 Classifier로 SoftMax를 사용하지 않은 이유는 SVM에 비해 성능이 떨어져서 라고 합니다.
4) RoI의 Bounding Box와 Label y의 Regression 연산을 통해 Bounding Box 위치를 조정합니다.
Object Detection Data의 Label로는 Bounding Box를 줍니다. Label y와 RoI를 통해 나온 Bounding Box와의 차이를 최소화하도록 조정하는 Bounding Box Regression 작업을 수행합니다.
R-CNN의 한계
1. Selective Search를 통해 추출한 RoI 2000여개를 모두 CNN에 넣기 때문에 시간이 오래 걸립니다.
2. CNN의 입력을 위한 Warping 과정에서 이미지 정보가 손실됩니다.
3. CNN, SVM, Bounding Box Regression 3가지 단계가 따로 학습 과정을 거쳐야 합니다.