R-CNN

|

Rich feature hierarchies for accurate object detection and semantic segmentation

R-CNN(Regions with CNN features)은 VOC-2012 데이터를 사용한 이전의 SOTA 모델들에 비하여 mean average Precision(mAP)를 약 30% 개선하여 53.3%를 달성했습니다.

이 모델은 두 가지 핵심 인사이트를 가집니다.

  • 객체를 localize & segment하기 위해 bottom-up region proposals에 high-capacity cnn을 적용합니다.
  • Domain-specific fine-tuning을 통한 supervised pre-training을 적용합니다.

R-CNN을 알아보기 전에 전통적인 객체 탐지 알고리즘은 어떻게 객체를 탐지하는지 알아봅시다.

기존에는 sliding window를 사용하여 이미지를 스캔한 뒤 각 영역에서 물체를 검출하거나, SIFT & HOG라고 불리는 키 포인트(HOG-like feature)를 추출하여 magnitude를 이용해 bounding box를 활용하는 방법이 존재합니다.

전통적인 접근 방법들의 핵심은 영역을 나누어 greedy하게 추출하거나 키 포인트를 기반으로 추출한다는 것입니다.

그러나 CNN이 ImageNet challenge에서 우승한 AlexNet 이후로 다시 주목 받기 시작했고, CNN을 Object detection에 적용할 수 없을까? 라는 의문이 발생합니다.

유일한 차이점은 AlexNet은 분류를 위한 모델이고 저희의 태스크는 Detection이기 때문에 Localizing이 필요합니다. 우리는 여기서 Localizing을 Regression 문제로 생각할 수 있습니다.

그러나 선행 연구를 통해 단순히 CNN을 적용시키면 생각만큼 잘 동작하지 않는 것을 볼 수 있었습니다. 그래서 대안으로 Sliding Window Detector를 사용합니다. 하지만 직관적으로 Sliding Window 또한 매우 큰 receptive filed와 stride가 필요하고 이미지를 전부 훑어야 돼서 상당히 느리다는 것을 알 수 있습니다.

대신에, Object Detection, Semantic Segmentation 두 가지 태스크에서 성공한 ‘recognition using regions’를 사용하여 CNN Localizing 문제를 해결합니다.

R-CNN은 다음과 같은 두 가지에 초점을 맞춥니다.

  • Localizing Object
  • small quantity detection data로 high-capacity CNN을 학습

그럼 R-CNN이 어떻게 동작하는지 알아봅시다.

Model


R-CNN의 동작 방식은 다음과 같습니다.

  • 입력 이미지로에 Selective Search를 적용하여 2,000개의 region proposal 생성
  • 이미지를 fixed size(227x227)로 변경 후 CNN을 통해 각 proposal 마다 고정된 길이의 feature vector 추출
  • 각 region마다 category-specific linear SVM을 적용 후 분류
  • bounding box regression을 적용하여 박스 위치를 조정

한번 자세히 알아봅시다.

Region proposal은 말 그대로 주어진 이미지에서 객체가 있는 위치를 찾는 것입니다. 찾는 방식은 여러가지가 있겠지만 논문에서는 Selective Search를 사용합니다.

그렇다면 Selective Search가 뭘까요?

주변 픽셀간의 유사도를 기준으로 이미지 초기 세그먼트를 정하여 수많은 region을 생성하고(candidate), greedy 알고리즘을 이용하여 각 region을 기준으로 유사한 영역을 결합하여 커진 region을 최종 region으로 사용하는 방식입니다.

보자마자 이 부분도 뉴럴 네트워크를 통해 개선할 수 있을 것 같은데? 라는 생각이 들었습니다.

후속 모델은 실제로 그런 방향으로 발전했다고 합니다.

Selective Search를 이용해서 생성한 2천개의 region proposals은 ImageNet을 학습시켰던 모델을 백본으로 사용하고 우리가 사용할 데이터 셋의 Ground Truth로 fine tuning 시킵니다.

그 후 기존에 분류에 사용된 마지막 레이어를 제외한 output을 feature로 사용합니다. 그리고 이를 입력으로 하는 분류기(SVM)를 새로 달아줍니다.(클래스 수 + 1(배경)에 대해 분류를 수행함.)

이 부분을 보자마자 읭? 왜 분류기를 따로 학습하지..?라고 생각했는데 논문의 저자가 단순한 CNN classifier를 쓸 때 SVM에 비해 성능이 4%나 낮아 졌다고 언급합니다.

fine-tuning 과정에서 객체의 위치 정보가 유실되고 무작위로 추출된 샘플을 학습하여 발생한 것으로 보인다고 합니다.

SVM을 위해 Non-maximum suppression, IoU 개념이 활용됩니다.

저희는 2천개나 되는 bounding box가 존재하는데 다 필요하진 않습니다. 이 box를 줄이기 위한 테크닉이 필요합니다. 만약 동일한 물체에 박스가 여러 개 존재하면 가장 스코어가 높은 박스를 제외하고 나머지는 제거합니다.

Non-maximum suppression

  • 예측한 bounding box들의 예측 점수를 정렬
  • 높은 점수의 박스부터 시작하여 나머지 박스들 간의 IoU 계산
  • 최적의 박스가 남을 때까지 위 과정을 반복

IoU

서로 다른 두 박스가 동일한 물체에 있을 때 어떻게 판별할 수 있을까요? 여기서 IoU(intersection over Union)을 사용합니다. 간단히 말하면 두 박스의 교집합을 합집합으로 나눠줍니다 만약 두 박스가 겹치면 겹칠수록 1에 가깝겠죠? 논문에서는 이 IoU 스코어의 threshold를 0.5로 설정합니다.

Bounding Box Regression

region proposals로 생성된 박스들은 정확도가 높지 않습니다. 이를 개선하기 위해서 논문에서는 box의 annotation을 사용하여 regression 문제를 풀게 합니다.

조금 더 자세히 얘기해 봅시다. GT 좌표와 region proposals의 좌표의 관계를 함수를 사용하여 나타낼 수 있습니다. 이 함수를 구하기 위해서 CNN의 output으로 나온 feature vector를 활용하여 함수에 learnable 파라미터를 주어 선형 회귀를 학습합니다.

\[f_\alpha(P) = \mathbf w^T_\alpha \phi_5(P)\]

여기서$P$는 박스의 좌표 정보이고, $\alpha$는 각각 $x,y,w,h$중 한 가지 위치 정보이며, $\phi_5$는 CNN의 pooling layer 5가 최종 output layer이기 때문에 저렇게 표기합니다.

Conclusion


R-CNN은 딥러닝을 사용해 Object Detection문제를 해결하려한 첫 번째 논문입니다.

하지만 우리가 살펴본 모델의 학습 과정을 보면 하나 하나가 모두 오래 걸릴만한 작업입니다.

  • Selective Search

  • model fine-tuning
  • SVM classifier train
  • Bounding Box regression

대부분의 리뷰에서도 R-CNN의 문제점으로 과도한 연산량을 말합니다. 추후에 이런 방식을 개선한 Fast R-CNN, Faster R-CNN등의 모델이 나옵니다. 성능은 비록 별로일진 모르지만 첫 번째 논문이라는 점과 AlexNet처럼 모델의 구조적인 부분에서 인사이트가 굉장히 많다고 생각합니다.

Reference


R-CNN Paper

갈아먹는 Object Detection

Comments