약초의 숲으로 놀러오세요

R-CNN 논문(Rich feature hierarchies for accurate object detection and semantic segmentation) 리뷰 본문

Computer Vision/Object Detection

R-CNN 논문(Rich feature hierarchies for accurate object detection and semantic segmentation) 리뷰

herbwood 2020. 11. 26. 16:01

이번 포스팅부터는 본격적으로 Object Detection 모델에 대해 살펴보도록 하겠습니다. 어떤 논문을, 어떤 순서에 따라 읽어야할지 고민하던 중, hoya님이 작성하신 2014~2019년도까지의 Object Detection 논문 추천 목록을 보게 되었습니다. 

 

Object Detection paper list from 2014 to 2019

hoya님의 개인적인 의견으로는 빨간색 글씨로 써진 모델의 논문은 "반드시" 읽어야하며, 나머지는 시간 있을 때 읽어보면 좋다고 말씀하셨습니다. 저는 빨간색 글씨로 써진 모델부터 차근차근 논문을 읽어볼 계획입니다😤. 이번 포스팅에서는 첫 번째로 R-CNN 논문(Rich feature hierarchies for accurate object detection and semantic segmentation)을 읽고 정리해봤습니다. 

 


R-CNN(Region-based Convolutional Neural Networks) 모델 

이전 포스팅에서 언급했다시피 Object Detection 모델은 객체의 위치를 찾고(Localization), class를 분류(Classification)하는 작업을 진행합니다. R-CNN 모델은 이를 순차적으로 진행하는 대표적인 2 stage detector로, 딥러닝을 적용한 최초의 Object Detection 모델입니다. R-CNN 모델은 객체 탐지(detection) 혹은 추론(inference) 시, 다음과 같은 순서에 따라 동작합니다. 

R-CNN 모델의 동작 순서

  1. Selective search 알고리즘을 통해 객체가 있을 법할 위치인 후보 영역(region proposal)을 2000개 추출하여, 각각을 227x227 크기로 warp시켜줍니다.
  2. Warp된 모든 region proposal을 Fine tune된 AlexNet에 입력하여 2000x4096 크기의 feature vector를 추출합니다.
  3. 추출된 feature vector를 linear SVM 모델과 Bounding box regressor 모델에 입력하여 각각 confidence score와 조정된 bounding box 좌표를 얻습니다. 
  4. 마지막으로 Non maximum suppression 알고리즘을 적용하여 최소한의, 최적의 bounding box를 출력합니다. 

1. Region proposal by Selective search

Selective search

R-CNN 모델은 구체적인 객체의 위치를 추정하기 앞서 Selective search 알고리즘을 통해 객체가 있을법할 위치인 후보 영역(Region proposal)을 추출합니다. Selective search 알고리즘은 색상, 무늬, 명암 등의 다양한 기준으로 픽셀을 grouping하고, 점차 통합시켜 객체가 있을법한 위치를 bounding box 형태로 추천합니다. 단일 이미지에서 2000개의 후보 영역을 추출한 뒤, CNN 모델에 입력하기 위해 227x227 크기로 warp(=resize)시켜줍니다. 

 

  • Input : Single image
  • Process : Region proposal by Selective search & warp
  • Output : 227x227 sized 2000 region proposals

2. Feature extraction by Fine tuned AlexNet

Fine tuning AlexNet

다음으로 2000개의 후보영역을 Fine tune된 AlexNet에 입력하여 2000(=후보 영역의 수)x4096(=feature vector의 차원) 크기의 feature vector를 추출합니다. 논문의 저자는 객체 탐지시, 특정 도메인에 맞는 class를 예측하기 위해서 기존의 ImageNet 데이터셋을 통해 pre-trained된 CNN 모델을 도메인에 맞게 fine tune하는 방식을 제안합니다. Fine tune된 모델을 사용하면 도메인에 맞게, 보다 적합한 feature vector를 추출하는 것이 가능해집니다. 

Fine tuning pre-trained AlexNet

Fine tuning pre-trained AlexNet

R-CNN 모델이 추론 시 입력으로 들어온 region proposal은 객체를 포함할 수도 있으며, 배경을 포함하고 있을 수도 있습니다. 따라서 fine tune 시 예측하려는 객체의 수가 N개라고 할 때 배경을 포함하여 (N+1)개의 class를 예측하도록 모델을 설계(output unit=N+1)해야 하며, 객체와 배경을 모두 포함한 학습 데이터를 구성해야합니다. 이를 위해 PASCAL VOC 데이터셋에 Selective search 알고리즘을 적용하여 객체와 배경이 모두 포함된 후보 영역을 추출하여 학습 데이터로 사용합니다. Selective search 알고리즘은 R-CNN 모델의 추론 시에도, AlexNet을 fine tune할 때도 사용하는 셈입니다. 

 

