papers

R-CNN은 어떻게 물체를 탐지할까?

Mingeon Cha 2023. 7. 23. 13:55

PNG Design on Unsplash

 

평일 저녁, 간단히 식사를 마치고 산책을 나섰다고 합시다. 우리는 앞으로 어떤 행동을 하게 될까요? 먼저 현관문을 열고, 계단을 내려갈 것입니다. 또 마주 오는 사람들과 부딪히지 않도록 비켜 걸으며, 신호에 맞춰 횡단보도를 건너기도 할 것입니다. 잠깐 멈춰 서서 고양이를 구경하기도 하고 말이죠.

 

산책 중에, 우리의 눈은 끊임없이 시각 정보를 수집하여 전달합니다. 전달된 시각 정보로 뇌는 '판단'을 내립니다. 현재 눈에 들어오는 장면에서 '어떤 것'이 '어디에 있는지'를 탐지하고, 그에 맞춰 다음 액션을 결정합니다. 예를 들어, 좁은 길을 걸을 때 마주 오는 사람의 위치를 확인하고, 길의 어느 쪽으로 걸어갈지를 판단하는 것처럼 말입니다. 

 

이처럼 시각 정보를 처리할 때에 '물체의 위치'와 '물체의 종류' 정보를 파악하는 것은 매우 중요합니다. 컴퓨터 비전 분야에서는 이를 'Object detection'이라고 합니다. 이 글에서는 이 분야에 딥 러닝을 본격적으로 도입한 인공 지능 모델, R-CNN에 대해 알아보겠습니다. 

 

 

 

 


 

 

 

 

 R - CNN의 구조

R-CNN Architecture

 

먼저, R - CNN의 구조를 살펴보겠습니다. R - CNN은 다음의 5가지 단계로 Object detection을 수행합니다.

  • 1. 물체가 있을 법한 영역들의 후보를 2000개 찾아 제안합니다. 
  • 2. 그 영역들에 대해 각각 CNN을 수행해서, 해당 영역에 대한 정보를 담은 CNN features를 추출합니다. 
  • 3. CNN features에서 얻은 정보를 바탕으로, 각 영역에 있다고 생각되는 물체의 종류를 추측합니다. 
  • 4. 제안된 영역들의 위치와 크기를 조정합니다.
  • 5. 탐지된 물체들의 최종 위치와 종류를 산출합니다.

 

그렇다면, 각 단계에서 R - CNN은 구체적으로 어떻게 목표를 달성할까요? 2000개의 후보 영역은 어떤 방식으로 산출되며, 영역에 대한 분류는 어떻게 진행될까요? 또, 후보 영역 중에서 물체의 최종 위치는 어떤 기준으로 선정될까요? 이제부터 차근차근 알아보도록 하겠습니다. 

 

 

 

 


 

 

 

 

Selective Search

selective search

 

모델의 첫 번째 단계는 Selective Search입니다. 이 알고리즘은 영역들 간의 '유사도'를 기준으로 물체를 탐지하는데, 유사도를 산출하는 4가지의 기준은 다음과 같습니다.

  • color : 비교 대상 영역들이 비슷한 색깔 분포를 가졌는가 (color histogram)
  • texture : 비교 대상 영역들이 비슷한 질감 분포를 가졌는가 (histogram of gradient, HOG)
  • size : 영역들의 사이즈가 작은가 (작은 사이즈의 영역들이 빨리 합쳐지도록 함)
  • fill : 비교 대상 영역들 간에 간격이 잘 채워지는가

 

위의 4가지 기준으로, Selective Search 알고리즘은 가장 유사한 영역들을 점점 합쳐나가면서 물체의 영역을 판별합니다. R - CNN의 가장 첫 단계에서는, 위의 알고리즘을 통해 물체가 있을 법한 2000개의 영역들을 제안합니다.

 

 

 

 

 

Feature 추출

Selective Search에서 산출된 2000개의 영역들은 227x227 사이즈로 변형(warp)된 후, feature representation을 추출하기 위한 CNN에 입력됩니다. 사용되는 CNN은 Alexnet인데, 그 구조는 다음과 같습니다.

alexnet architecture from geeksforgeeks

 

우리가 이 네트워크에서 원하는 부분은, 마지막의 classification head를 떼어 낸 feature representation(4096차원)입니다. 이 feature represenration은 투입된 이미지에 대한 '추상화된 표현'이라고 할 수 있습니다.

 

구체적으로 말하면, 이미지의 특징(feature), 패턴 등과 같은 핵심 정보를 컴퓨터가 이해할 수 있는 방식으로 표시해 놓은 결과물이라고 할 수 있습니다. Selective Search에서 제안된 2000개의 후보 영역들은 각각 CNN을 거쳐서, 개별의 feature representation으로 재해석됩니다. 

 

 

 

 

 

분류 (SVM Classifier)

각 이미지들에서 추출된 feature representation들은 SVM(support vector machine)을 통해 분류됩니다. 

svm image from Analytics Vidhya

 

