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를 생성해야 하기 때문에 매우 비효율적인 방법이라고 할 수 있습니다.
오브젝트가 존재할 것 같은 영역을 제안하는 것을 Region Proposals라고 하는데, Sliding Window의 이러한 비효율성 때문에 본 논문에서는 Region Proposals로서 Selective Search 기법을 이용합니다.
Selective Search는 Object Detection을 위한 Region Proposal 알고리즘으로 픽셀 간의 컬러, 텍스쳐, 크기, 모양 등의 유사성을 기반으로 영역을 넓혀가며 Segnmentation(또는 Grouping)하는 기법입니다.
R-CNN 구조
논문에 제시된 R-CNN의 구조는 아래 이미지와 같습니다.
-
우선, 입력 이미지(Input Image)로부터 최대 2000(~2k)개의 Region Proposals를 추출합니다.
-
각 추출된 Region을 정해진 해상도로 맞추는데 이를 Warping이라고 합니다. 이는, CNN이 정해진 해상도로 입력을 받아야 하기 때문에 가로-세로 비율을 정해진 입력 해상도로 맞추는 과정에서 이미지의 비율을 비트는(Warp) 과정이 필요합니다.
-
Warp된 영역을 AlexNet 등과 같은 CNN을 통해(논문에서는 AlexNet을 이용하였지만, 그 후에 발표된 ResNet, GoogLeNet 등을 이용할 수도 있습니다) Feature Map을 얻습니다.
-
얻어진 Feature Map을 Support Vector Machine(SVM)을 이용하여 각 Region을 분류합니다.
바운딩 박스 개선
마지막 질문은, "바운딩 박스를 실제 오브젝트 영역에 밀접하게 찾아낼 수 있을 것인가?"입니다. 이는, Linear Regression 기법을 이용하여 가능합니다.
바운딩 박스의 변수를 중심좌표, 넓이 및 높이의 4개로 표현할 수 있습니다:
여기서, \((C_x, C_y)\)는 바운딩 박스의 중심좌표를, \(W\), \(H\)는 각각 바운딩 박스의 넒이, 높이를 의미합니다.
본 논문에서는, 이를 해결하기 위해 \(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 방법을 요약하자면,
- 입력 이미지를 받는다.
- Selective Search를 이용하여 Region Proposals를 최대 2,000개 생성한다.
- 생성된 각 Region Proposal을 Warping한 후, 이를 CNN을 이용하여 Feature Map을 생성한다.
- 생성된 Feature Map을 SVM을 이용하여 분류한다.
- 바운딩 박스에 대하여 Linear Regression(Bounding-box Regressor)를 통해 오브젝트의 위치에 근접하도록 맞춘다.
다음 포스팅에서는 R-CNN의 속도를 개선한 Fast R-CNN에 대하여 알아보도록 하겠습니다.