본문 바로가기

딥러닝/Object Detection

R-CNN

R-CNN이란?

Region with Convolutional Neuron Networks features의 약자이며 2-Step Detector 입니다.

Region proposal(Selective search)에서 설정한 Region을  CNN의 입력으로 사용하여 Object detection을 수행하는 모델입니다.

R-CNN은 2014년 CNN을 Object Detection 분야에 최초로 적용시킨 모델이며 CNN을 이용한 검출 방식이 Classification 뿐만아니라 Object Detection 분야에도 사용될 수 있다는 가능성을 보여준 모델입니다.

R-CNN의 기본적인 구조는 전체 Task를 두 단계(2-Stage Detector)로 나눌 수 있습니다.

  1-Step: 물체의 위치를 찾는 Region Proposal

  2-Step: 물체를 분류하는 Region Classification

 

위의 Step을 좀더 자세하게 살펴보면 다음과 같습니다.

  1. Reigion Proposal로 이미지에 있는 Object 영역을 찾습니다. (2000개 Bounding box를 추출)
  2. Proposal된 영역으로 부터 고정된 크기의 Feature Vector를 Warping/Crop 하여 CNN(Alex Net)의 입력으로 사용합니다.
  3. CNN을 통해 나온 Feature map을 SVM(Support Vector Machine) 입력으로 사용하여 Classification을 합니다.
  4. Regressor를 통한 Bounding box regression 진행합니다.

1. Regison proposal

Region proposal

R-CNN에는 입력 데이터가 Image와 Label(Class, Bounding box)로 구성되어 있습니다.

R-CNN은 이 단계에서 Selective search라는 알고리즘을 사용합니다.

Select search

우선 임의의 Bounding box를 설정합니다. Selective serach 알고리즘은 Segmentation 분야에 많이 쓰이며, 객체와 주변의  Color/Texture의 차이, 다른 물체에 에워싸여 있는지(Enclosed) 여부등을 파악해서 인접한 유사한 픽셀끼리 묶어 물체의 위치를 파악할 수 있도록 하는 알고리즘 입니다.

Selective serach

  1. Bounding box들을 Random하게 작게 많이 생성합니다.

Box들을 계층적으로 Grouping 알고리즘을 사용해 조금씩 Merge 합니다.이를 바탕으로 RoI(Region of Itnerest) 영역을 제안합니다.

2. CNN (Alex Net)

CNN

Region proposal 영역으로 부터 고정된 크기의 Feature vector를 입력으로 받아 같은 크기로 Warping 시킨후 CNN입력으로 들어 갑니다. 위의 그림에서 처럼 각각 Selective search로 부터 Proposal된 ROI의 수 만큼 반복하여 CNN을 연산을 수행합니다. (이 부분이 비효율적이라서 후속 모델인 Fast R-CNN에서는 개선됩니다.)

다른 사이즈 이미지들을 모두 같은 정사각형으로 자르고 줄여서 만든 이미지

CNN은 입력 값의 크기가 고정되어 있기 때문에 , 이들을 모두 CNN으로 입력을 위해 여러 사이즈로 나온 Bounding box들을 같은 사이즈(227X227)로 통일 시키는 Warping을 수행합니다.

 

Alex Net(Image Net) 구조 사용

AlexNet Network 마지막 부분을 Detection을 위한 Class 수만큼 바꾸고 Object Detection용 Dataset을 집어넣어 Fine-Tuning을 진행합니다.
각각의 Region Proposal로부터 4096-dimentional feature vector를 뽑아내고, 이는 Fixed-length Feature Vector를 생성합니다.

3. SVM (Support Vector Machine)

SVM

CNN 모델로 부터 Feature가 추출되면 Linear SVM을 통해 Classification을 수행합니다.

SVM은 CNN으부터 추출된 Feature들을 입력으로 사용하여 Object의 Class를 판별하는 Classifier 작업을 수행합니다.

왜 Softmax 대신 SVM을 사용했을까요?

R-CNN이 Classifier로 Softmax를 쓰지 않고, 그 당시에도 구식 분류 모델인 SVM을 사용한 이유는 R-CNN 논문에서 Appendix B 부분에 개재해 놓은 바와 같이 VOC2007 데이터셋 기준으로 Softmax를 사용했을 때  mAP(mean Average Precision)의 수치가 54.2%에서 50.9%로 떨어졌다고 합니다.

정리하면 SVM은 CNN으로부터 추출된 각각의 Feature vector들의 점수를 Class별로 매기고, 객체인지 아닌지, 객체라면 어떤 객체인지 등을 판별하는 역활을 하는 Classifier 입니다.

3. Bounding box regression

Bounding box regression

위의 그림에서 빨간색으로 표시한 bBox reg 부분에 해당 합니다. bBox Reg(Bounding box regression)은 정답 레이블(실제 Object의 영역)과 CNN의 출력으로 나온 Feature map을 통해서 얻은 Bounding box의 두가지의 차이를 계산하여 오차를 줄이도록 조정하는 Linear regression 모델입니다.

Bounding box regression 동작 원리
Bounding box regression 수식

위 그림에서 P(Regision proposal)을 통해서 제안된 Bounding box이고, G(Ground truth bounding box(정답))입니다.

여기시 P를 정답 G에 맞추도록 학습하는 것이 Bounding box regression의 역활입니다.

R-CNN의 단점

Selective search로 2000개의 region proposal을 생성하고 각 영역마다 CNN을 수행하기 때문에 CNN 연산 X 2000만큼의 시간이 걸려 수행시간이 매우 느립니다.

CNN, SVM, Bounding box regression 총 3가지의 모델이 Multi-stage piplines으로 end-to-end로 학습할 수 없습니다. 각  Regison proposal에 대해 CNN 연산을 공유하지 않기 때문입니다.

'딥러닝 > Object Detection' 카테고리의 다른 글

YOLO (You Only Look Once)  (0) 2021.11.04
Faster R-CNN  (0) 2021.11.04
Fast R-CNN  (0) 2021.11.04
1-Stage detector vs 2-Stage detector  (0) 2021.11.04
Introduction  (0) 2021.11.03