Faster R-CNN 논문 리뷰


Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks을 정리한 글입니다!

Introduction

  • Faster R-CNN 논문은 Fast R-CNN을 보완한 논문입니다
    • 기존에 사용되던 Region Proposal 방법인 Selective Search는 CPU에서 계산
    • CNN 외부에서 진행
  • GPU의 이점을 최대한 활용하고 CNN 내부에서 진행하기 위해 Region Proposal Network(RPN)을 도입
    • RPN은 각 위치의 object bounds와 objectness score를 동시에 예측하는 fully convolutional network입니다

Architecture

  • 2개의 Network
    • Region Proposal Network
    • 위에서 나오는 proposed regions을 사용해 object 감지하는 Detector

Input

  • \[Height \times Width \times Depth\]
  • RGB Color를 갖는 이미지

Feature Extraction

  • pretraind model을 사용해 Feature Map 생성
  • input : 이미지
  • output : object의 Feature Maps

Region Proposal Network

  • input : Feature Extraction에서 뽑은 Feature Maps
  • output layer
    • classification layer : Object 유무
    • reg layer : Object Proposal
  • Feature Maps 위에 \(n \times n\) spartial window(보통 \(3\times 3\))를 슬라이드
  • sliding-window가 찍은 지점마다 여러 Region Proposal(Anchor) 예측
  • Anchor
    • sliding window의 각 위치에서 Bounding Box의 후보로 사용되는 상자
    • \(k\)로 표현
    • 3개의 크기(128, 256, 512), 3개의 비율(2:1, 1:1, 1:2) = 9개의 조합

  • Classification layer
    • 모든 anchor마다 foreground, background 분류
    • Anchor가 ground truth box와 IoU가 가장 크고 0.7 이상이면 foreground, 적으면 background
      • ground truth box : 실제 box의 좌표
      • IoU : Intersection over Union
      • foreground는 positive anchor
      • background는 non-positive anchor

  • Regression layer
    • Bounding box regression
    • \(t\)는 4개의 좌표값을 가지고 있으며 ground-truth \(t^*\)도 4개의 좌표값을 가지고 있습니다

Region of Interest Pooling

  • RPN을 지나면 서로 다른 크기의 proposed region이 나옵니다. 서로 다른 크기의 region을 동일한 크기로 맞추기 위해 RoI Pooling을 사용합니다
  • Fixed-size resize
    • RoI Pooling 대신 object detection을 구현할 떄 많이 쓰이는 방법으로, feature map을 crop시킨 후, 고정된 크기로 보간해 resize
    • 그 이후 \(2 \times 2\) kernel을 사용해 \(7\times 7 \times depth\)로 max pooling

Training

Loss Function

  • \(i\) : anchor의 index
  • \(p_{i}\) : anchor \(i\)가 객체인지 배경인지 예측값
  • \(p_{i}^{*}\) : ground-truth label, 1은 객체(positive)를 뜻하며 0은 배경(negative)
  • \(L_{cls}\) : 객체인지 배경인지의 log loss
  • \(N_{cls}\) : normalization 값, mini-batch값
  • \(t_{i}\) : 4개의 bounding box 좌표
  • \(t_{i}^{*}\) : ground-truth box
  • \(L_{reg}\) : 객체가 있을 경우 loss function. smmoth l1 loss 사용
  • \(N_{reg}\) : normalization, anchor locations의 갯수
  • \(\lambda\) : 기본값 10

Training RPN

  • 한 이미지에서 random으로 mini-batch만큼 anchors를 샘플링
  • 이 때, positive anchor와 non-positive anchor를 1:1 비율로 사용
    • 보통 negative anchors가 더 많기 때문에 비율을 조정하지 않으면 학습이 한쪽으로 편향됨
    • 하지만 positive anchor가 128개보다 적으면 zero-padding을 시켜주거나 아예 positive가 없으면 IoU값이 높은 값을 사용
  • weight는 랜덤하게 초기화
  • ImageNet classification으로 fine-tuning
  • Learning Rate : 0.001(60k mini batch), 0.0001(20k mini batch)
  • Momentum : 0.9
  • Weidght decay : 0.0005

Results

 R-CNNFast R-CNNFaster R-CNN
Test time per Image (with proposal)50s2s0.2s
상대적 Speed1x25x250x
mAP (VOC 2007)66.066.969.9

Experiments

  • Table 2. RPN을 사용했을 때 mAP가 조금 더 좋음

  • Table 8 : 3 scales, 3 ratios를 사용할 때 성능이 가장 좋았음
  • Table 9 : lambda값이 10일 때 성능이 가장 좋았음

Conclusion

  • Our method enables a unified, deep-learning-based object detection system to run at near real-time frame rates

각종 방법론

Reference


카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza