귀퉁이 서재
논문 리뷰 - R-CNN 톺아보기 본문
최초로 객체 탐지에 CNN을 적용한 알고리즘이 R-CNN입니다. 본 글에서 주요 내용 위주로 R-CNN 논문을 번역/정리했습니다. 글 중간에 <NOTE>로 부연 설명을 달아놓기도 했습니다. 틀린 내용이 있으면 피드백 부탁드립니다.
- 논문 제목: Rich feature hierarchies for accurate object detection and semantic segmentation
- 저자: Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik
- 기관: UC Berkeley
- 개정 발표: 2014년 10월 (첫 발표: 2013년 11월)
Abstract
객체 탐지(Object Detection) 성능은 (2014년을 기준으로) 지난 몇 년 간 정체되었습니다. 본 논문에서는 간단하며, 확장 가능한(scalable) 객체 탐지 알고리즘을 소개합니다. 이 객체 탐지 알고리즘은 지금까지 가장 성능이 좋은 알고리즘보다 mAP(mean Avergae Precision)를 30% 이상 높였습니다. 곧, 53.3%의 mAP를 달성했습니다.
<NOTE> mAP란 객체 탐지의 성능을 측정하는 대표적인 지표입니다.
본 객체 탐지 알고리즘의 핵심은 두 가지입니다. (1) 객체 탐지를 위한 영역 제안(region proposal)에 CNN을 적용하고, (2) 사전 훈련(pre-training)과 파인 튜닝(fine-tuning)을 적용해서 훈련 데이터가 적은 상황에서 성능을 끌어올렸다는 점입니다. 영역 제안과 CNN을 결합했다는 이유로 본 알고리즘을 R-CNN(Regions with CNN)이라고 부릅니다.
<NOTE> 영역 제안(Region Proposal)이란 이미지 안에서 객체가 있을 만한 후보 영역을 먼저 찾아주는 방법입니다. 이후에 후보 영역을 바탕으로 객체를 찾습니다. 대표적인 영역 제안 기법으로는 선택적 탐색(Selective Search) 기법이 있습니다.
특히, R-CNN은 OverFeat이라는 알고리즘의 성능을 뛰어넘었습니다. OverFeat은 슬라이딩 윈도우 검출기(Sliding-Window Detector) 기반의 객체 탐지 알고리즘으로, 본 논문을 발표하기 전까지 성능이 가장 좋았습니다.
<NOTE> 슬라이딩 윈도우(Sliding Window) 방식이란 사각형 윈도우를 이미지 왼쪽 위부터 오른쪽 아래까지 이동하면서 객체를 탐지하는 방식입니다.
1. Introduction
오랜 시간 동안 시각 인식 분야는 SIFT와 HOG 검출기를 기반으로 발전했습니다. 그러나 2010년부터 2012년까지 PASCAL VOC 데이터셋에서 객체 탐지 성능은 크게 높아지지 않았습니다. 기존 모델을 약간 바꾸거나 결합해서 미미한 성능 향상을 보였죠.
<NOTE> SIFT, HOG 검출기에 관한 설명은 각각 OpenCV - 27. 특징 디스크립터 검출기 (SIFT, SURF, ORB)와 OpenCV - 33. HOG(Histogram of Oriented Gradient) 디스크립터를 참고하세요.
PASCAL VOC 데이터셋은 객체 탐지나 세그멘테이션 성능 평가를 위해 주로 사용하는 데이터셋으로, 20개의 클래스(레이블)를 포함합니다.
반면, 본 객체 탐지 모델은 두 단계(2-stage) 절차를 갖는 구조화된(hierarchical) 모델입니다.
<NOTE> 그 이유로 R-CNN을 2-stage detector라고 부릅니다.
첫 번째 단계는 객체 분류(classification)이며, 두 번째 단계는 경계 박스 추정(bounding-box regression)입니다. 분류와 회귀 문제가 결합한 거죠.
CNN은 1990년대 자주 사용되다가, 서포트 벡터 머신(SVM)이 나타나면서 인기가 식었습니다. 그러다 2012년 이미지넷(ImageNet) 대회에서 CNN이 우수한 분류 성능을 보여 다시 주목을 받기 시작했습니다. 레이블된 이미지 데이터 120만 개를 사용해 깊은 CNN을 훈련했는데, LeCun 교수의 CNN 모델을 조금 바꾸어서(ReLU 활성화 함수 사용, 드롭아웃 적용 등) 좋은 성능을 낸 것이죠.
이미지넷에서 CNN이 훌륭한 성능을 내면서 사람들은 이런 생각을 합니다. 이미지넷에서 CNN이 성공한 결과를 PASCAL VOC의 객체 탐지에 적용할 수 있을지 말이죠. 본 논문 저자는 말합니다. CNN이 PASCAL VOC에서도 우수한 객체 탐지 성능을 낼 수 있다고. 다시 말해, 지금까지 CNN은 이미지 분류에서만 우수한 성능을 보였는데, 객체 탐지에서도 좋은 성능을 낼 수 있다고 본 논문을 통해 증명한 것입니다.
이런 성과를 얻으려면 두 가지 문제를 해결해야 합니다. (1) CNN으로 객체 localization하는 문제, (2) annotation 된 데이터가 부족한 상태에서 모델 학습해야 하는 문제
<NOTE> 객체 위치를 찾는 일을 localization이라고 합니다. annotation이란 객체 레이블 정보, 경계 박스 위치 정보 등을 포함하는 메타 정보를 말합니다. 경계 박스란 객체 위치를 표시하는 사각형 박스를 뜻합니다.
(1) CNN으로 객체 localization하는 문제
이미지 분류와 달리, 객체 탐지는 객체를 분류하는 작업 뿐만 아니라 객체의 위치 좌표를 찾는 일까지 해야 합니다. 이미지 분류보다 수행해야 하는 일이 하나 더 있는 거죠. 객체 localization을 위해서 연구진은 세 가지 접근 방법을 생각했습니다.
- 접근1: localization은 회귀 문제로 볼 수도 있습니다. 하지만 Szegedy의 논문에 따르면 localization을 회귀 문제로 다룰 경우 실효성이 떨어집니다.
- 접근2: 대안으로 슬라이딩 윈도우 검출기(Sliding-Window Detector)를 사용하는 것이 있습니다. 지난 20년 간 CNN은 이 방식을 사용했죠. R-CNN 연구진도 슬라이딩 윈도우 검출기 방식을 고려했습니다. 안타깝게도 R-CNN은 합성곱 계층(Convolutional layers)이 5개인 구조라서, 슬라이딩 윈도우 방식을 쓰려면 (195 x 195) 픽셀의 꽤 큰 윈도우(Receptive Fields)와 (32 x 32) 픽셀의 스트라이드(Stride)를 가져야 합니다. 윈도우와 스트라이드가 이렇게 크면 정확히 localization하기 어렵습니다. 그래서 접근2 방식도 사용하지 못합니다.
- 접근3: 접근1(localization을 회귀 문제로 다루기)과 접근2(슬라이딩 윈도우 검출기 사용)로도 문제를 해결하지 못했습니다. R-CNN 연구진은 영역 제안(영역 추정, region proposals)이라는 기법을 내놓습니다. 영역 제안 기법은 객체 탐지와 세그멘테이션에서 모두 효과가 있습니다.
영역 제안 기법 절차는 다음과 같습니다.
- 먼저, 입력 이미지를 받습니다.
- 2,000개의 후보 영역을 제안합니다.
- CNN을 이용해 각 후보 영역에서 피처를 연산합니다. 이에 앞서 후보 영역을 일정한 크기로 조정합니다(warped region). 일정한 크기로 조정하는 까닭은 CNN 특성상 입력 데이터 크기가 고정되어야 하기 때문이죠.
- CNN의 마지막 단계는 전결합 계층(Fully-Connected Layers)입니다. 전결합 계층에 있는 값을 피처라고 간주하고, 서포트 벡터 머신(SVM)을 이용해 각 영역에 대해 분류 작업을 수행합니다.
(2) annotation 된 데이터가 부족한 상태에서 모델 학습해야 하는 문제
객체 localization 문제는 영역 제안 기법으로 해결했습니다. 다음으로 해결해야 하는 문제는 레이블된 데이터가 부족하다는 점입니다. R-CNN은 깊은 CNN 구조를 가졌는데, 이렇게 큰 CNN을 제대로 훈련할 정도의 데이터가 부족합니다. 이 문제를 해결하려고 R-CNN 연구진은 ILSVRC의 많은 데이터로 사전 훈련(pre-training)을 한 뒤, 적은 수의 PASCAL 데이터로 원하는 도메인에 맞게(domain-specific) 파인튜닝(fine-tunning)을 했습니다. ILSVRC의 보조 데이터를 활용해 사전 훈련을 하기 때문에, annotation된 PASCAL 데이터가 적어도 파인튜닝만으로도 좋은 성능을 낼 수 있죠. 실험 결과, 파인튜닝을 적용해서 mAP가 8% 올랐습니다.
2. Object Detection with R-CNN
R-CNN은 세 가지 모듈로 구성됩니다. 첫 번째는 각 클래스별로 영역 제안을 하는 모듈입니다. 이렇게 제안한 후보 영역을 바탕으로 객체를 찾습니다. 두 번째 모듈은 CNN입니다. CNN은 후보 영역에서 크기가 고정된 피처를 추출합니다. 세 번째 모듈은 선형 SVM입니다.
이제부터 각 모듈 구조와 테스트 단계 절차, 훈련 방법, PASCAL VOC 2010-12와 ILSVRC2013을 이용한 성능 결과를 알아보겠습니다.
2.1. Module design
영역 제안(Region Proposals): R-CNN은 선택적 탐색(Selective Search)라는 영역 제안 기법을 사용합니다. 선택적 탐색은 다음 그림과 같이 비슷한 영역을 그룹핑하면서 후보 영역을 제안하는 방법입니다.
피처 추출(Feature Extraction): AlexNet을 활용해 제안된 각 후보 영역별로 피처 4,096개를 추출합니다. 이렇게 추출한 피처를 기반으로 SVM이 최종 분류 작업을 수행합니다. R-CNN은 뼈대 CNN으로 AlexNet을 사용하죠. AlexNet은 합성곱 계층 5개와 전결합 계층 2개로 이루어져 있습니다. 다음은 AlexNet 구조입니다.
제안된 후보 영역에서 피처를 추출하려면 먼저 후보 영역 이미지를 고정된 크기로 바꿔야 합니다. 여기서는 (227 x 227) 픽셀로 모든 후보 영역 크기를 고정했습니다. 길쭉한 직사각형 모양이더라도 모든 후보 영역 이미지를 (227 x 227)인 정사각형 모양으로 변환하는 겁니다. 구조를 단순하게 만들기 위해서죠.
<NOTE> 이렇게 데이터를 고정된 크기로 바꾸는 작업을 warping이라고 합니다.
참고로 warping하기 전에, 후보 영역 주변 배경을 조금 살립니다. 객체 영역만 딱 자르지 않고, 객체 주변 배경을 조금 살려두는 거죠. 여러 값으로 실험을 해본 결과, 16픽셀만큼 주변 배경을 살려서 warping을 하니(warping with context padding (p = 16 pixels)) 성능이 가장 좋았습니다.
R-CNN 구조를 요약하면 다음 그림과 같습니다.
2.2. Test-time detection
테스트 단계에서, 각 테스트 이미지별로 선택적 탐색을 적용해 2,000개의 후보 영역을 추출합니다. 후보 영역을 warping하고, 피처를 구하기 위해 CNN으로 순전파(forward propagation)을 수행합니다. 이렇게 구한 피처를 활용해 SVM으로 각 클래스별 점수를 계산합니다. 이어서 점수에 따라 비최댓값 억제(Non-Maximum Suppression, NMS)를 수행합니다(비최댓값 억제는 각 클래스별로 적용). 점수가 높은 후보 영역 경계 박스(bounding box)를 기준으로 IoU가 특정 임계값을 넘는 다른 경계 박스는 모두 제거하는 겁니다. 그러면 제안된 2,000개의 경계 박스 가운데 꽤 많은 경계 박스가 없어집니다.
<NOTE> 비최댓값 억제(Non-Maximum Suppression, NMS)란 경계 박스 가운데 가장 확실한 경계 박스만 남기고 나머지 경계 박스는 제거하는 기법입니다.
런타임 분석(Run-time analysis): R-CNN은 객체 탐지 효율을 높이는 두 가지 특징이 있습니다. 첫째, 모든 클래스끼리 CNN 파라미터를 공유합니다. 둘째, CNN으로 구한 피처 벡터는 차원이 낮습니다(low-dimension). 그 결과 객체 탐지를 수행하는 데 한 이미지당 GPU로는 13초, CPU로는 53초가 걸립니다.
이렇듯 R-CNN은 파라미터를 공유하고, 피처 벡터 차원이 낮기 때문에 얼마든지 확장 가능성이 있습니다.
2.3. Training
지도 사전 학습(Supervised pre-training): 연구진은 거대한 보조 데이터셋(ILSVRC2012 분류 데이터셋)으로 R-CNN을 사전 훈련했습니다. ILSVRC2012 데이터셋에는 경계 박스 정보가 없으므로, 오직 이미지 레이블만 사용해 CNN을 훈련했습니다. 다시 말해 객체 탐지가 아닌 이미지 분류 수준의 사전 훈련을 한 것이지요. 앞서 말했듯 여기서 사용한 CNN은 AlexNet과 비슷합니다.
도메인 특화 파인튜닝(Domain-specific fine-tunning): 사전 훈련한 CNN 모델을 새로운 객체 탐지 영역에 적용하기 위해, 해당 도메인에 특화되게끔 파인튜닝했습니다. warping한 후보 영역 이미지만 활용해서 CNN 파라미터를 갱신한 것입니다. 이때 사용한 알고리즘은 SGD(Stochastic Gradient Descent)입니다. ILSVRC2012의 ImageNet 데이터셋은 클래스가 총 1,000개입니다. 그렇기 때문에 CNN 모델의 최종 출력층은 1,000개 값을 내놓죠. 객체 탐지에 맞게 구조를 바꾸려면 최종 출력층이 (N + 1)개 값을 내놓도록 바꿔야 합니다. N은 객체 개수이며, 여기에 1을 더한 까닭은 배경 때문이죠. 1,000개 값을 출력하던 최종 출력층이 (N + 1)개 값을 출력하도록 구조를 바꾼 점만 빼면 나머지 구조는 바뀌지 않았습니다. 참고로, PASCAL VOC 데이터셋에서는 N=20이고, ILSVRC2013 데이터셋에서는 N=200입니다.
덧붙여, 실제 경계 박스와의 IoU가 0.5 이상인 후보 영역 경계 박스만 positive로 여기고, 나머지는 negative로 여깁니다. 곧, positive 경계 박스는 해당 객체를 표시하는 경계 박스로, negative 경계 박스는 배경을 뜻하는 경계 박스로 간주한다는 말입니다. SGD의 학습률은 0.001로 설정했습니다. 각 SGD 이터레이션마다 일정하게 32개의 positive 경계 박스와 96개의 배경 경계 박스를 샘플링해서 뽑습니다. 128개의 미니배치를 만들기 위해서죠.
객체 클래스 분류기(Object category classifiers): 자동차를 탐지하는 이진 분류기를 훈련한다고 가정해보죠. 자동차를 타이트하게 표시한 경계 박스는 positive 샘플이겠죠. 비슷하게, 자동차가 전혀 없는 경계 박스는 negative 샘플입니다. 그렇다면 자동차를 애매하게 걸친 경계 박스는 어떤가요? positive인지 negative인지 구분하기 애매합니다. 연구진은 IoU 임계값을 활용해 문제를 해결합니다. 0, 0.1, 0.2, 0.3, 0.4, 0.5로 실험해본 결과 IoU 임계값이 0.3일 때 성능이 가장 좋았다고 합니다. IoU 임계값을 정하는 건 중요합니다. 만약 IoU 임계값을 0.5로 정하면 mAP가 5 포인트 떨어집니다. 임계값을 0으로 설정하면 mAP가 4 포인트 떨어집니다. 본 연구에서는 IoU 임계값을 0.3으로 정했으니, 실제 경계 박스와 IoU가 0.3 이상인 경계 박스는 모두 positive 샘플입니다. 간단하게 positive 샘플은 모두 실제 경계 박스로 여겼다고 합니다.
<NOTE> 파인튜닝할 땐 IoU 임계값을 0.5로 설정했는데, SVM을 훈련할 땐 IoU 임계값을 0.3으로 설정했습니다. 본 논문의 부록 B에서 그 이유를 설명합니다. 임계값을 서로 같게 설정하니 오히려 성능이 떨어졌다고 합니다. 성능 향상을 위해 IoU 임계값을 각각 0.5, 0.3으로 정했다고 합니다.
피처 추출을 마친 뒤에는 선형 SVM으로 클래스를 분류합니다. 훈련 데이터가 너무 커서 메모리 용량이 꽉 차는 문제가 생겨, 연구진은 hard negative mining 기법을 적용했습니다.
<NOTE> hard negative mining이란 positive 샘플과 negative 샘플의 개수를 균일하게 만드는 방법입니다. 신뢰도 점수(confidence score)를 활용해 negative 샘플을 선정하는 것입니다. 다시 말하지만, negative 샘플은 배경을 뜻합니다. 이미지 안에 배경 영역은 굉장히 넓습니다. 곧, negative 샘플이 될 경계 박스도 많습니다. negative 샘플이 지나치게 많으면 객체 탐지 모델의 성능이 떨어질 우려가 있으니, 신뢰도 점수가 가장 높은 경계 박스순으로 negative 샘플을 선정한다는 의미입니다.
2.4. Results on PASCAL VOC 2010-12
PASCAL VOC 2010 테스트 데이터셋으로 성능을 평가해본 결과, 다른 모델과 배교해서 성능이 꽤 높았습니다. 기존에 가장 성능이 좋던 SegDPM은 PASCAL VOC 2010에서 mAP 40.4%를 기록했는데, 경계 박스 회귀를 사용하지 않은 R-CNN은 50.2%, 경계 박스 회귀를 사용한 R-CNN은 53.7%의 mAP를 달성했습니다. PASCAL VOC 2011-12에서도 53.3%로 높은 성능을 보였습니다.
2.5. Results on ILSVRC2013 detection
200개의 클래스를 갖는 ILSVRC2013 데이터셋에서도 R-CNN을 테스트해봤습니다. 이때 PASCAL VOC에서 사용한 파라미터를 그대로 사용했습니다. 다음 그래프는 ILSVRC2013에서 각 모델별 객체 탐지 성능을 나타냅니다.
보시는 바와 같이 R-CNN BB가 mAP 31.4%로 가장 높은 성능을 보였습니다. 두 번째로 성능이 좋은 OverFeat의 mAP(24.3%)를 크게 앞섰네요.
<NOTE> R-CNN BB는 경계 박스 회귀를 사용한 R-CNN을 뜻합니다.
3. Visualization, ablation, and modes of error
3.1. Visualizing learned features
CNN 첫 번째 계층의 필터 역할은 간단합니다. 경계와 보색을 찾아주죠. 두 번째 계층의 역할부터가 이해하기 좀 어렵습니다. 두 번째 계층부터 네트워크가 무엇을 학습하는지 직관적으로 설명해보죠. 네트워크는 여러 후보 영역마다 점수를 구합니다. 이어서 점수가 높은 순으로 후보 영역을 나열하고, 비최댓값 억제(NMS)를 수행합니다. 그러면 점수가 높은(즉, 객체를 잘 식별해줄) 후보 영역(경계 박스)만 남겠죠.
이런 일련의 과정을 통해 각 CNN 계층마다 후보 영역을 어떻게 학습하는지 볼 수 있습니다. 다음 그림은 다섯 번째 합성곱/최대 풀링 계층의 후보 영역과 점수를 나타냅니다.
두 번째 열에서 까만 점을 강아지로 잘못 구분한 것도 보이네요. 마지막 열에서는 전구를 잘못 구분한 경우가 많군요. 본 네트워크는 모양, 질감, 색깔 등의 특성을 종합해 객체를 학습합니다.
3.2. Ablation studies
파인튜닝하지 않은 모델의 계층별 성능(Performance layer-by-layer, without fine-tunning): CNN 모델에서 '어떤' 계층이 객체 탐지 성능 향상에 중요한 영향을 주는지 알아보기 위해, PASCAL VOC 2007 데이터셋으로 분석해봤습니다. CNN 모델의 마지막 세 계층을 활용해 Ablation study를 진행했습니다.
<NOTE> Ablation study란 요소를 하나씩 없애면서 해당 요소가 전체 시스템에 어떤 영향을 주는지 확인하는 분석 기법을 말합니다. 가령 피처 A, B, C가 있을 때 전체 성능이 50이라고 합시다. 피처 A를 제거하고 피처 B, C만 갖는 상태에선 성능이 40이라고 합시다. 그럼 피처 A는 전체 성능 향상에 대략 10만큼 도움을 주는 요소라고 볼 수 있죠.
마지막 세 계층은 다섯 번째 최대 풀링 계층, 첫 번째 전결합 계층, 두 번째 전결합 계층으로 각각 pool5, fc6, fc7라고 지칭합니다. 숫자가 fc6, fc7인 이유는 전결합 계층이 다섯 번째 최대 풀링 계층 다음에 오기 때문입니다. 여섯 번째, 일곱 번째 계층으로 간주한 거죠.
먼저, PASCAL VOC 데이터로 파인튜닝 하지 않은 CNN의 분석 결과를 보죠. 즉, 이 CNN의 파라미터는 ILSVRC2012 데이터로만 사전 훈련되었습니다. Ablation study 분석 결과는 아래 표 1~3행과 같습니다.
R-CNN pool5는 다섯 번째 최대 풀링 계층까지만 있고, 뒤이어 연결된 전결합 계층이 없는 네트워크 구조를 말합니다. R-CNN fc6는 첫 번째 전결합 계층까지만 있는 구조, R-CNN fc7은 두 번째 전결합 계층까지 모두 있는 구조입니다. 분석 결과 R-CNN fc7의 mAP(44.7%)가 R-CNN fc6의 mAP(46.2%)보다 나쁩니다.
파인튜닝한 모델의 계층별 성능(Performance layer-by-layer, with fine-tunning): 파인튜닝을 한 CNN의 분석 결과를 보시죠. 위 표의 4~6행에 결과가 있습니다. 파인튜닝을 하지 않은 네트워크와 다르게 R-CNN FT fc7가 R-CNN FT fc6보다 mAP가 좋네요. 게다가 파인튜닝을 한 CNN이 파인튜닝을 하지 않은 CNN보다 성능이 더 좋습니다.
3.3. Network architectures
본 논문에서는 AlexNet을 CNN 네트워크 구조로 사용했습니다. 다음 표가 보여주듯 VGG16을 사용하면 성능이 더 좋아집니다. T-Net은 토론토 Net의 약자로, 토론토 대학교에서 발표한 AlexNet을 말합니다. O-Net은 옥스포드 Net의 약자로, 옥스포드 대학교에서 발표한 VGG16을 말합니다. 따라서 R-CNN T-Net은 AlexNet을 기반으로 만든 R-CNN을 뜻하고, R-CNN O-Net은 VGG16을 기반으로 만든 R-CNN을 뜻합니다.
<NOTE> VGG 네트워크는 ILSVRC 2014에서 2등을 차지했습니다. 1등은 GoogleNet이었습니다.
경계 박스 회귀를 사용한 R-CNN O-Net의 mAP가 66.0%로 가장 좋았습니다. 반면 치명적인 단점이 있는데, 연산 시간이 T-Net에 비해 7배나 길다는 점입니다.
3.4. Detection error analysis
<NOTE> 이번 절에서는 객체 탐지 기법의 오류를 분석하는 방법에 관해 말합니다. 그렇지만 본 논문 범위를 넘어가므로 참조 문서를 참고하라며 끝납니다.
3.5. Bounding-box regression
경제 박스 회귀(bounding-box regression)는 localization 오류를 줄이기 위한 간단한 방법입니다. 선택적 탐색으로 추출한 후보 영역 경계 박스를 실제 경계 박스와 일치하도록 회귀 모델을 만들어 훈련합니다. 자세한 내용은 부록 C를 참고하시면 됩니다.
3.6. Qualitative results
아래 그림은 R-CNN으로 탐지한 결과입니다(클릭 후 확대해서 보세요).
금붕어를 개(dog)로, 기타를 탁자(table)로 잘못 식별한 영역이 있긴 하네요. 그래도 전반적으로 꽤 정확합니다.
4. The ILSVRC2013 detection dataset
앞서 PASCAL VOC로 성능을 평가해봤는데, 여기서는 ILSVRC2013 데이터로 테스트해봅니다.
4.1. Dataset overview
ILSVRC2013 데이터셋은 훈련 데이터 395,918개, 검증 데이터 20,121개, 테스트 데이터 40,152로 이루어져 있습니다. 검증 데이터와 테스트 데이터는 이미지 분포가 서로 비슷하고, 완전히 annotation되어 있습니다. 곧, 검증 데이터와 테스트 데이터는 모든 객체에 경계 박스가 표시돼 있고, 클래스명도 기재돼 있다는 말입니다. 반대로, 훈련 데이터는 완벽히 annotation되어 있지 않습니다. 이런 까닭으로 훈련 데이터에 hard negative mining을 적용하기 어렵습니다. hard negative mining을 적용하려면 완벽히 annotation되어 있어야 하기 때문이죠. 완벽히 annotation되어 있지 않으면, negative 샘플이라고 판단한 경계 박스에 positive 샘플을 포함할지 모릅니다.
문제를 해결하기 위한 전략은 검증 데이터 일부를 훈련 데이터로 활용하는 것입니다. 검증 데이터를 val1과 val2로 나눕니다. 클래스가 균일하게 나뉘도록 분리하는 게 중요하겠죠. val1과 훈련 데이터 일부를 이용해 훈련하고, val2를 이용해 검증하는 방식입니다.
4.2. Region proposals
ILSVRC2013에서도 PASCAL VOC에서와 같은 방식으로 영역 추정을 합니다. 곧, val1, val2, 테스트 데이터에 선택적 탐색 기법으로 영역 추정을 합니다(훈련 데이터에는 영역 추정을 하지 않습니다). 한 가지 다른 점이 있습니다. 선택적 탐색은 크기 불변성이 없어서(scale invariant) 이미지 크기에 따라 후보 영역 개수가 다릅니다. ILSVRC 데이터셋의 이미지 크기는 다양합니다. 그렇기 때문에 이미지 크기를 고정해야 합니다. 여기서는 이미지 크기를 500 픽셀로 맞춘 뒤 선택적 탐색을 적용했습니다. 검증 데이터에 선택적 탐색을 적용한 결과 한 이미지당 평균 2,403개의 후보 영역을 추정했습니다.
4.3. Training data
훈련 데이터에서 뽑은 N개의 실제 경계 박스(ground-truth bouding box)와 val1을 결합해 훈련용 데이터로 사용했습니다. N은 0, 500, 1000으로 각각 ablation study를 진행했습니다(ablation study 결과는 4.5에서 소개).
R-CNN은 훈련용 데이터를 활용해 다음과 같이 훈련합니다. (1) CNN 파인튜닝, (2) SVM 훈련, (3) 경계 박스 회귀.
(1) CNN 파인튜닝은 val1과 train_N을 이용해 50,000번의 SGD 이터레이션을 수행합니다.
<NOTE> train_N은 원본 훈련 데이터에서 뽑은 N개의 실제 경계 박스 데이터를 뜻합니다.
PASCAL에서 훈련한 방식과 다르지 않습니다. NVIDIA Tesla K20 장비로 13시간을 훈련했습니다. (2) 두 번째로, SVM 훈련을 위해 val1과 train_N의 실제 경계 박스를 사용했습니다. val1에 hard negative mining을 적용해 5,000개의 이미지를 선별했습니다. 역시나 원본 훈련 데이터에서는 negative 샘플을 뽑지 않았습니다. annotation이 완벽하지 않으니까요. (3) 마지막으로 경계 박스 회귀 모델은 val1을 기반으로만 훈련했습니다.
4.4. Validation and evaluation
테스트 데이터로 테스트해보기 전에 val2(앞서 검증 데이터로 구분한 데이터)로 파인튜닝과 경계 박스 회귀의 효과를 시험해봤습니다. 모든 하이퍼파라미터는 PASCAL에서 시험할 때와 같게 설정했습니다. 당연히 ILSVRC에서 최적인 하이퍼라미터는 아닐 겁니다. 하지만 본 작업의 목표는 R-CNN 성능을 ILSVRC에서도 그대로 시험해보는 것입니다.
val2에서 가장 좋은 성능을 보인 모델을 최종 테스트 데이터로 평가해보았습니다. 두 가지를 평가했는데, 첫째는 경계 박스 회귀를 하지 않은 모델이고, 둘째는 경계 박스 회귀를 사용한 모델입니다.
4.5. Ablation study
아래 표는 훈련 데이터, 파인튜닝, 경계 박스 회귀에 관한 ablation study 결과입니다.
val2로 측정한 mAP와 테스트 데이터로 측정한 mAP가 거의 비슷합니다. 이 사실을 통해 val2가 본 모델의 성능을 가늠하기 좋은 검증 데이터라는 점을 알 수 있죠.
첫 열이 보여주는 바와 같이 파인튜닝과 경계 박스 회귀 없이 val1으로만 훈련하면 검증 데이터 mAP가 20.9%입니다. 나머지 사항은 그대로 하되, 훈련 데이터만 val1+train_0.5k, val1+train_1k로 늘리니 24.1%로 mAP가 높아졌습니다. 이어서 val1만 사용해 파인튜닝을 하고, fc7로 계층을 늘리니 성능이 26.5%까지 올랐습니다. val1에 train_1k까지 사용해 파인튜닝을 하니 29.7%로 더 올랐습니다. 마지막으로 경계 박스 회귀까지 적용하니 31.0%가 됐네요.
종합하면, 훈련 데이터가 많을수록, 파인튜닝을 위한 데이터가 많을수록, 경계 박스 회귀를 할수록, CNN 계층은 fc7까지 늘어날수록 성능이 좋네요.
4.6. Relationship to OverFeat
R-CNN과 OverFeat의 차이를 알아보죠. OverFeat은 선택적 탐색으로 후보 영역을 추정하는 대신 multi-scale 피라미드 기법으로 영역을 추정합니다. R-CNN보다 성능은 조금 떨어지지만 9배나 빠릅니다. OverFeat은 이미지를 warping하지 않아서 계산하기가 효율적이기 때문입니다.
5. Conclusion
최근 몇 년 동안 객체 탐지 모델의 성능은 정체되었습니다. 본 논문은 간단하고 확장성 좋은 객체 탐지 알고리즘을 제안했죠. PASCAL VOC 2012에서 기존에 최고 성능을 낸 모델보다 30% 높은 성능을 보였습니다. 본 알고리즘의 핵심은 두 가지입니다. 객체를 localization 하기 위해 CNN을 활용해 영역을 추정한 것, 훈련 데이터가 부족한 상황에 대비하려고 사전 훈련과 파인튜닝을 적용한 것이죠. 훈련 데이터가 부족한 상황에서 지도 사전 훈련과 도메인 특화 파인튜닝(supervised pre-training/domain-specific fine-tunning)은 굉장히 효과적인 방법입니다.
'논문 리뷰' 카테고리의 다른 글
논문 리뷰 - SSD(Single Shot MultiBox Detector) 톺아보기 (0) | 2022.03.30 |
---|---|
논문 리뷰 - Faster R-CNN 톺아보기 (0) | 2022.03.17 |
논문 리뷰 - Fast R-CNN 톺아보기 (0) | 2022.03.09 |
논문 리뷰 - SPP-net 톺아보기 (0) | 2022.02.26 |
논문 리뷰 - YOLO(You Only Look Once) 톺아보기 (16) | 2020.10.14 |