RCNN 논문을 읽고 정리하면서 논문 하나하나를 리뷰하여 따로 포스팅하는 것 보단 각 특징들을 서로 비교하며 간단하게 정리하는게 좀 더 스스로에게 도움이 될 것 같았다.
때문에 논문에 언급된 내용들 전부가 해당 글에 있는 것이 아니라 굵직한(굵직하다고 생각된) 특징들만 있는 (간단) 비교 글임을 미리 언급한다.
R-CNN (regions with CNN)
R-CNN은 object detection에서 딥러닝을 최초로 적용시킨 모델이다.
이미지에 있는 data와 label을 input으로 하여 카테고리와 무관하게 물체의 region을 찾는 region proposal을 진행한다. proposal된 region으로부터 고정된 크기의 feature vector를 warping하여 CNN의 input으로 사용한다. 이 feature vector들을 CNN에 각각 넣기 때문에 굉장히 느리다. CNN을 통해 나온 feature map을 사용해 SVM을 사용하여 객체의 종류를 classification하고 bounding box를 조정하기 위해 regression을 진행한다.
R-CNN은 region proposal을 위해 selective search를 사용하여 임의의 bounding box를 설정한다. bounding box를 랜덤하게 작고 많이 생성하여 이것들을 계층적 그룹핑 알고리즘으로 조금씩 merge한다. 이를 바탕으로 RoI를 제안하게 된다.
모든 proposal에 대해 CNN을 거쳐야 하므로(bottleneck 구조) 연산량이 매우 많다는 문제점이 있다.
Fast R-CNN
Faster R-CNN은 R-CNN의 bottleneck 구조 단점 개선하기 위해 제안된 방식으로 전체 이미지에 대해 미리 학습된 CNN을 수행한 후 출력 된 feature map단에서 object detection을 수행한다.
pretrained model에서 feature map을 추출하고 selective search를 통해 RoI를 찾고 이 RoI들에 대해 RoI pooling을 진행하여 고정된 크기의 feature vector를 얻는다. 이 feature vector는 FC Layer를 통과해 두개의 branch로 나뉘게 된다. 하나는 softmax를 통과해 해당 RoI가 어떤 객체인지 classification을 하고 또 다른 branch는 bounding box regression을 통해 bounding box의 위치를 조정한다.
Fast R-CNN은 multi stage model에서 end-to-end로 구성하여 속도, 정확도, 학습 속도를 향상 시켰다. 하지만 region proposal을 CNN이 아닌 CPU 연산으로만 가능한 selective search 알고리즘으로 수행하여 bottleneck 현상 발생한다는 문제가 있다. 실제로 이 부분이 inference를 수행할 때 가장 많은 시간을 차지 한다고 한다.
RPN의 개념과 동작 단계를 알아야 Faster R-CNN을 이해할 수 있기에 RPN에 대해서도 간략하게 설명하고자 한다.
RPN (region proposal network)
object detection에서 중요한 부분으로 feature map을 input으로 하고 RP를 output으로 하는 네트워크이다.
region proposal을 생성하기 위해 feature map위에 nxn window를 sliding window한다.
RPN은 입력 → bounding box 계산 → sort → NMS → merge 단계로 동작한다.
input으로 3가지의 정보를 입력받아 deep network를 통해 산출된 값인 delta 값과 앵커(anchor)를 결합해 값들을 조정하여 실제 객체의 위치를 표현한다. 입력으로 설정된 앵커 박스는 확률이 0에 가까운 부분에서도 bounding box 정보를 가지고 있기 때문에 확률이 높은 객체에 대해서만 작업을 진행한다. 동일한 클래스에 대해 높은 confidence → 낮은 confidence 순서로 정렬을 하고 가장 높은 confidence를 가진 객체의 bounding box와 IoU가 일정 값 이상인 bounding box는 동일한 객체를 detection 했다고 판단하고 삭제한다. 후에 NMS 결과를 연속된 형태로 모아 주어 이후 convolution과 같은 절차를 진행하게끔 한다.
이러한 과정들을 거쳐 NMS는 object score와 object proposal을(객체가 존재할 확률이 높고 중복 제거 된 bounding box 즉, RoI) output으로 가지게 된다.
RPN은 Fast r-cnn(3개의 스케일과 3개 비율을 사용해 k=9 앵커 사용)과 합성곱 신경망을 공유하며 Regression와 classification을 수행한다.
RPN은 selective search 역할을 대체하는데, selective search없이 RPN을 학습하는 구조로 모델을 만드는 것을 목표로 한 모델이 Faster R-CNN이다.
Faster R-CNN
Faster R-CNN의 가장 큰 차이점은 기존 Fast R-CNN 구조를 이어가지만 selective seasrch를 제거하고 RPN을 통해 RoI를 계산하여 bottleneck 현상을 해소했다는 것이다.
feature map으로부터 selective search를 거치지 않고 RPN에 전달해 계산을 진행하여 여기서 RoI를 얻는다. 얻은 RoI로 RoI pooling을 진행하여 object detection을 진행하게 된다.
Faster R-CNN 저자들은 전체 모델을 한번에 학습하기 어렵기 때문에 4단계(논문에서 확인 가능)에 걸쳐 모델을 번갈아가면서 학습을 시키는 Alternating training 기법을 취했다.
region proposal을 한번에 수행했다는 의의는 있지만, 학습 과정이 복잡하고 2 step이라 real time이라고 하기에는 여전히 무리가 있다.