먼저 PASCAL VOC 데이터셋에 Selective search 알고리즘을 적용하여 후보 영역을 추출하고, 후보 영역(=bounding box)과 ground truth box와의 IoU 값을 구합니다. IoU 값이 0.5 이상인 경우 positive sample(=객체)로, 0.5 미만인 경우에는 negative sample(=배경)로 저장합니다. 그리고 positive sample = 32, negative sample = 96 로 mini batch(=128)을 구성하여 pre-trained된 AlexNet에 입력하여 학습을 진행합니다. 위의 과정을 통해 fine tune된 AlexNet을 사용하여 R-CNN 모델은 추론 시, feature vector를 추출합니다. 

 

  • Input : 227x227 sized 2000 region proposals
  • Process : Feature extraction by fine tuned AlexNet
  • Output : 2000x4096 sized feature vector

3. Classification by linear SVM

linear SVM(Support Vector Machine) 모델은 2000x4096 feature vector를 입력 받아 class를 예측하고 confidence score를 반환합니다. 이 때 linear SVM 모델은 특정 class에 해당하는지 여부만을 판단하는 이진 분류기(binary classifier)입니다. 따라서 N개의 class를 예측한다고 할 때, 배경을 포함한 (N+1)개의 독립적인 linear SVM 모델을 학습시켜야 합니다. 이제 단일 linear SVM 모델을 학습시키는 과정을 살펴보도록 하겠습니다. 

Training linear SVM using fine tuned AlexNet

Training linear SVM using fine tuned AlexNet

먼저 객체와 배경을 모두 학습하기 위해 PASCAL VOC 데이터셋에 Selective search 알고리즘을 적용하여 region proposals를 추출합니다. AlexNet 모델을 fine tune할 때와는 다르게 오직 ground truth box만을 positive sample로, IoU 값이 0.3 미만인 예측 bounding box를 negative sample로 저장합니다. IoU 값이 0.3 이상인 bounding box는 무시합니다. positive sample = 32, negative sample = 96 이 되도록 mini batch(=128)을 구성한 뒤 fine tuned AlexNet에 입력하여 feature vector를 추출하고, 이를 linear SVM에 입력하여 학습시킵니다. 이 때 하나의 linear SVM 모델은 특정 class에 해당하는지 여부를 학습하기 때문에 output unit = 2 입니다. 학습이 한 차례 끝난 후, hard negative mining 기법을 적용하여 재학습시킵니다. 

Hard Negative Mining

Hard negative mining

Hard negative mining은 모델이 예측에 실패하는 어려운(hard) sample들을 모으는 기법으로, hard negative mining을 통해 수집된 데이터를 활용하여 모델을 보다 강건하게 학습시키는 것이 가능해집니다. 예를 들어 이미지에서 사람의 안면의 위치를 탐지하는 모델을 학습시킨다고 할 때, 사람의 안면은 positive sample이며, 그외의 배경은 negative sample입니다. 이 때 모델이 배경이라고 예측했으며, 실제로 배경인 bounding box는 True Negative에 해당하는 sample입니다. 반면에 모델이 안면이라고 예측했지만, 실제로 배경인 경우는 False Positive sample에 해당합니다. 

 

모델은 주로 False Positive라고 예측하는 오류를 주로 범합니다. 이는 객체 탐지 시, 객체의 위치에 해당하는 positive sample보다 배경에 해당하는 negative sample이 훨씬 많은 클래스 불균형(class imbalance)으로 인해 발생합니다. 이러한 문제를 해결하기 위해 모델이 잘못 판단한 False Positive sample을 학습 과정에서 추가하여 재학습하면 모델은 보다 강건해지며, False Positive라고 판단하는 오류가 줄어듭니다.  

 

다음으로 논문의 저자가 linear SVM 모델 학습 시 생기는 여러 의문점들에 대해 답한 내용을 살펴보도록 하겠습니다. 

Questions

Q1) 왜 AlexNet을 fine tune할 때와 linear SVM을 학습시킬 때와 양성/음성의 정의가 서로 다른가요?

논문의 저자는 AlexNet을 fine tune할시, 모델이 overfitting되지 않도록 많은 데이터가 필요하다고 말합니다. IoU 값이 0.5 이상인 경우를 positive sample로 정의할 경우, 오직 ground truth box만을 positive sample로 정의할 때보다 30배 이상 많은 학습 데이터를 얻을 수 있다고 합니다. 

 

