Faster R-CNN: Towards Real-Time Object Detection
with Region Proposal Networks
Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun

1. INTRODUCTION
1.1 기존 R-CNN 계열의 문제점
R-CNN
기존의 R-CNN은 Selective Search를 통해 약 2,000개의 후보 영역(Region Proposal)을 생성해야 했고, 각 후보 영역마다 CNN을 개별 수행하였고 이 때문에 매우 느린 속도를 가진다는 한계를 가지고 있었다.
Fast R-CNN
이러한 문제를 해결하기 위해 Fast R-CNN이 나오게 되었다.
Fast R-CNN은 이미지 전체에 대해 CNN feature map을 한 번만 추출하고, ROI Pooling을 통해 속도 개선할 수 있게 되었다.
그러나 여전히 Selective Search 사용하고 있고, Region Proposal 생성 단계가 병목 현상 발생한다는 한계가 존재했다.
→ 즉, Fast R-CNN 이후에는 CNN 연산보다 Region Proposal 생성 속도가 더 느려지는 문제가 발생하였다.
1.2 Faster R-CNN Keypoint
Faster R-CNN의 핵심 아이디어는 다음과 같다.
- CNN feature map을 공유 (RPN과 Detector가 같은 feature map 공유)
- sliding window 방식으로 후보 영역 생성 (RPN)
- 객체 존재 여부(objectness)와 bounding box를 동시에 예측
- end-to-end 학습 가능
2. Related Work
- R-CNN은 Region Proposal + CNN + SVM 구조로 정확도는 높지만 매우 느린다는 문제가 있다.
- SPPnet은 CNN feature 공유하고 Spatial Pyramid Pooling 사용하게 되면서 어느정도 속도 개선이 되었다.
- Fast R-CNN은 ROI Pooling 사용하고, end-to-end 학습 가능하게 되었지만 Selective Search는 외부 알고리즘을 사용해야 했다.
→ 하지만 “Region Proposal 단계가 여전히 문제이다. 그래서 Faster R-CNN은 이를 해결하기 위해 Proposal 생성까지 CNN 안에서 수행할 수 있도록 하였다.
3. Faster R-CNN Architecture
Fast R-CNN은 크게 두 단계로 이루어져 있다.
- RPN이 Region Proposal 생성
- Fast R-CNN detector가 최종 분류 수행
→ 이 두 단계는 convolution layer를 공유
3.1 Region Proposal Network (RPN)
RPN은 feature map 위를 sliding window 방식으로 이동하면서 객체 후보 영역을 생성한다.
그 과정은 입력 이미지 → CNN → Feature Map → RPN → Proposal 생성으로 진행하게 된다.
RPN은 각 위치마다 객체 존재 여부와 bounding box 좌표를 예측하게 된다.
Sliding Window
본 논문에서는 3×3 convolution window를 사용하였다. 각 위치마다 두 개의 branch가 존재한다.
Classification Layer
객체 존재 여부를 예측
Regression Layer
bounding box 좌표 보정
3.2 Anchor Box
논문은 다양한 크기와 비율의 bounding box를 처리하기 위해 Anchor를 도입하였다.
Anchor를 설정할 때에는
각 위치마다 3개의 scale과 3개의 aspect ratio를 사용한다.
즉, k = 3x3 = 9로 9개의 anchor를 생성하게 된다.
각 anchor는 postive/negative로 분류되어 학습된다.
Postive Anchor의 조건은 GT box와 IoU가 가장 높은 anchor이거나 IoU > 0.7인 경우이다.
Negative Anchor의 조건은 IoU < 0.3인 경우이다.
3.3 Multi-task Loss
RPN은 classification loss와 regression loss를 동시에 학습하는데, 논문의 loss function은 다음과 같다.
→ 위의 식을 통해서 객체 여부를 판단하고, 위치 보정을 동시에 최적화한다.
4. Sharing Features with Fast R-CNN
Faster R-CNN의 핵심은 RPN과 Detector가 feature map을 공유한다는 것이다.
기존의 방식은 Proposal 생성용 feature와 Detection용 feature를 따로 계산하는 방식이다.
하지만 Faster R-CNN은 하나의 CNN backbone을 공유한다.
따라서 계산량은 감소하게 되고, 속도는 증가하며 메모리 효율이 향상되는 효과를 얻을 수 있게 되었다.
→ 본 논문에서는 "RPN이 detector에게 “어디를 봐야 하는지” 알려주는 역할을 한다."라고 언급하였다.
5. Traning Strategy
Faster R-CNN은 4-step alternating traning을 제안하였다.
Step 1 : RPN 학습
Step 2 : Fast R-CNN detector 학습
Step 3 : RPN과 detector의 convolution layer 공유
Step 4 : 두 네트워크 fine-tuning
→ 이를 통해 proposal 생성하고 detection을 하나의 unified network로 결합
6. Experiments

PASCAL VOC 2007에서 Faster R-CNN의 성능을 평가했을 때 SS(selecive search), EB(edge box)기법에 비해 성능이 좋다는 결과를 확인할 수 있었다.

RPN을 VGG-16으로 훈련해 성능을 측정했을 때 mAP가 올랐으며 데이터를 하나씩 추가할수록 mAP가 올랐다.

one stage보다 two stage(Faster R-CNN)의 mAP가 더 좋은 성능을 보였다.

COCO 데이터셋으로 훈련하였을 때도 Faster R-CNN이 Fast R-CNN보다 더 높은 성능을 보였다.
6. Conclusion
본 논문에서는 빠르고 정확한 영역 추정을 하기 위해 RPN을 제안했다. RPN과 detection이 Feature를 공유함으로써 정확도와 속도 측면에서 훨씬 개선되었으며, 효율도 챙길 수 있었다.