[Paper] R-CNN(2013)

logger_j_k·2022년 3월 9일
0

용어 정리

  • Non-maximum suppression(NMS, 최대 억제)
    • 한 물체에 여러 bounding box가 있을 때, 한 bounding box만을 남기도록 하는 기술.
    • 가장 점수(confidence)가 높은 bounding box 기준으로 나머지 bounding box를 제거한다.
    • 관련 블로그 링크
  • agnostic detection : 물체의 종류(class)를 모르는 상태에서도 object를 detect한다는 것을 의미함
  • Hard Negative Mining : Object Detection에서 배경인데 사람이라고 잘못 예측하는 경우(Hard Negative, False Positive)가 있다. 이러한 사례들을 모아서(Mining) 데이터셋에 추가하고 재학습하면 오류에 강해지게 된다.
  • Object Detection에 이용되는 Metric(IoU, mAP ...) 설명

요약

  • simple and scalable detection 알고리즘
  • mean average precision(mAP) 53.3% 달성. 이전 VOC 2012 베스트 모델보다 약 30% 향상
  • 인사이트
    • object를 localize, segment하기 위한 bottom-up region proposal에 CNN을 사용
    • 레이블링된 훈련 데이터가 부족할때, supervised pre-training for an auxiliary task ➡️ domain specific fine-tuning이 굉장한 성능 향상을 보여줌.
  • Region Proposal에 CNN을 사용하기 때문에 이름을 R-CNN이라고 붙임 : Regions with CNN features
  • 비슷하게 OverFeat이라는 CNN 기반 sliding-window dector가 최근에 나옴. R-CNN은 ILSVRC2013 200 class detection dataset에서 큰 차이로 OverFeat을 압도함

1. Introduction

대충 이전 모델들 이야기를 나열한다. SIFT, HOG ... 그리고 CNN의 등장. CNN localization 문제를 "recognition using region" 패러다임으로 접근. 이 패러다임은 object detection과 semantic segmentation 둘 다 성공적이었다.

위 그림은 R-CNN의 전체적인 동작 과정을 한눈에 보여주고 있다. Test time에서는 (1) 2000개의 category independent region porposal을 진행 (2) 각각의 proposal에서 CNN을 이용해 고정된 크기의 feature vector를 뽑아낸다 (3) 카테고리 별로 liner SVM을 이용해서 classification을 진행한다. 과정 (2)에서 CNN의 input 크기를 고정하기 위해서 affine image warping을 진행한다.

이전까지의 문제 중 하나는 레이블링 된 데이터의 양이 CNN을 훈련하기에 충분하지 않다는 것이었다. 전통적인 해결방법은 (1) unsupervised pre-training ➡️ suervised fine-tuning이었다. 이 논문에서는 (1) auxiliary dataset(ILSVRC)에 대해서 supervised pre-training ➡️ 작은 dataset (PASCAL)에 domain-specific fine-tuning 방법론을 제시함.

논문은 R-CNN이 계산량 면에서도 효과적임을 주장. 클래스마다 합리적일만큼 작은 행렬-벡터 곱(SVM weight ×\times feature) 과 greedy non-maximum suppression(최대 억제)를 사용하기 때문.

2. Object Detection with R-CNN

크게 3가지 모듈로 구성됨

  1. Region Proposal : detector에서 제공되는 후보 지역들을 선별함 (selective search)
  2. CNN : 각 region에서 fixed-length feature를 추출
  3. Linear SVM : 클래스별로 classification

2.1 Module Design

Region Proposal

많은 방법이 있지만 그 중 selective search를 사용. Test time일때는 항상 fast mode를 이용한다.

Feature Extraction

  1. Bounding box를 pp 픽셀만큼 확장하여, 이미지 주변의 컨텍스트가 포함될 수 있도록 한다.
  2. 227×227227 \times 227 사이즈로 이미지를 변형한다.
  3. CNN에 이미지를 넣는다. CNN은 5개의 Convolutional 레이어와 2개의 Fully Connected 레이어로 구성된다. 결과물로 4096 feature 벡터를 얻는다.

2.3 Training

Supervised pre-training

Large auxiliary dataset(ILSVRC2012 classification)을 이용해 CNN을 pre-training.

Domain-specific fine-tuning

SGD를 이용해 새로운 task(detection)와 새로운 domain(warepd proposal window)에 대해서 CNN을 학습한다. ImageNet을 위한 1000-way classification layer 대신 랜덤하게 초기화된 (N+1)(N+1)-way classification layer를 사용한다. (NN은 object class의 개수, 11은 background) Ground-box와의 IoU 점수가 0.5 이상인 모든 region proposal을 참(positive)로 간주하며 나머지는 거짓(negative)으로 처리한다. pre-training에서 사용했던 값의 1/101/10인 0.001의 learning rate를 사용하며, 이는 pre-training으로 얻은 초기 값을 망치지 않고 fine-tuning하기 위함이다. 각각의 SGD iteration에서 논문은 32개의 (모든 클래스를 포함한) positive window, 96개의 background window를 샘플링하여 128의 배치 사이즈가 구성된다. background에 비해 positive window의 개수가 훨씬 적기 때문에, 샘플링을 postive window를 더 많이 뽑도록 편향시킨다.

