Skip to content

Written by Alex Choi, Feb. 09, 2019.

이번 포스팅에서는 Object Detection의 초기 어플리케이션인 R-CNN에 대하여 간단히 알아보도록 하겠습니다.


Introduction

R-CNN은 Regional Convolutional Neural Networks를 의미하는 것으로, Jitendra Malik 교수가 이끄는 UC Berkley의 연구자들(Ross Girshick, Jeff Donahue, Trevor Darrell)에 의해 연구 되었습니다.

관련 논문은 아래 링크를 참고하시면 되겠습니다:

R-CNN을 구체적으로 설명하기 전에, 우선 Object Detection이 무엇인지 알아보고자 합니다.

Object Detection이란, 주어진 이미지 내에 어느 영역에 오브젝트가 존재하는지 알아내고, 만약 해당 영역에 오브젝트가 존재한다면 그 오브젝트의 종류가 무엇인지(Classfication) 알아내는 방법을 의미합니다.

Jitendra Malik 교수 팀은, 2012년에 ILSVRC에서 우승한 Toronto 대학교의 Hinton 교수 연구팀의 Alex Krizhevsky가 발표한 AlexNet에 영감을 받고 "CNN을 Object Detection에 활용할 수 있을까?"라는 질문으로 연구를 시작했다고 합니다.

이 질문에 답하고자, Jitendra Malik 교수 팀은 R-CNN을 고안하여 이를 PASCAL VOC 데이터세트에 적용하였으며 CNN이 Object Detection 영역에서도 기존 HoG 등과 같은 Feature에 비해 뛰어난 성능을 보이는 것을 확인하였습니다.


R-CNN 이해하기

그럼 본격적으로 R-CNN에 대하여 이해해 보도록 하겠습니다.

R-CNN의 입력과 출력은 다음과 같습니다: * 입력: 이미지 * 출력: 바운딩 박스들(Bounding Boxes), 각 바운딩 박스 내의 오브젝트의 종류(Label)

그러면, 바운딩 박스를 어떻게 결정할 수 있을까요?

Region Proposal

가장 단순하고 직관적으로 생각하면, 다양한 크기와 다양한 종횡비(Aspect Ratio)를 갖는 Windows를 설정하여 이미지를 쭈욱 훑어가며 오브젝트의 유무 및 종류를 알아내는 방법이 있을 수 있습니다. 이를 Sliding Window 기법이라고 합니다. 그러나, 이미지 내의 오브젝트가 어떤 크기로 어떤 종횡비를 갖는지 알 수 없기 때문에 매우 많은 종류의 WIndows를 생성해야 하기 때문에 매우 비효율적인 방법이라고 할 수 있습니다.


Sliding Window를 이용한 Object Detection 예시 - Image from pyimagesearch.com

오브젝트가 존재할 것 같은 영역을 제안하는 것을 Region Proposals라고 하는데, Sliding Window의 이러한 비효율성 때문에 본 논문에서는 Region Proposals로서 Selective Search 기법을 이용합니다.

Selective Search는 Object Detection을 위한 Region Proposal 알고리즘으로 픽셀 간의 컬러, 텍스쳐, 크기, 모양 등의 유사성을 기반으로 영역을 넓혀가며 Segnmentation(또는 Grouping)하는 기법입니다.


Selective Search 예시 - Image from learnopencv.com

R-CNN 구조

논문에 제시된 R-CNN의 구조는 아래 이미지와 같습니다.


  1. 우선, 입력 이미지(Input Image)로부터 최대 2000(~2k)개의 Region Proposals를 추출합니다.

  2. 각 추출된 Region을 정해진 해상도로 맞추는데 이를 Warping이라고 합니다. 이는, CNN이 정해진 해상도로 입력을 받아야 하기 때문에 가로-세로 비율을 정해진 입력 해상도로 맞추는 과정에서 이미지의 비율을 비트는(Warp) 과정이 필요합니다.

  3. Warp된 영역을 AlexNet 등과 같은 CNN을 통해(논문에서는 AlexNet을 이용하였지만, 그 후에 발표된 ResNet, GoogLeNet 등을 이용할 수도 있습니다) Feature Map을 얻습니다.

  4. 얻어진 Feature Map을 Support Vector Machine(SVM)을 이용하여 각 Region을 분류합니다.


VOC 2007의 Warp된 학습 샘플들

바운딩 박스 개선

마지막 질문은, "바운딩 박스를 실제 오브젝트 영역에 밀접하게 찾아낼 수 있을 것인가?"입니다. 이는, Linear Regression 기법을 이용하여 가능합니다.

바운딩 박스의 변수를 중심좌표, 넓이 및 높이의 4개로 표현할 수 있습니다:

\[ (C_x, C_y, W, H) \]

여기서, \((C_x, C_y)\)는 바운딩 박스의 중심좌표를, \(W\), \(H\)는 각각 바운딩 박스의 넒이, 높이를 의미합니다.

본 논문에서는, 이를 해결하기 위해 \(N\)개의 바운딩 박스 학습 데이터를 이용합니다. 즉,

\[ \{ (P^i, G^i) \}, i=1,...,N \]

여기서, \(P^i\)는 바운딩 박스 Proposal의 \(i\) 번째 데이터를, \(G^i\)는 Ground Truth의 \(i\) 번째 학습 데이터를 의미합니다.

따라서, \(P^i\)\(G^i\)에 근접할 수 있도록 적절한 Loss를 정의하여 이를 최소화하도록 학습을 합니다. 이에 대한 자세한 내용은 논문의 [C. Bounding-box regression] 부분을 참고하시면 되겠습니다.

아래 이미지들은 R-CNN을 이용하여 Object Detection한 결과들입니다.





요약

지금까지 R-CNN에 대하여 알아보았습니다.

R-CNN 방법을 요약하자면,

  1. 입력 이미지를 받는다.
  2. Selective Search를 이용하여 Region Proposals를 최대 2,000개 생성한다.
  3. 생성된 각 Region Proposal을 Warping한 후, 이를 CNN을 이용하여 Feature Map을 생성한다.
  4. 생성된 Feature Map을 SVM을 이용하여 분류한다.
  5. 바운딩 박스에 대하여 Linear Regression(Bounding-box Regressor)를 통해 오브젝트의 위치에 근접하도록 맞춘다.

다음 포스팅에서는 R-CNN의 속도를 개선한 Fast R-CNN에 대하여 알아보도록 하겠습니다.