소소한 블로그

[논문리뷰] R-CNN 이해 본문

이론/이미지인식

[논문리뷰] R-CNN 이해

happy_ai 2021. 3. 23. 16:06

안녕하세요. 계획에서 언급했듯이 Mask R-CNN의 이해를 위해

먼저 R-CNN, Fast R-CNN, Faster R-CNN에 대해 간략히 다뤄보려 합니다.

 

따라서 저의 블로그 첫 글을 R-CNN에 대한 게시물로 꾸미기로 했습니다!

 

R-CNN을 이해하기 위해 논문

'Rich feature hierarchies for accurate object detection and semantic segmentation '

을 읽어봤습니다. (논문링크)

 

저의 목표는 이 논문을 완전히 이해하는 것이 아니라 Mask R-CNN을 위한 기본 다지기였기 때문에,

이번 게시물은 제가 이해한 바를 간략히 작성하고자 합니다!

(+ 개인적으로 흥미로웠던 부분도 끄적였습니다ㅎㅎ)


R-CNN은 Object Detection을 위한 모델입니다.

Object Detection이란 이미지에서 여러 물체가 있을 때, 

1) 각 물체가 어떤 class인지 판단하고

2) 해당 물체의 위치를 bounding box로 localizing 하는 

태스크입니다.

 

 

글을 시작하기에 앞서 알면 좋은 용어가 있습니다. 그건 region proposal라는 것인데요, 이것은 물체가 있을 법한 곳을 뜻합니다. class와 상관없이 물체의 후보 지역을 의미합니다. 

 

 

본론으로 들어가보겠습니다. 논문의 Abstract를 보면, R-CNN은 해당 시기에 VOC 2012에서 제일 좋은 성과를 내는 모델보다 mAP를 30%이상 개선시켰다고 하네요. R-CNN은 아래 2가지 insight를 가지고 있습니다.

1) object를 localize하고 segment하기 위해 region proposals에다 CNN을 적용 시키기

2) training data가 적은 경우, supervised pre-training을 하고나서 domain specific한 fine-tuning 과정 거치기

 

 

특히, region propsoalsCNN을 합치기 때문에 이 모델을 R-CNN이라고 정의했습니다.

region proposal과 CNN을 합친다는 아이디어는 'ImageNet 데이터셋의 classification task에서 쓰인 CNN을 PASCAL VOC Challenge의 object detection task에서는 어떻게 활용할 수 있을까?'로 부터 시작되었다고 합니다.

 


 

R-CNN은 아래 3가지 module로 구성되어 있습니다.

1) category-independent region proposals 생성하기
2) 각 region으로 부터 fixed-length feature vector을 뽑아내는 CNN
3) class-specific linear SVMs

 

 

각 세부 과정을 들여다 보겠습니다.

1) category-independent region proposals 생성하기

selective search를 사용하여 2000개의 region proposals을 생성합니다. selective search를 사용한 주된 이유는 기존 모델들이 selective search를 썼기 때문에 이 모델과 성능 비교를 동등하게 하기 위해서 입니다. selective search가 무엇인지는 여기서 다루지 않겠습니다.

 

 

2) 각 region으로 부터 fixed-length feature vector을 뽑아내는 CNN

앞선 단계에서 뽑아낸 region proposals를 CNN에 입력하기 전에, 각 region들을 특정 사이즈로 변환하는 과정을 거칩니다. region들이 어떤 사이즈이든간에 모두 227 x 227 pixel 사이즈로 변환시킵니다. 

사이즈를 변환시켰다면, CNN 과정을 거쳐서 4096-dimention의 크기를 가지는 feature vector을 구합니다.

 

 

3) class-specific linear SVMs

앞에서 얻은 feature vector을 이용하여 각 region이 어떤 클래스를 포함하고 있는지 알아내야 합니다. 즉, feature vector에 대해 클래스를 판단하는 과정을 거칩니다.

흔하게 쓰이는 방법은 softmax layer일텐데요, R-CNN은 linear SVM을 사용합니다.

softmax layer가 아닌 linear SVM을 쓰는 이유는 논문에서 소개하고 있는데요, 하나만 언급하자면 성능 측면(mAP, VOC 2007 데이터 기준)에서 linear SVM softmax layer보다 약 3.3% 가 높았다고 하네요.

 

R-CNN은 클래스별로 linear SVM을 정의하여 훈련시킵니다.

또한 훈련 과정에서 region proposalIoU 0.3보다 큰 것만 linear SVM을 학습시킵니다.

 

 

추가로 Bounding-box regression에 대해 간략히 알아보겠습니다.

(논문의 '2. Object detection with R-CNN' 챕터에서 R-CNN를 구성하는 3가지 모듈을 위의 3가지로 소개했는데, 왜 bounding-box regression은 포함시키지 않았는지 의문입니다..!

하지만 Bounding-box regression 또한 train과 test과정에서 필요한 과정이므로 3가지 모듈에 뒤이어 정리해봤습니다.)

 

+) Bounding-box regression

앞서 뽑아낸 region proposal클래스에 한정되지 않고 물체가 있을 것 같은 후보 지역을 추출한 것입니다. 따라서 최종적인 bounding box가 되기에는 정교하지 않습니다.

따라서 region proposal을 ground-truth의 bounding box에 맞게 조정하는 과정을 거쳐야 할 것입니다.

이를 위해 Bounding-box regression 과정이 필요합니다.

 

Bounding-box regression을 어떤 단계에서 할 지 개인적으로 궁금했는데요,

위에서 소개하지는 않았지만 greedy non-maximum suppression 과정을 거친 다음 이뤄진다고 합니다.

 

따라서 Bounding-box regression을 설명하기 전에 greedy non-maximum suppression에 대해 간략히 알아보겠습니다.

사실 생각해보면 region proposal은 클래스와 상관없이 물체의 후보지역을 뽑아낸 것이기 때문에,

target이 되는 class의 집합에는 없는 물체를 가르킬 수도 있고 또는 하나의 물체에 대해 여러 bounding box가 있을 수 있습니다.

따라서 상관없는 region은 걸러내고 또한 여러 region proposal을 하나로 만드는 과정이 있어야겠죠.

R-CNN은 이를 위해 greedy non-maximum suppression을 사용합니다.

이 과정은 위의 3번째 모듈 과정 뒤에 수행됩니다.

 

그러면 다시 Bounding-box regression로 돌아가보겠습니다.

greedy non-maximum suppression을 거친다음 class-specific한 bounding-box regression이 이뤄집니다.

(class별로 다른 regression을 거칩니다.)

 

Bounding-box regression은 linear한 과정을 거쳐 학습시킨다고 하는데 자세한 내용은 생략하겠습니다.

 

 


 

개인적으로 R-CNN의 전체적인 과정이 궁금했기 때문에 R-CNN의 전체적인 과정에 대해 간략히 적어봤지만, 논문에서 강조한 것이 또하나 있습니다.

 

그것은 R-CNN은 large dataset에 대해 pre-training 하고 난뒤, 자신들의 task에 대해 fine-tuning 했다는 것입니다.

전에 공부했던 pre-trained language model이었던 BERT가 생각나면서, 몇년 전부터 이런 아이디어를 실현시키고 있었구나 새삼 놀랐습니다!

 

 

여기까지 R-CNN에 대해 간략히 알아보았습니다.

그 당시에는 object detection 문제에 대해 CNN을 적용시켰다는 것이 매우 새롭게 다가왔을 듯 합니다.

 

 

그러면 이제 Fast-RCNN 논문을 읽어보러 가겠습니다 :)