SVM이 학습하는 내용은 class를 나누는 추상적인 '경계'에 대한 것입니다. 예를 들어, 이미지가 사람인지 아닌지를 판단하는 SVM을 학습시킨다고 하면, 사람 이미지에 대한 추상화된 표현, 즉 feature representation들을 좌표 평면과 같은 가상 영역 (4096차원)에 표시하고, 사람이 아닌 이미지에 대한 feature representation들도 가상 영역에 함께 표시해서, 둘을 적절히 가르는 최적의 경계를 학습하는 것입니다. 

 

SVM은 어떤 feature representation이 학습된 경계에서 멀수록, 해당 이미지에 대한 확실한 판단을 내립니다. 어떤 이미지의 representation이 학습된 경계에 대하여 '사람 클래스 방향으로' 멀리 떨어져 있을수록 사람이라는 판단을 강하게 내리고, '사람이 아닌 방향으로' 멀리 떨어져 있을수록 사람이 아니라는 판단을 강하게 내리는 것입니다. 

 

R - CNN이 분류하고자 하는 class가 20종류라고 하면, CNN에서 산출된 feature representation은 배경 class를 추가한 21개의 svm에 투입됩니다. 각 svm들은 투입된 feature가 담당 class인지 아닌지를 분류하고, 그중에서 가장 높은 확실성을 보인 class가 최종 분류 결과물로 산출됩니다.

 

이로써 R - CNN은 제안된 2000개의 후보 영역들에 대하여 이름표를 붙이는 작업을 끝마쳤습니다. 그런데, 최종적인 물체의 영역을 선정하기 전에, R - CNN은 박스의 영역을 살짝 조정하는 과정을 거칩니다.

 

 

 

 

 

Bounding box regression

Selective Search로 제안된 영역들을 그대로 사용하지 않고, R - CNN은 박스들의 위치와 크기를 조정하는 간단한 선형 회귀를 진행합니다. 선형 회귀는 bounding box의 4가지 좌표(x, y, w, h)를 옮기는 함수를 학습합니다. 제안된 영역을 P, ground truth box를 G, 학습되는 함수를 d라고 해 봅시다. 

 

proposal P, ground truth G, function d

 

d를 이용하여 P를 G에 근사시키는 식은 위와 같습니다. 논문에 직접 나와있지 않아 확실하진 않지만, 식이 이러한 형태를 갖는 이유는 box의 대략적인 형태를 유지한 채, 약간의 조정만 시도하는 함수를 학습시켜야 하기 때문인 것 같습니다. d(P)가 0에 가까운 값을 산출한다고 가정하면 말이죠. 

 

 

d(P)는 위와 같이 계산됩니다. 식을 살펴보면, SVM에서 CNN의 feature representation이 사용되었듯, bbox regression에서도 같은 4096차원의 feature representation이 사용되는 것을 알 수 있습니다. 우리는 feature에 곱해지는 weight (1x4096)를 학습해, P에 곱해지는 계수 d를 선형 회귀로 추측합니다. 또한, 각 weight는 좌표별 (x, y, w, h), class별로 따로 학습됩니다. 

 

bounding box regression을 통해 조정된 박스들은, 물체들에 대해 selective search로 찾은 것보다 조금 더 개선된 영역들을 추측하고 있습니다. 그런데, 그래서 그 영역들 중에서 최종적으로 '물체에 해당한다'라고 판단되는 영역들은 어떻게 선택될까요? 

 

 

 

 

 

Non - maximum suppression

non - maximum suppression and IoU

 

R - CNN은 non - maximum suppression(NMS)을 통해 최종 영역을 산출합니다. NMS는 IoU라는 계산을 기준으로 동일한 물체에 박스가 쳐져 있음을 확인하는데, IoU는 박스의 겹친 부분(intersection)의 넓이를 두 박스의 전체 영역(union)의 넓이로 나눈 값입니다. 알고리즘에서는 동일한 물체에 겹쳐 있는 여러 박스들 중에서 가장 높은 확실성(svm에서 추출된)을 갖는 박스를 최종 선택합니다. 

 

Algorithm :

  • 제안된 bounding box들 중, 가장 높은 confidence score를 가진 box를 최종 결과에 추가합니다. 
  • 해당 박스와 나머지 박스들의 IoU를 계산하여, 기준보다 높은 IoU를 가진 bounding box들을 삭제합니다. 
  • 남은 box가 없어질 때까지 위의 과정을 반복합니다.

 

이로써 R - CNN이 어떤 방식으로 물체의 위치를 찾아내고, 그 종류를 추측하는지 알아보았습니다. 이제부터는 논문의 저자들이 R - CNN을 어떻게 학습시켰는지 알아보겠습니다. 위와 같이 복잡한 구조를 가진 만큼, 학습 과정 역시 조금은 복잡합니다. 

 

 

 


 

 

 

 

Training Procedure

R - CNN에서 학습이 이뤄지는 부분은 총 세 부분이 있습니다. 

  • feature extraction (CNN)
  • classification (SVM)
  • bounding box regression

 

