Published on

논문 리뷰 R-CNN

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

서론

Region proposals with CNNs(R-CNN 이라는 Object Detect 분야의 새로운 방향을 제시하는 논문입니다.

그 이전까지 최고의 성능을 나타낸 기법의 mAP보다 30% 높은 53.3%를 달성하여 detection 분야에 새로운 방향을 제시하게 됩니다. object detection의 성능 평가 지표는 mAP(mean average precision)입니다.

물체 인식(Object Detection)은

이미지 내에 관심이 있는 객체의 위치(Region of Interest)에

물체의 위치를 알려주기 위한 Bounding Box를 그려줘야 하고,

다수의 Bounding Box를 다양한 Object 종류에 대하여 찾아줘야 하기 때문에

이미지 분류 보다는 훨씬 복잡한 문제입니다.

물체 인식

일단, R-CNN의 구조는 다음과 같습니다

R-CNN 구조

본론

일단 전체적 구조는 다음과 같습니다.

  1. 입력 이미지에 Selective Search 알고리즘을 적용하여 bounding box(region proposal) 2000개를 추출합니다.
  2. croping & wraping을 사용해 추출된 bounding box를 CNN에 입력합니다.(227 x 227 pixel size)

(논문에서는 warp 과정에서 object 주변 16 픽셀도 포함하여 성능을 높였다고 합니다.)
Prior to warping, we dilate the tight bounding box so that at the warped size there are exactly p pixels of warped image context around the original box (we use p = 16).

  1. fine tunning 되어 있는 pre-trained CNN(AlexNet)을 사용하여 bounding box의 4096차원의 특징 벡터를 추출합니다.
  2. 추출된 특징 벡터를 SVM을 이용하여 class를 분류합니다.
  3. bounding box regression을 적용하여 bounding box의 위치를 조정합니다.

R-CNN은 2-stage Detector방식으로서 전체 Task를 크게 두 가지 단계로 나누어 진행합니다.

  1. 첫 번째 단계Region Proposal입니다. (물체의 위치를 찾는 일) Region Proposal은 물체가 있을법한 위치를 찾는 작업이며, R-CNN에서는 region proposal의 단계에서 Selective Search이라는 모듈을 사용하였습니다.

Selective Search알고리즘은 Segmentation 분야에 많이 쓰이는 알고리즘이며, 객체와 주변간의 색감(Color), 질감(Texture) 차이, 다른 물체에 애워쌓여있는지(Enclosed) 여부 등을 파악해서 다양한 전략으로 물체의 위치를 파악할 수 있도록 하는 알고리즘입니다. 아래의 그림과 같이 Bounding box들을 Random 하게 많이 생성을하고 이들을 조금씩 Merge하며 물체를 인식해나가는 방식으로 되어있습니다.

selective search

Feature Extraction Selective Search를 통해서 찾아낸 2천개의 박스 영역은 227 x 227 크기로 리사이즈 됩니다. (warp) 그리고 Image Classification으로 미리 학습되어 있는 CNN 모델을 통과하여 4096 크기의 특징 벡터를 추출합니다.

이때, 미리 학습된 모델(AlexNet)이 구체적으로 어떤 것을 의미하는지 살펴보겠습니다.

저자들은 이미지넷 데이터(ILSVRC2012 classification)로 미리 학습된 CNN 모델을 가져온 다음, fine tune하는 방식을 취했습니다.

fine tune 시에는 실제 Object Detection을 적용할 데이터 셋에서 ground truth에 해당하는 이미지들을 가져와 학습시켰습니다.

그리고 Classification의 마지막 레이어를 Object Detection의 클래스 수 N과 아무 물체도 없는 배경까지 포함한 N+1로 맞춰주었습니다.

fine tune을 적용했을 떄와 하지 않았을 때의 성능을 비교해보면 아래와 같습니다.

FT는 fine tune의 약자이며, 각 CNN 레이어 층에서 추출된 벡터로 SVM Classifier를 학습시켜서 얻은 mAP를 비교한 것입니다.

그리고 BB로 적힌 것은 Bounding Box Regression을 적용한 것으로 조금 아래에서 설명하겠습니다.

파인튜닝 후 결과가 좋아짐(표)
  1. 두 번째 단계Region Classification (물체를 분류하는 일)

정리하자면, 미리 이미지 넷으로 학습된 CNN(AlexNet)을 가져와서, Object Detection용 데이터 셋으로 fine tuning 한 뒤, selective search 결과로 뽑힌 이미지들로부터 특징 벡터를 추출합니다. 그리고 이 벡터들을 각각의 클래스 별로 SVM Classifier를 학습시킵니다.

이때 CNN Classifier를 두고 왜 SVM을 별도로 학습시키는 이유는 SVM이 더 성능이 좋아서 였다고 합니다.

SVM을 통해 분류된 각각의 박스들은 어떤 물체일 확률 값(Confidence Score)을 가지게 되었습니다.

이 2천개의 박스 중 동일한 물체에 여러 개의 박스가 있는것이라면 가장 높은 스코어의 박스만 남기고 나머지를 제거해야되는데, 이 과정을 Non-Maximum Suppression이라고 합니다. 자세한 내용은 아래에서 보겠습니다.


결론

R-CNN에서 학습이 일어나는 부분은 3가지나 되어 [AlexNet 모델 fine tuning, SVM Classifier, Bounding Box Regression] 시간이 엄청 소요됩니다.

(Computation sharing이 안됩니다. 위의 세 가지의 모델이 결합된 형태로 한 번에 학습이 불가능합니다. 즉, end-to-end 훈련이 불가능하다는 뜻입니다. SVM, Bounding Box Regression을 학습시켜도 Back propagation이 안되므로 CNN은 업데이트 되지 않습니다. )

테스트 시에 R-CNN은 이미지 하나 당 GPU에서는 13초, CPU에서 54초가 걸린다고 합니다.

속도 저하의 가장 큰 병목 구간은 selective search를 통해서 찾은 2천개의 영역에 모두 CNN inference를 진행하기 때문입니다.

정확도의 경우 Pascal VOC 2010을 기준으로 53.7%를 기록하였습니다.

이는 당시 기존의 기록들을 모두 갈아치우며 획기적으로 Object Detection 분야에 발전을 이끌었던 스코어입니다.

warping 하는 과정에서 input 이미지가 왜곡되고 정보 손실이 발생합니다

Selective Search나 SVM이 GPU에 적합한 구조가 아닙니다.


NMS (Non-Maximum Suppression)에 대한 설명

대다수의 object detection algorithm은 object가 존재하는 위치 주변에 여러개의 score가 높은 bounding box를 만든다는 문제점이 있습니다. 이 중 하나의 bounding box만을 선택해야 하는데, 이때 적용하는 기법이 non-max suppression 입니다. 즉, object detector가 예측한 bounding box 중에서 정확한 bounding box를 선택하도록 하는 기법입니다. optimal 한 solution일 수는 없고 local maxima를 찾는 방법이라고 볼 수 있습니다.

일반적인 NMS의 과정은 다음과 같습니다.

  1. 모든 Bounding box는 객체를 얼마나 잘 잡아내는지에 대한 스코어(confidence score)를 가집니다. 모든 bounding box에 대하여 threshold 이하의 confidence score를 가지는 Bounding Box는 제거합니다. Confidence score가 일정 수준 이하인 bounding box들에 대해 일차적으로 필터링을 거치는 과정입니다.
  2. 맨 앞에 있는 Bounding box 하나를 기준으로 잡고, 다른 bounding box와 IoU 값을 구합니다. IoU가 threshold 이상인 Bounding box들은 제거합니다. Bounding box끼리 IoU가 높을수록, 즉 많이 겹쳐질수록 같은 물체를 검출하고 있다고 판단하기 때문입니다.
  3. Confidense threshold가 높을수록, IoU threshold가 낮을수록 더 많은 bounding box가 제거됩니다. 예를 들어 Confidence score의 threshold를 0.5라고 지정하면 Confidence score가 0.5 이하인 bounding box들은 모두 제거됩니다.

IoU는 (Intersection over Union)의 약자로서 이름 그대로 (Intersection)(Union)(Intersection) \over (Union) 입니다. 즉, 박스의 IOU는 겹치는 부분의 넓이는 전체 합집합의 넓이로 나눈 값입니다.

IoUIoU scores

Bounding Box Regression

Selective search로 물체가 있을 법한 위치를 찾았고, 해당 물체의 종류를 판별할 수 있는 분류 모델을 학습시켰습니다. 하지만 이 기존의 박스 위치는 상당히 정확하지 않습니다.

그렇기 때문에 성능을 끌어올릴 필요가 있는데, 이 위치를 교정해주는 부분을 Bounding Box Regression이라 합니다.

즉, Predicted box(예측 박스)와 ground truth box(정답 박스)와의 차이를 줄여주는

bounding box regression이 필요하고, 이는 Linear regression model로 볼 수 있다.

Bounding box regression의 최종 목표는 predicted box가 ground truth box와 유사하도록 학습하는 것이며

먼저 하나의 박스를 다음과 같이 표기할 수 있습니다.

여기서 x, y는 이미지의 중심점, w, h는 각각 너비와 높이입니다. P는 predctied box, G는 ground truth box입니다.

Pi=(Pxi,Pyi,Pwi,Phi)P^i = (P_x^i, P_y^i, P_w^i, P_h^i) G=(Gx,Gy,Gw,Gh)G = (G_x, G_y, G_w, G_h)

목표를 위해서는 P에 해당하는 박스를 최대한 G에 가깝도록 이동시키는 함수를 학습시켜야 합니다.

박스가 인풋으로 들어왔을 때, x, y, w, h를 각각 이동 시켜주는 함수들을 표현해보면 다음과 같습니다.

dx(P),dy(P),dw(P),dh(P)d_x(P),d_y(P),d_w(P), d_h(P)

이러한 특성을 반영하여 P를 이동시키는 함수의 식을 짜보면 다음과 같습니다.

Gx^=Pwdx(P)+Px\hat{G_x} = P_w * d_x(P) + P_x Gy^=Phdy(P)+Py\hat{G_y} = P_h * d_y(P) + P_y Gw^=Pwexp(dw(P))\hat{G_w} = P_w \exp(d_w(P)) Gh^=Phexp(dh(P))\hat{G_h} = P_h \exp(d_h(P))

논문에서는 d 함수를 구하기 위해서 앞서 CNN을 통과할 때 pool5 레이어에서 얻어낸 특징 벡터를 사용합니다. (d(P)는 transformation 함수입니다.

d(P)=wT5(P) d_*(P) = w_*^T \varnothing_5(P)

5\varnothing_5 : 학습한 CNN layer 중 pool5에서 구한 feature vector

w : 학습 가능한 weight vector

이제 웨이트를 학습시킬 로스 펑션을 세워보면 다음과 같습니다.

일반적인 MSE 에러 함수에 L2 normalization을 추가한 형태입니다.

저자들은 람다를 1000으로 설정하였습니다.

w

여기서 t는 P를 G로 이동시키기 위해서 필요한 이동량을 의미하며 식으로 나타내면 아래와 같습니다.

최종 수식

정리를 해보면 CNN을 통과하여 추출된 벡터와 x, y, w, h를 조정하는 함수의 웨이트를 곱해서

바운딩 박스를 조정해주는 선형 회귀를 학습시키는 것입니다.

Reference