Q2) 왜 AlexNet 마지막 layer에 softmax 함수를 추가하는 대신 별도의 linear SVM 모델을 학습시켰나요?

Softmax 함수를 사용하여 class를 분류할 경우, mAP 수치가 54.2%에서 50.9%로 떨어진다고 합니다. 이러한 이유는 위에서 언급한 모델에 따른 서로 다른 양성/음성 정의에서 기인합니다. AlexNet을 fine tune할 때, 많은 데이터를 포함하는 과정에서 상대적으로 정확하지 않은 예측 bounding box(IoU 값이 0.5~1 사이, 논문의 저자는 jitered example이라고 언급함)를 positive sample에 포함시키게 됩니다. 이로 인해 상대적으로 엄밀한 학습 데이터를 사용하는 linear SVM 모델에 비해 성능 하락하게 됩니다. 논문의 저자는 만약 적절한 방식으로 AlexNet을 fine tune한다면 linear SVM 모델을 사용할 때와 비슷한 성능을 보일 것이라고 전망합니다. 

 

학습된 linear SVM에 2000x4096 크기의 feature vector를 입력하면 class와 confidence score를 반환합니다. 

 

  • Input : 2000x4096 sized feature vector
  • Process : class prediction by linear SVM
  • Output : 2000 classes and confidence scores

4. Detailed localization by Bounding box Regressor

Selective search 알고리즘을 통해 얻은 객체의 위치는 다소 부정확할 수 있습니다. 이러한 문제를 해결하기 위해 bounding box의 좌표를 변환하여 객체의 위치를 세밀하게 조정해주는 Bounding box regressor 모델이 있습니다. 

Bounding box regressor

\begin{aligned} \hat{g}_x &= p_w d_x(\mathbf{p}) + p_x \\ \hat{g}_y &= p_h d_y(\mathbf{p}) + p_y \\ \hat{g}_w &= p_w \exp({d_w(\mathbf{p})}) \\ \hat{g}_h &= p_h \exp({d_h(\mathbf{p})}) \end{aligned}

\begin{aligned} t_x &= (g_x - p_x) / p_w \\ t_y &= (g_y - p_y) / p_h \\ t_w &= \log(g_w/p_w) \\ t_h &= \log(g_h/p_h) \end{aligned}

 

$\mathcal{L}_\text{reg} = \sum_{i \in \{x, y, w, h\}} (t_i - d_i(\mathbf{p}))^2 + \lambda \|\mathbf{w}\|^2$

 

 

 

 

위의 그림에서 회색 box는 Selective search 알고리즘에 의해 예측된 bounding box이며, 빨간 테두리 box는 ground truth box입니다. Bounding box regressor는 예측한 bounding box의 좌표 $\mathbf{p} = (p_x, p_y, p_w, p_h)$(center X, center Y, width, height)가 주어졌을 때, ground truth box의 좌표 $\mathbf{g} = (g_x, g_y, g_w, g_h)$로 변환되도록 하는 Scale invariant Transformation을 학습합니다. $i \in \left\{x, y, w, h \right\}$ 라고 할 때 위의 변수는 다음과 같습니다. 

 

$\hat{g_i}$ : 예측한 bounding box $p$가 주어졌을 때, Bounding box regressor 모델이 변환한 결과

$t_i$ : Bounding box regressor 모델이 학습하고자 하는 목표(target)

$d_i(P)$ : Bounding box regressor 모델의 학습 대상

$L_{reg}$ : Bounding box regressor 모델의 loss function으로 SSE(Sum of Squared Error). $\lambda=1000$

 

즉, Bounding box regressor 모델은 $d_i(P)$가 $t_i$가 되도록 $L_{reg}$를 통해 학습시킵니다. 

Training Bounding box regressor using fine tuned AlexNet

Training Bounding box regressor using fine tuned AlexNet

PASCAL 데이터셋에 Selective search 알고리즘을 적용하여 얻은 region proposals를 학습 데이터로 사용합니다. 이 때 별도의 negative sample은 정의하지 않고 IoU 값이 0.6 이상인 sample을 positive sample로 정의합니다. IoU 값이 지나치게 작거나 겹쳐진 영역이 없는 경우, 모델을 통해 학습시키기 어렵기 때문입니다. positive sample을 fine tuned된 AlexNet에 입력하여 얻은 feature vector를 Bounding box regressor에 입력하여 학습시킵니다. 추론 시 Bounding box regressor는 feature vector를 입력 받아 조정된 bounding box 좌표값(output unit=4)을 반환합니다. 

 

  • Input : 2000x4096 sized feature vector
  • Process : bounding box coordinates transformation by Bounding box regressor
  • Output : 2000 bounding box coordinates