region proposal부터 classification까지 하나의 네트워크에서 이뤄지는 end-to-end 모델과 달리, R - CNN을 학습시킬 때에는 각각의 모듈을 따로따로 학습하게 됩니다.

 

R - CNN의 학습은 물체의 영역과 종류에 대한 정답 레이블이 주어지는 supervised learning 방식으로 이뤄집니다. 그런데, 이때 selective search에서 제안된 2000개의 영역들에 대한 정답 레이블을 어떻게 정의할지에 대한 문제가 발생합니다. 이에 논문의 저자들은 ground truth box와의 IoU 계산을 통해 레이블을 설정합니다. 정답 box와 제안된 box의 IoU가 일정 기준 이상이면 제안된 box에 정답의 레이블을 적용하고, 그 이하면 적용하지 않는 것이죠. 

 

 

 

 

 

CNN training

feature extraction을 위한 CNN 학습은 pre - training과 finetuning의 두 단계로 이뤄집니다.

  • pre-train 단계는 Imagenet의 데이터를 이용하여, 일반적인 분류 학습을 통해 Alexnet을 학습시킵니다. 
  • finetuning 단계는 기초 학습된 CNN이 목표하는 domain에서 잘 동작하도록 미세 조정합니다. 이때 정답 레이블은 정답 box와의 IoU가 0.5 이상인 box들에 대해서 적용되고, 나머지 box들은 배경 클래스로 학습됩니다. 

 

이렇게 학습된 CNN은, 마지막의 classification head를 떼어 낸 4096차원의 feature representation을 추출하는 역할로 활용됩니다. 

 

 

 

SVM training

CNN에서 나온 feature를 이용해 최종 분류를 시행하는 SVM은 클래스 별로 이진 분류를 시행합니다. 즉, 예를 들어 20개의 분류를 시행한다면 배경 클래스를 포함한 21개의 SVM이 각각 해당 클래스인지 아닌지를 구분하는 것이죠. 

  • SVM 학습에는 오직 ground - truth box 만이 정답(positive) 레이블로 활용되고, ground truth box와의 IoU가 0.3 이하인 box들에 대해서는 오답(negative) 레이블이 적용됩니다. 그리고 0.3 이상의 IoU를 갖는 box들은 학습에 활용되지 않고 버려집니다. 

 

 

 

Bbox regression training

SVM과 마찬가지로, bounding box regression도 클래스 별로 학습됩니다. 

  • bbox regession 학습에서 사용되는 영역(P)들은 ground truth box(G)와의 IoU가 0.6 이상인 box들입니다. 이 box들의 좌표를 이동시키는 함수 d는 다음의 ridge regression을 통해서 학습됩니다. 

 

이때의 t는 d의 목표 함수, 즉 P를 G에 근사시키는 식을 d에 대하여 풀어낸 함수입니다. 

 

 

 

 


 

 

 

 

논의

R - CNN의 학습 방식까지 살펴보았으니, 드디어 R - CNN이 물체를 어떻게 탐지하는지 확실히 알아낸 것 같습니다. 이제 몇 가지 주목할 점에 대해 간단한 논의한 후에 포스팅을 마무리하겠습니다.

 

첫째, R - CNN은 딥 러닝을 Object detection에 본격적으로 적용한 첫 모델이니만큼, 그 구조가 매우 복잡하고 단계적입니다. 이러한 복잡한 구조는 전체적인 학습을 불가능하게 만들어, end-to-end 모델의 필요성을 불러일으켰습니다. 이에 Fast RCNN, Faster RCNN 등 R - CNN의 단점들을 개선하여 성능과 running time을 훨씬 향상시킨 모델들이 차후에 개발되었습니다. 

 

둘째, classification에 CNN을 그대로 사용하지 않고 SVM을 사용한 이유는, 양질의 데이터의 부족 때문이라고 합니다.  CNN을 학습시킬 때에는 IoU 0.5 이상의 box들을 정답(positive) 레이블을 적용하여 학습시켰는데, 이는 ground truth 데이터에 비하면 다소 부정확하여 최종 분류에 사용하기 어려운 점이 있었다고 합니다. 이에 저자들은 만약 충분한 데이터가 주어진다면, CNN을 그대로 사용하는 것과 SVM을 추가로 사용하는 것의 성능 차이는 거의 없어질 것이라고 추측하고 있습니다. 

 

 

 

 


 

 

 

 

참고자료

1. J.R.R. Uijlings, K.E.A. van de Sande, T. Gevers, and A.W.M. Smeulders.

Selective Search for Object Recognition (2012),  IJCV 2012

 

2. R. Girshick, J. Donahue, T. Darrell and J. Malik.

Rich feature hierarchies for accurate object detection and semantic segmentation (2014)

 

3. towardsdatascience - Non-maximum Suppression

 

4. 갈아먹는 머신러닝 - 갈아먹는 Object Detection [1] R-CNN

'papers' 카테고리의 다른 글

Transformer와 GPT를 비교해 봅시다  (6) 2024.09.29
Residual connection은 왜 효과적일까?  (0) 2023.06.26