Logical Scribbles
[논문 리뷰] Rich feature hierarchies for accurate object detection and semantic segmentation (R-CNN) 본문
[논문 리뷰] Rich feature hierarchies for accurate object detection and semantic segmentation (R-CNN)
KimJake 2023. 11. 21. 20:52이번 포스팅에서는 R-CNN을 소개한 논문, "Rich feature hierarchies for accurate object detection and semantic segmentation" 에 대해 알아보자. 이 논문은 객체 탐지에서 2-stage-detection 모델의 시초급 논문이다.
위의 객체 탐지 논문 리스트에서도 볼 수 있듯이, R-CNN 논문은 당당히 필수 논문 중 가장 첫번째로 읽어야할 논문이라고 소개되어있다. (빨간색 글씨가 필수 논문)
2-stage-detector와 1-stage-detector에 대해서는 아래의 글에 자세히 설명이 되어있다.
다시 이 객체 탐지 논문의 계보를 보면, 2-stage-detector의 첫 논문으로 R-CNN이 소개되고 있는 것을 알 수 있다. 간단히 말해서 2-stage-detector의 특징은 Region Proposal 과정을 진행한 이후에 classification을 진행하기 때문에 두 단계를 통해 객체 탐지를 진행한다는 점에 있다.
이제 R-CNN에 대해 자세히 알아보자.
1. 기존 방식의 문제점
내가 지금까지 많은 수의 논문을 읽어본 것은 아니지만 논문의 시작은 거의 당시 시대에 사용되는 기존 방식의 문제점을 언급하며 시작한다.
R-CNN이 등장하던 당시 HOG 방식과 SHIFT 방식을 활용한 객체 탐지의 성능은 몇년 동안 정체되어 있었다. (2010년~2012년) 이 때 당시 객체 탐지의 성능 향상은 단지 모델들을 섞거나, 성공적인 모델들에 조금의 변화를 준 것으로만 달성 되어오고 있었다. 따라서 저자는 두가지의 핵심 아이디어를 통해 R-CNN을 제안하며 PASCAL VOC 데이터셋에서 mAP(mean average precision)을 30% 향상시켰다. 두가지의 핵심 아이디어는 다음과 같다.
- 객체의 위치를 찾고 분리하기 위해 bottom-up 방식의 region proposal(selective search)에 CNN을 적용하였다.
- 라벨링이 된 데이터가 부족할 때, supervised pre-training에 이은 domain-specific fine-tuning을 이용하여 성능을 크게 향상시켰다.
2. R-CNN
앞서 말했듯이 R-CNN은 2-stage-detector 모델이다. 본 논문에서는 이 모델이 Hierarchical(계층적), multi-process를 포함하고 있다고 소개하고 있다. 첫번째 단계는 Region Proposal이고, 두번째 단계는 Classification이다.
저자는 2012년 이미지넷에서 등장한 AlexNet에 주목하였다. 2012년 이전에는 SVM의 등장으로 CNN의 인기가 식어가고 있었는데, AlexNet의 등장에 따라 CNN이 우수한 분류 성능을 보임이 증명됐기 때문이다. 따라서 저자는 AlexNet을 이용하여 PASCAL VOC에서도 우수한 성능을 낼 수 있을 것이라고 생각한 것 같다.
하지만 이러한 CNN을 활용하여 객체 탐지를 하기 위해선 두가지가 해결되어야 했다. 첫번째로는 localization문제이고, 두번째는 annotation된 데이터의 양이 적다는 것이다. 여기서 annotation되었다는 의미는 객체의 레이블, 경계 박스 위치 정보가 주어져 있다는 뜻이라고 이해하면 될 것 같다. 이것들을 어떻게 해결하였는지는 차차 나온다.
R-CNN은 세가지 모듈로 구성되어있다.
- Category에 독립적인 영역들을 제안하는 모듈(즉 박스 안에 물체가 어떤 것이 있는지는 신경 쓰지 않고 영역 제안)
- Large CNN (각 영역에 대해 고정된 길이의 feature vector를 추출할 수 있게 된다.)
- Linear-SVM (Classification을 진행해준다.)
각 모듈을 알아보기 전에 R-CNN의 큰그림을 보자.
먼저, 인풋 이미지가 들어간다. 그 뒤, 2번 과정에서 Region Proposal을 진행하는데 이 때 제안되는 영역은 약 2000개라고 한다. 이렇게 제안된 영역은 AlexNet의 인풋 사이즈에 맞게 resize된다.(이를 Warping이라고 표현하였다.) 이후, CNN을 통과한 벡터를 이용하여 SVM은 classification을 진행한다.
자 이제 세가지 모듈의 디자인을 어떻게 진행했는지 살펴보자.
1) Region Proposal
이 때 당시 다양한 논문은 객체의 클래스에 상관 없이 경계 영역을 찾아낼 수 있는 많은 알고리즘을 제안하고 있었다. 그 예로 objectness, selective search, CPMC, 등등이 제안되고 있었다. R-CNN은 많은 방식을 적용할 수 있지만 저자는 Selective Search를 적용하였다고 한다. 이 방식에 대한 자세한 설명은 아래의 글에 자세히 적혀있다.
2) Feature Extraction
앞서 말했듯이 저자는 AlexNet의 구조를 채택하여 이를 바탕으로 R-CNN을 설계하였다. 따라서 이 논문을 이해할 때 AlexNet의 구조를 알고 있으면 큰 도움이 된다. AlexNet의 구조를 다시 살펴보자. 자세한 설명은 아래의 글에 있다.
AlexNet은 227*227 RGB 이미지를 인풋으로 받는다. 이후 CNN층을 통과하여 4096개의 FC layer와 연결되고, 아웃풋으로는 softmax 계산된 1000개의 결과값이 나온다. AlexNet에서 1000개의 아웃풋을 선택한 이유는 이미지넷 데이터셋의 클래스의 수가 1000개였기 때문이다.
다시 본론으로 돌아와서 저자는 1) Region Proposal 과정에서 생성된 약 2000개의 영역들 각각에 대하여 4096차원의 feature vector를 추출하였다고 한다. 즉, 1번 과정에서 제안된 영역 이미지들은 mean-subtracted 227*227 RGB 이미지가 되어 5개의 Conv layer와 2개의 FC layer를 통과한다.
※ Mean subtract란?
가장 흔하게 사용되는 데이터 전처리 기법이다. 데이터의 모든 피쳐(feature)에 각각에 대해서 평균값 만큼 차감하는 방법으로 기하학 관점에서 보자면 데이터 군집을 모든 차원에 대해서 원점으로 이동시키는 것으로 해석할 수 있다.
AlexNet은 227*227 RGB 이미지만을 인풋으로 사용할 수 있다. 하지만 제안된 영역들은 다음과 같이 사이즈가 고정되어있지 않고 다를 수 있다. (제안 영역은 selective search의 'fast mode'로 얻어낸다.)
따라서 이 제안된 영역 이미지들을 AlexNet이 학습할 수 있는 형태로 바꿔주는 것이 필요했다. 이 과정이 warping이다.
Warping 과정 이전에는 16 픽셀의 패딩을 이용하여 Bounding box를 dilate한다. (bounding box를 늘려주는 듯) 이 이유는bounding box 주변의 맥락을 포함하기 위해서라고 한다. 이후, bounding box의 사이즈와 비율에 상관 없이 227*227 이미지로 resizing 시킨다.
이 결과로 다음과 같은 동일한 사이즈의 이미지(227*227)들을 얻게 된다.
이렇게 얻게된 이미지를 CNN에 통과시켜, feature에 대해 계산한다. 그리고 각각의 class에 대해 그 클래스의 구분을 위해 학습된 SVM에 넣어 스코어를 얻게된다. 주어진 이미지의 모든 스코어에 대해, greedy Non-Maximum Suppression을 진행한다. non-maximum suppression은 다음을 참고 바란다.
3. Training
이제 training 과정을 살펴보자.
1) Supervised pre-training
CNN만을 구별적으로 사전훈련 시키는 과정이다. ILSVRC2012 데이터셋을 활용하였으며, 결과적으로 AlexNet의 성능에 거의 근접하도록 훈련을 시켰다고 한다.
2) Fine-Tuning
※Ground-truth 박스와 0.5 IoU 이상 겹치는 모든 제안된 지역을 해당 box의 클래스에 대한 positive로 취급하고 나머지는 음성으로 취급한다. 이렇게 sample을 나눴을 때, ground truth만 positive sample로 정의할때 보다 30배 많은 학습데이터를 얻을 수 있다. 많은 데이터를 통해 overfitting을 방지한다.
1)의 과정을 걸쳐 사전훈련된 CNN을 객체 탐지에 활용하기 위해, fine-tuning을 진행하였다. 우선 warp된 이미지를 이용하여 SGD training을 시키고, 마지막 아웃풋 노드의 수를 바꿔주었다. AlexNet에서는 1000개의 노드를 사용하였는데, 저자는 이를 (N+1)개로 바꿔주었다. 여기서 N은 classification의 클래스 수이다. 1이 더해지는 이유는 객체 탐지에는 배경도 존재하기 때문이다. VOC 데이터셋은 N=20, ILSVRC2013 데이터셋은 N=200 이다.
SGD 의 학습률은 0.001로 시작한다. (초기 사전 훈련 속도의 1/10), 각 SGD iteration에서는 모든 클래스에 대해 균일하게 32개의 positive window와 96개의 background window를 균일하게 샘플링하여 크기가 128인 미니 배치를 구성한다. positive window는 background window에 비해 데이터 불균형이 있으므로 (positive window의 수가 극히 적다.) 샘플링을 positive window 쪽으로 편향시킨다.
3) Object category classifier (SVM)
※ N-way softmax layer를 통해 분류를 진행하지 않고, SVMs를 이용해 분류를 한다. 이는 SVM을 사용했을 때 성능이 더 좋기 때문이다.
자동차를 감지하는 이진 분류기를 훈련하는 경우를 생각해보자. 자동차를 밀접하게 둘러싼 box는 명백히 positive여야 한다. 마찬가지로, 자동차와 관련이 없는 배경 영역은 명백한 negative여야 한다. 문제는 자동차와 부분적으로 겹치는 영역을 어떻게 판단해야 하는지이다. 이 문제는 IoU의 임계값으로 해결하였다. 이 임계값 미만의 영역은 음성으로 정의된다. 임계값은 0.3이 가장 적절하고, 또 이 임계값을 정하는 것이 아주 중요했다고 한다.
특징이 추출되고 training label이 적용된 후 각 클래스당 하나의 linear-SVM을 최적화한다. 이 때, 'Hard Negative Mining' 방식을 이용한다. (따라서 false positive에 강건해진다.)
Bounding Box Regression은 아래의 부록으로 적어두도록 하겠다. 간단히 말하면 bounding box도 학습을 통해 더 정확한 영역을 제안하도록 하는 것이다.
4. R-CNN의 단점
- 전체 framework를 End-to-End 방식으로 학습할 수 없다. (End-to-End 방식이란, 입력에서 출력까지 파이프라인 네트워크 없이 신경망으로 한 번에 처리하는 방식) => 가중치를 공유할 수 없다.
- Global Optimal Solution을 찾을 수 없다.
- Warping에 의해 객체의 정보가 소실될 수 있다.
- 제안된 2000개의 모든 후보영역에 대해 CNN Network를 통과시켜야하기 때문에 느리다.
※부록
Bounding Box Regression 이란?
Selective Search로 찾은 Bounding Box 위치는 아무래도 부정확할 것이다. 따라서 Bounding Box Regression을 시행한다. bounding box 위치 선정을 교정하고 모델의 성능을 높이기 위한 과정이라고 생각하면 되겠다. Ground Truth, G 와 초기 Bounding Box, P의 위치는 중심점 좌표 (x,y)와 box의 크기 (width, height)를 결합하여 표시할 수 있다.
우리의 목표는 P (x,y,w,h)가 input으로 들어왔을 때 이를 이동시켜 G를 잘 예측하도록 학습시키는 것이다.
먼저 인풋에 대해 dx, dy, exp(dw), exp(dh) 를 각각 곱하여 예측치 G_hat을 만든다.
(d 함수는 P를 G_hat으로 이동시키기 위해서 필요한 이동량을 의미하며 BBR에서 학습시키는 대상이다.
t 함수는 P를 G로 이동시키기 위해서 필요한 이동량을 의미하며 d함수와 형태는 동일하다.)
loss function은 "t함수와 d 함수의 MSE" + "L2 normalization"을 추가한 형태이다.
끝!