Fast R-CNN

유승우·2022년 5월 12일
0

Abstract


Fast R-CNN은 R-CNN의 한계점을 보완하고자 제안되었다.

  1. region of interest 마다 CNN 연산을 하기 때문에 속도가 느리다. → ROI pooling을 통해 해결
  2. multi-stage piplines이기 때문에 end-to-end로 학습하지 못한다. → 하나의 pipeline으로 통합

Introduction


최근 deep CNN은 image classification 과 object detection에서 정확도가 크게 개선되었다. object detection은 객체의 정확한 위치 파악이 필요하기 때문에 classification보다 복잡하기에 두 가지 과제가 발생한다.

  1. 수많은 region proposal이 처리되어야 한다.
  2. 이러한 후보 영역들은 대략적인 위치만 제공하기 때문에 정확한 위치를 재정의 해야한다.

이러한 문제에 대한 해결책들로 인해 속도, 정확성, 단순성이 저하되는 경우가 많다.

이 논문에서는 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에도 단점이 있다.

  1. R-CNN과 같이 multi stage pipline이다.
  2. R-CNN과 달리 Spatial pytamid pooling networks는 CNN을 업데이트 시킬 수 없다.
    • 이는 매우 깊은 CNN의 정확도를 제한한다.

이러한 R-CNN과 SPP-net의 단점을 보완하고 속도와 정확성을 향상시키기 위해 fast-rcnn은 다음과 같은 알고리즘을 제안한다.

Fast R-CNN 알고리즘 단계


  1. Region Proposal

    • R-CNN과 마찬가지로 Selective Search를 통해 region proposal을 추출한다.
    • 전체 이미지와 region proposal을 입력으로 사용하여 feature map을 생성한다.
  2. CNN

    • R-CNN과 다르게 추출한 region proposal을 그대로 feature map에 투영시켜 ROI 생성
    • 생성한 ROI들을 ROI pooling을 통해 ****고정 크기의 feature map을 만든다.
    • 이렇게 생성된 feature map은 fc layer를 통과시켜 두 layer로 갈라진다
      1. softmax 확률
      2. bounding box regression offset
💡 ROI pooling

  • 기존 R-CNN에서 각 region마다 CNN을 수행해야 했던 것을 단 한번의 CNN 연산을 통해 가능케 하는 방법
  1. 입력 이미지가 CNN을 통과하여 feature map 생성
  2. region proposal이 생성된 feature map에 투영되어 ROI 생성
  3. hw 크기의 ROI 는 h/H w/W 크기의 sub-window로 분할
  4. sub-window에 max pooling을 진행하여 고정된 output 생성

eg ) 4 x 6 ROI를 얻었을 때 input이 2x2인 fc layer를 통과하기 위해 2(4/2), 3(6/2) sub-window로 분할된다.

  1. Classification & Bounding Box Regression
    • 이렇게 두 개의 output layer를 통해 classication과 regressor를 진행함으로써 End-to-End방식으로 학습이 가능해졌다.

FIne-tunning for detection


이 논문에서는 보다 효율적인 학습 방법을 제안한다.

  1. N개의 이미지를 먼저 샘플링하고 각 이미지에서 R/N개의 ROI를 다시 샘플링한다.

    • R : mini-batch-size
    • 이렇게 하면 동일한 이미지에서 ROI는 순전파와 역전파 과정에서 연산량과 메모리가 공유된다.
    • 또한, N을 작게 설정할수록 mini-batch 연산량은 더욱 줄어든다.
  2. 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

0개의 댓글