Fast R-CNN

detection
2015
iccv
iccv2015

(Curtis Kim) #1

RCNN의 개선으로, 효율적인 2-stage Detector를 제안합니다.

  • RCNN은 Multi-stage pipeline임. 학습이 복잡함.
  • RCNN에서 SVM으로 만들어져있던 classifier 등을 neural network으로 변경함
  • ROI Pooling 제안으로, 효율성을 높임. 이미지에 대해 Feature를 얻은 후, ROI 영역의 값을 사용하는 형태
  • RCNN 대비 매우 빠름, 테스트 시간이 최대 213x 개선됨.

Architecture

image

이미지 전체 대해 Convolution을 통해 Feature map을 얻는다는 점이 다릅니다. 기존에는 ROI 영역 각각에 대해서 Convolution을 반복처리하므로, 중복 연산 등으로 인해 비효율적입니다.

이미지 전체에 대해 얻은 Feature map에서

  1. ROI 영역에 해당하는 부분만 Pooling해서 7x7 Feature로 만들고,
  2. 이를 Fullly Connected Layer를 거쳐서, Object Class와 좌표를 얻어내는

구조입니다.

즉, RCNN 대비 아래 사항이 다릅니다.

  • Feature Map을 이미지에 대해 한번만 계산한다
  • ROI Pooling으로 7x7 ROI Feature를 얻는다
  • Classification 부분이 SVM에서 Softmax로 변경되어서 하나의 Neural Net.이 되었다
  • Bounding Box Regressor 역시 Neural Net의 하나의 Branch로 추가되었다.

ROI Pooling Layer

구체적으로 ROI Pooling Layer는 이렇게 구현됩니다.

  • ROI로 추출할 Feature 사이즈 : HxW (eg. 7x7)
  • Feature Map 위에서 ROI의 좌표 : (r, c, h, w)

그러면 Feature Map 위에서, \frac{h}{H} \times \frac{w}{W} 크기 만큼의 Grid를 만들어서 Pooling하면, 그 결과가 H \times W 크기로 우리가 원하는 Feature 사이즈가 됩니다. 위 그림을 참조하세요.

Training

네트워크는 실제로 아래와 같이 구성합니다.

  • ImageNet으로 Pretrain된 VGG 모델 등을 Base Backbone으로 사용합니다.
  • Last Max Pooling Layer 대신 ROI Pooling Layer가 들어갑니다
  • 그 이후에 랜덤 초기화된 Fully Connected Layer로 K+1개의 Classification과 Class별로 나누어져있는 좌표 Regressor 가 있습니다.

데이터 미니 배치도 더 효율적인 방식을 제안합니다.

  • 기존(eg. RCNN, SPPNet)에는 1개의 이미지에서 1개의 ROI를 샘플링해서, 미니배치에 추가하는 형태였습니다.
  • Fast RCNN에서는 2개의 이미지에서 각각 64개의 ROI를 샘플링해서 128개의 미니배치를 만듭니다.
  • 적은 수의 이미지로 많은 샘플을 만드므로, 미니배치를 만드는 것이 훨씬 효율적입니다.
  • Convergence가 조금 우려되는 사항인데, 논문에서는 성능 상 문제 없음을 밝히고 있습니다.
  • Hard Example Mining : GT와 IOU>0.5 인 경우 Positive, [0.1, 0.5) 에 속하는 경우 Negative로 구분하며, IOU가 너무 낮지 않은 샘플을 추가하지 않았습니다.

Loss는 Object임을 판별하는 Classification Loss와 좌표를 정확히 추정하는 Bounding Box Regressor Loss로 구성되어 있습니다.

L(p, u, t^u, v) = L_{cls}(p,u) + \lambda[u>=1]L_{loc}(t^u, v)
  • L_{cls}
    • K개의 Object와 1개의 Background 를 구분하는 것이므로 총 K+1개의 Class를 갖는 Softmax Log Loss
  • L_{loc}
    • Class 별로 Bounding Box를 추정하는 Smooth L1 Loss로 구성된 Regressor Loss
    • L_{loc}(t^u, v) = \sum_{i\in\{x,y,w,h\}}{smooth_{L_{1}}(t^u_i-v_i)}

Truncated SVD for Faster Detection

Fully Connected Layer를 반복해서 수행하는 부분을 더 빠르게 하기 위해서, SVD Factorization을 추가적으로 사용할 수도 있음을 밝힙니다.

Experiments

기존 대비 우수한 성능을 보입니다.

image

속도에 대한 분석입니다. SVD를 사용하지 않더라도, 기존 대비 매우 빠른 속도로, 이미지당 수백 ms 수준입니다.
그런데 이 분석은 Proposal 부분이 빠진 것으로 실제로는 2초 이상의 시간이 걸립니다.

추가적으로 아래와 같이 요약될 수 있는 Ablation Study를 진행했습니다.

  • Classification + Bounding Box Regression을 한번에 학습하는 게, 따로 학습하는 것보다 좋았다. 또 Bounding Box Regression이 추가되는 것이, 단순히 ROI Proposal만 사용하는 것 대비 더 나았다.
  • 여러 스케일로 이미지를 변경해서 결과를 취합하는 것이 아주 적은만큼의 성능향상을 주었다.
  • 트레이닝 데이터 많아지면 성능이 조금 올라간다.
  • Softmax가 SVM보다 성능이 아주 약간 나았다.
  • Selective Search의 Proposal 수를 늘려보아도 성능 개선이 거의 없고, 오히려 떨어지기까지 한다. (수를 늘리면, Recall은 올라가기는 함)

Conclusion

R-CNN와 SPPNet에 이은 깔끔하고 빠른 좋은 디텍터를 소개한 논문입니다. 이후에 Faster RCNN의 소개로 더 완성된 형태를 띄게 됩니다.


'Object Detection' Outline