Abstract
Fast R-CNN은 R-CNN의 한계점을 보완하고자 제안되었다.
- region of interest 마다 CNN 연산을 하기 때문에 속도가 느리다. → ROI pooling을 통해 해결
- multi-stage piplines이기 때문에 end-to-end로 학습하지 못한다. → 하나의 pipeline으로 통합
Introduction
최근 deep CNN은 image classification 과 object detection에서 정확도가 크게 개선되었다. object detection은 객체의 정확한 위치 파악이 필요하기 때문에 classification보다 복잡하기에 두 가지 과제가 발생한다.
- 수많은 region proposal이 처리되어야 한다.
- 이러한 후보 영역들은 대략적인 위치만 제공하기 때문에 정확한 위치를 재정의 해야한다.
이러한 문제에 대한 해결책들로 인해 속도, 정확성, 단순성이 저하되는 경우가 많다.
이 논문에서는 sota CNN object detector 들의 훈련 프로세스를 간소화하기 위해 공간 위치를 세분화하고 후보 영역 제안을 잘 분류하는 방법을 한꺼번에 학습하는 single-stage-trainging 알고리즘을 제안한다.
R-CNN and SPP-Net
R-CNN은 계산을 공유하지 않고 각 객체 제안에 대해 forward를 수행하기 때문에 속도가 느리다.
SPP-net은 Spatial pyramid pooling networks 를 이용해 계산을 공유하여 R-CNN의 속도를 높이기 위해 제안되었다. SPPnet은 전체 입력 이미지에 대해 feature map을 추출한 feature vector를 이용해 각 객체 제안을 분류한다.
하지만, SPP-net에도 단점이 있다.
- R-CNN과 같이 multi stage pipline이다.
- R-CNN과 달리 Spatial pytamid pooling networks는 CNN을 업데이트 시킬 수 없다.
이러한 R-CNN과 SPP-net의 단점을 보완하고 속도와 정확성을 향상시키기 위해 fast-rcnn은 다음과 같은 알고리즘을 제안한다.
Fast R-CNN 알고리즘 단계
-
Region Proposal
- R-CNN과 마찬가지로 Selective Search를 통해 region proposal을 추출한다.
- 전체 이미지와 region proposal을 입력으로 사용하여 feature map을 생성한다.
-
CNN
- R-CNN과 다르게 추출한 region proposal을 그대로 feature map에 투영시켜 ROI 생성
- 생성한 ROI들을 ROI pooling을 통해 ****고정 크기의 feature map을 만든다.
- 이렇게 생성된 feature map은 fc layer를 통과시켜 두 layer로 갈라진다
- softmax 확률
- bounding box regression offset
💡 ROI pooling

- 기존 R-CNN에서 각 region마다 CNN을 수행해야 했던 것을 단 한번의 CNN 연산을 통해 가능케 하는 방법
- 입력 이미지가 CNN을 통과하여 feature map 생성
- region proposal이 생성된 feature map에 투영되어 ROI 생성
- hw 크기의 ROI 는 h/H w/W 크기의 sub-window로 분할
- sub-window에 max pooling을 진행하여 고정된 output 생성
eg ) 4 x 6 ROI를 얻었을 때 input이 2x2인 fc layer를 통과하기 위해 2(4/2), 3(6/2) sub-window로 분할된다.
- Classification & Bounding Box Regression
- 이렇게 두 개의 output layer를 통해 classication과 regressor를 진행함으로써 End-to-End방식으로 학습이 가능해졌다.
FIne-tunning for detection
이 논문에서는 보다 효율적인 학습 방법을 제안한다.
-
N개의 이미지를 먼저 샘플링하고 각 이미지에서 R/N개의 ROI를 다시 샘플링한다.
- R : mini-batch-size
- 이렇게 하면 동일한 이미지에서 ROI는 순전파와 역전파 과정에서 연산량과 메모리가 공유된다.
- 또한, N을 작게 설정할수록 mini-batch 연산량은 더욱 줄어든다.
-
softmax 또는 SVM 분류와 regressor 를 하나의 과정으로 통합하여 end-to-end 학습이 가능하게 하였다.
Multi-task loss

- L_cls : true class u의 logg loss

- L_los : bounding box loss
- u ≥1 이면 1, u = 0 이면 0이 되는 기호이다. (0인 경우는 배경에 해당)
- gamma를 통해 두 task loss의 균형을 조절

- L2_loss 가 아닌 L1_loss가 사용되었는데데 이는 L1_loss가 조금 더 로버스트하기 때문.
- 감마는 1로 사용
장/단점
장 : ROI Pooling을 통해 연산량을 대폭 줄였으며, End-to-end방식으로 학습할 수 있게 됨으로 역전파가 가능해졌다.
단 : 여전히 첫 번째 Selective Search는 CPU에서 수행되므로 속도가 느리다
Reference
https://arxiv.org/abs/1504.08083