5. Non maximum Suppression

linear SVM 모델과 Bounding box regressor 모델을 통해 얻은 2000개의 bounding box를 전부 다 표시할 경우 하나의 객체에 대해 지나치게 많은 bounding box가 겹칠 수 있습니다. 이로 인해 객체 탐지의 정확도가 떨어질 수 있습니다. 이러한 문제를 해결하기 감지된 bounding box 중에서 비슷한 위치에 있는 box를 제거하고 가장 적합한 box를 선택하는 Non maximum suppression 알고리즘을 적용합니다. Non maximum suppression 알고리즘은 아래와 같은 순서에 따라 진행됩니다. 

Non maximum suppression

1. bounding box별로 지정한 confidence score threhold 이하의 box를 제거합니다. 

- confidence score threshold = 0.5 로 지정합니다. 

- 위의 그림에서 confidence score가 0.3인 box를 제거합니다.

 

2. 남은 bounding box를 confidence score에 따라 내침차순으로 정렬합니다. 그 다음 confidence score가 높은 순의 bounding box부터 다른 box와의 IoU 값을 조사하여 IoU threshold 이상인 box를 모두 제거합니다. 

- IoU treshold = 0.4 로 지정합니다. 

- confidence score에 따라 내림차순으로 box를 정렬합니다. [0.9, 0.85, 0.81, 0.73, 0.7]

- confidence score가 0.9인 box와 나머지 box와의 IoU 값 조사합니다. {0.85 : 0, 0.81 : 0.44, 0.73 : 0, 0.7 : 0.67}

- IoU threshold 이상인 confidence score가 0.81, 0.7인 box 제거합니다. [0.9, 0.85, 0.73]

- 남은 box에 대하여 위의 과정 반복합니다.

3. 남아있는 box만 선택

- 남은 box는 confidence score가 0.9, 0.85인 box 입니다. 

Non maximum suppression 알고리즘은 confidence score threshold가 높을 수록, iou treshold가 낮을수록 많은 box가 제거됩니다. 위의 과정을 통해 겹쳐진 box를 제거하고 최소한의 최적의 bounding box를 반환합니다. 

 

  • Input : 2000 bounding boxes
  • Process : removing unnecessary boxes with Non maximum suppression
  • Output : optimal bounding boxes with classes

Object detection by R-CNN

지금까지 R-CNN 모델의 학습 방법과 추론에 대해 살펴봤습니다. R-CNN 모델은 동시대 객체 탐지 모델에 비해 성능이 매우 뛰어났으며, Object detection을 수행하기 위해 딥러닝을 최초로 적용했다는 점에서 의의가 있습니다. 하지만 Selective search를 사용하여 이미지 한 장당 2000개의 region proposal을 추출하다보니, 학습 및 추론 속도가 매우 느리다는 단점이 있습니다. 또한 Fine tuned AlexNet, linear SVM, Bounding box regressor 라는 3가지 모델을 사용하다 보니 전체 구조와 학습 과정이 복잡하다는 문제가 있습니다. 

 

논문을 읽기 전에도 R-CNN 모델의 전반적인 동작 원리를 알고 있었지만, 직접 논문을 읽어보니 생각 이상으로 복잡한 모델이라는 점을 알게 되었습니다. 특히 모델에 따른 서로 다른 양성/음성 정의, hard negative mining, bounding box regressor 부분이 생소하고 어렵다고 생각했습니다. R-CNN 모델을 구현한 pytorch 코드는 Pytorch로 구현한 R-CNN 모델 포스팅을 참고하시기 바랍니다. 다음 포스팅에서는 Overfeat 논문을 읽고 리뷰해보도록 하겠습니다. 

 

Reference

R-CNN 논문(Rich feature hierarchies for accurate object detection and semantic segmentation)

제이스핀님의 R-CNN 모델 설명

Lilian님의 R-CNN Family 설명

Cogneethi님이 설명한 R-CNN 모델 youtube 영상

갈아먹는 머신러닝님의 R-CNN 모델 설명

Hard negative mining에 대해 설명한 블로그

sogangori님이 설명한 Hard negative mining

pytorch 코드는 Pytorch로 구현한 R-CNN 모델

Comments