R-CNN은 객체 검출 분야에서 널리 사용되는 딥러닝 모델이다.
RPN은 이미지에서 물체가 있을 가능성이 높은 영역(ROI)을 제안한다.
Region-based Convolutional Neural Network의 약자에서 볼 수 있듯이 영역기반 컨볼루션 신경망이라는 뜻인데, (1 step)특정 영역을 먼저 추출하고, (2 step) 그 영역에서 물체가 무엇인지 분류하는 방식이다. 참고로 R-CNN 시리즈는 R-CNN → Fast R-CNN → Faster R-CNN으로 발전했다.
R-CNN은 two stage 탐지 모델인데, 동작 방식은 다음과 같다.
1. 이미지에서 물체가 있을 가능성이 높은 후보 영역을 생성한다. (1) RPN(backbone)과 같은 모듈을 사용하여 ROI를 찾는다.
2. 제안된 영역에 대해 정확한 물체 (2) 클래스 분류와 경계 상자의 위치를 미세 조정하는 회귀 작업을 수행한다.
참고로 one stage와 two stage의 차이는 다음과 같다.
one stage: 속도가 빠름(CCTV 실시간 분석 가능), 정확도가 상대적으로 낮음, 대표 모델로 YOLO, SSD, RetinaNet이 있음.(RetinaNet의 경우 ResNet을 기본으로 backbone으로 사용함.)
two stage: 속도가 느림, 정확도가 높음, 대표 모델로 R-CNN이 있음
(1) RPN: 이미지에서 물체가 있을 가능성이 높은 영역(ROI)를 제안한다.
동작과정
1. CNN(예를들어 VGG, ResNet)으로부터 이미지 특징 맵을 입력으로 받는다.
2. 특징 맵 위를 슬라이딩 윈도우 방식으로 훑으면서 각 위치마다 물체가 있을 가능성이 있는 앵커를 생성한다. 앵커는 다양한 크기와 비율을 가진 사각형 영역들이다.
3. 각 앵커는 물체가 있을 가능성이 있는지(물체/배경) 여부를 이진분류한다. "이 앵커에 물체가 있는가?" "네" or "아니요"
4. 각 앵커에 대해 회귀 작업을 수행하여 제안된 박스의 위치와 크기를 미세 조정한다. 제안된 영역이 실제 물체와 더 잘 맞도록 하는 과정이다.
5. 최종적으로 물체가 있을 가능성이 높은 여러 영역을 제안하고 영역들은 이후 단계에서 더 정밀한 객체 분류와 경계 상자 회귀 과정을 거쳐 최종 검출 결과가 나온다.
(2) 클래스 분류: 예를 들어 테이블들과 의자들이 있으면 테이블1, 테이블2, 의자1, 의자2로 구분하는 것이 아니라 테이블, 의자만 구분한다. 개별 객체 구분과 다른 개념. instance segmentation 기술이 적용되면 개별 객체 구분도 가능하다.