Object category classifier

Background region이 negative라는 것은 명확하다. 그러면 일부분만을 포함하고 있는 region은 어떻게 대처해야 하나? 논문은 IoU Overlap Threshold라는 개념을 통해서 이를 해결한다. IoU 점수가 Threshold보다 낮으면 negative로 간주하겠다는 것이다. 논문은 validation set에서 grid search를 통해 탐색한 결과, 최적값으로 0.3을 선택했다.

feature가 추출되면, 클래스당 하나의 linear SVM을 학습시킨다. 훈련 데이터가 메모리에 담기에 너무 크기 때문에 standard hard negative mining method를 사용한다.

Results


VOC2010 테스트. 당시의 다른 모델들보다 훨씬 높은 성능을 보여준다. 특히 같은 region proposal 방식을 사용한 UVA와 비교하면, R-CNN의 구조의 성능이 당대의 모델들보다 훨씬 뛰어나다는 것을 볼 수 있다.


ILSVRC2013에서도 역시 우수한 성능을 보인다. 비슷한 성능을 보이는 모델들은 모두 CNN을 사용했다는 점에서 CNN의 능력 역시 엿볼 수 있다.

Appendix C. Bounding-box regression

논문은 localization 향상을 위해서 bounding-box regression을 사용한다. 입력으로는 (1) CNN을 통해서 얻은 feature vector (2) selective search가 예측한 bounding-box이다. 수식적인 설명은 다음과 같다.

N개의 training sample에 대해서, (Pi,Gi)i=1,...,N{(P^i, G^i)}_{i=1,...,N}이 있을 것이다. (이후 표시에서 윗 첨자 ii는 생략한다.) P=(Px,Py,Pw,Pz)P = (P_x, P_y, P_w, P_z)이다. 각각 중심 좌표 (x,y)(x,y), width, height를 나타내는 값들이다. GG는 이 값들에 대한 ground-trugh (Gx,Gy,Gw,Gz)(G_x, G_y, G_w, G_z)이다. 목표는 PPGG로 변환하는 것이다. 이는 다음의 과정을 통해 얻을 수 있다.

G^x=Pwdx(P)+Px\hat{G}_x = P_wd_x(P)+ P_x
G^y=Phdy(P)+Py\hat{G}_y = P_hd_y(P)+ P_y
G^w=Pwexp(dw(P))\hat{G}_w = P_w\text{exp}(d_w(P))
G^h=Phexp(dh(P))\hat{G}_h = P_h\text{exp}(d_h(P))

각각의 d(P)d_(P)는 다음 수식을 통해 얻을 수 있다. 이때, wT\mathbf{w}^T는 학습 가능한 모델 파라미터에 해당한다.

d(P)=wTϕ5(P)d(P) = \mathbf{w}^T\phi_5(P)

w\mathbf{w}는 다음과 같은 regularized least square objective를 통해 학습한다.

w=arg minw^iN(tiw^Tϕ5(Pi))2+λw^2\displaystyle \mathbf{w} = \argmin_{\hat{\mathbf{w}}} \sum_i^N(t^i - \hat{\mathbf{w}}^T\phi_5(P^i))^2 + \lambda ||\mathbf{\hat{w}}||^2

(P,G)(P,G)에 대한 regression target tt는 다음과 같이 정의된다.

tx=(GxPx)/Pwt_x = (G_x - P_x)/P_w
ty=(GyPy)/Pht_y = (G_y - P_y)/P_h
tw=log(Gw/Pw)t_w = log(G_w / P_w)
th=log(Gh/Ph)t_h = log(G_h / P_h)

논문에서는 두가지 이슈가 있었음을 밝히고 있다. (1) regularization은 중요했다. 저자들은 validation set에서 λ=1000\lambda = 1000으로 설정했다. (2) 만약 PP가 ground-truth box GG로부터 너무 멀리 떨어져 있다면 transformation은 의미가 없다. 따라서 저자들은 proposal PP가 최소한 하나의 ground-truth box와 근접해 있을 경우에만 학습을 진행했다. "근접성"이라는 개념을 구현하기 위해서, overlap이 threshold보다 큰 경우에만, PP를 가장 IoU가 높은 ground-truth box인 GG에 할당했다. 할당되지 않은 모든 propsal은 사용되지 않았다. 저자들은 클래스마다 bounding-box regressor를 학습하기 위해 각 object class마다 한번씩 진행하였다.

Test time에서, 저자들은 각각의 propsal에 점수를 매긴 다음, 새로운 window detection을 한번 진행했다. (새로운 window에 대해 점수를 얻고 새 bounding box를 예측하는 것처럼) 이 과정을 반복할 수도 있었지만 결과 향상에 도움이 되진 않았다.

profile
코딩하는 개발자

0개의 댓글