2020-02-05 04:16:03

지금까지 AlexNet, VGGNet, GoogLeNet, ResNet, SENet 등의 이미지 분류용 CNN 모델들을 다뤘던 것처럼, 물체 검출용 CNN 모델들에 대해 다루도록 하겠습니다. R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN, SSD, YOLO 등을 다룰 예정입니다. 오늘은 그 첫번째 시간으로 R-CNN에 대한 이야기를 하도록 하겠습니다. R-CNN의 original 논문은 2014년 CVPR에서 발표된 "Rich feature Hierarchies for accurate object detection and semantic segmentation"입니다. 

 

물체검출 또는 객체검출(obejct detection)용 CNN 모델은 이미지분류(image classification)용 CNN 모델의 발전과 함께 발전해왔습니다. 컴퓨터비전에서 물체검출이란 이미지 내에 있는 물체들을 찾아내서 어떤 클래스에 속하는지 예측하는 것을 의미합니다. 찾은 물체들의 위치를 나타내기 위해 그 위에 바운딩 박스들을 그려줍니다. 물체검출과 이미지분류의 차이에 대해 좀 더 자세한 내용을 알고 싶은 분은 제 예전 글을 참고해주세요.^^

=> "이미지 분류(image classfication)와 물체 검출(object detection)의 차이는?"  

 

R-CNN의 작동 원리

CNN을 이용한 첫 물체검출 알고리즘이라고 볼 수 있는 R-CNN은 Regions with CNN features의 약자로 다음과 같이 작동합니다. 

 

출처: original 논문

이미지에서 물체가 있을 것으로 추정되는 지역(region)들을 도출해냅니다. 그리고 각 지역에서 CNN 특성을 도출해냅니다. 그리고 각 지역이 어떤 클래스를 갖는지 분류해줍니다. 전반적인 구조가 눈에 보이시죠?ㅎㅎ 그러면 R-CNN에 대해서 좀 더 자세히 살펴보겠습니다.

 

 

original 논문에서 R-CNN에 대해 묘사한 그림이 별로 마음에 들지 않아서 제가 한번 그려봤습니다. 먼저 R-CNN은 selective search라는 알고리즘을 이용해서 물체가 있을만한 약 2000개의 지역을 도출합니다. 그것을 region proposals이라고 부릅니다. 그리고 각 region에 대해서 이미지 분류용 CNN을 이용해서 4096 차원의 특성벡터를 도출해냅니다. 여기서 사용하는 CNN 모델은 227x227 컬러 이미지를 입력으로 받아서 5개의 컨볼루션 층과 2개의 fully-connected 층을 거쳐서 특성을 도출해주는 역할을 합니다. 따라서 region proposal들을 CNN에 넣기 전에 227 x 227의 사이즈로 warping해줘야 합니다. 그리고 서포트벡터머신(support vector machine)을 이용해서 그 특성벡터와 관련된 클래스를 예측합니다. 마지막으로 물체들의 조금 더 정확한 위치를 파악하기 위해서 Bounding-box(BB) regression를 시행해줍니다. 이것이 필요한 이유는 이미지 분류용 CNN의 경우 물체가 이미지의 중앙에 위치하지 않더라도 대체적으로 클래스를 잘 예측해내기 때문에 물체가 바운딩 박스의 중앙에 위치하지 않을 확률이 높습니다. 따라서 BB regression을 통해 물체가 바운딩 박스의 중앙에 위치하도록 바운딩 박스의 위치를 조정해줍니다. 

 

출처: original 논문

 

위 표는 VOC 2010 데이터셋에서 물체 검출 모델들의 성능을 평가한 것입니다. VOC 2010 데이터셋은 비행기, 자전거, 새, 배, 버스, 자동차 등 20개의 클래스를 포함하고 있습니다. 위 표를 통해 R-CNN의 성능을 살펴보면, 기존에 CNN을 사용하지 않은 기존 알고리즘들에 비해 mAP가 상당히 높아졌음을 알 수 있습니다. mAP는 물체검출 모델의 성능을 평가하는 지표로 이해하시면 됩니다. mAP를 구체적으로 이해하고 싶으신 분들은 제 이전 글을 참고해주세요.^^

=> 물체 검출 알고리즘 성능 평가방법 AP(Average Precision)의 이해

 

눈치가 빠른 분들은 R-CNN의 큰 단점을 이미 파악하셨을 것입니다. 2000개의 지역에 대해서 모두 CNN 특성을 도출한다?? 굉장히 비효율적입니다. 그 중 거의 대부분은 검출된 물체로 인정되지 않기 때문입니다. 그래서 이것을 보완하기 위해 FAST R-CNN이란 모델이 제안됩니다. 이름에서 알 수 있듯이 R-CNN보다 좀 더 빠르겠죠? 이것에 대해서는 다음 시간에 살펴보도록 하겠습니다.^^ 

 

항상 질문과 지적은 환영합니다. 빠르게 답변드리도록 노력하고 있으니, 댓글 남겨주세요.^^ 

 

 

<참고자료>

[1] https://heartbeat.fritz.ai/a-2019-guide-to-object-detection-9509987954c3, Derrick Mwiti, "A 2019 Guide to Object Detection"

[2] https://blog.lunit.io/2017/06/01/r-cnns-tutorial/, Lunit Tech Blog, "R-CNNs Tutorial"