z [논문 리뷰] Faster R-CNN : Towards Real-Time Object Detection with Region Proposal Networks, 2016
본문 바로가기

Computer Vision

[논문 리뷰] Faster R-CNN : Towards Real-Time Object Detection with Region Proposal Networks, 2016

728x90

Abstract

논문에서는 Region Proposal Network(RPN)을 소개합니다. 이는 full image convolutional features를 공유합니다. 이를 통해 cost free region proposal을 가능하게 합니다.
RPN : Fully Convolution Network, each position에 대해 object bounds와 objectness score를 predict 합니다.
Faster R-CNN은 RPN과 Fast R-CNN을 사용합니다.

Index Terms

: Object detection, Region Proposal, Convolutional Neural Network
포스트 필자는 이 논문에서 Region Proposal 방법이 가장 중요한 부분이라고 생각 했습니다.

Introduction

최근의 Object detection advance는 Region Proposal methods와 Region-based CNN으로부터 이뤄졌습니다.
Region proposal methods는 inexpensive features, economical inference scheme에 의지합니다. 하지만 Region proposal methods 중 popular한 Selective Search는 상당히 느립니다.

그래서 이 논문에서는 Deep Conv를 통한 algorithmic change 한 RPN 모델을 제시합니다!
RPN : Region Proposal Networks (FCN,, Fully Convolutional Network 종류 중 하나이다.)

논문 필자의 Observation : Fast R-CNN과 같은 region-based detector에서의 convolutional feature는 region proposals를 generate 하는게 가능하다.

RPN은 넓은 범위의 scales, ratios의 region proposals를 predict 하는게 가능합니다.


Fig. 1.과 같은 "anchor boxes"를 제시합니다. 이는 다양한 scales, ratios를 갖게 합니다.

RPN, Fast R-CNN의 unify를 위해 region proposal을 위한 fine-tuning과 object detection을 위한 fine-tuning을 번갈아(alternate)합니다.

Faster R-CNN

Faster R-CNN은 2개의 modules로 이뤄져 있습니다.

  • FCN : Proposes regions
  • Fast R-CNN Detector

Region Proposal Networks(RPN)

  • Input : image(of any size)
  • output : a set of rectangular object proposals, with objectness score

Ultimate goal이 RPN과 Fast R-CNN의 computation 공유이기 때문에, both networks가 common set of convolutional layers를 공유한다고 가정합니다.

ZFNet의 경우 5 conv layers를 공유 할 수 있었고, VGG16은 13 conv layers를 공유 할 수 있었습니다.

Convolutional feature maps에 대해 nxn sliding window를 적용하여 low dimentional feature로 만들어 줍니다. (ZF 256-d, VGG16 512-d)

이 low dimentional feature를 regression과 classification layer로 보내줍니다.
논문에서 n = 3

nxn conv layer 수행 후 reg, cls에 대해서 각각 1x1 conv layer도 수행해줍니다.

Anchors

Faster R-CNN에서 가장 중요한 부분입니다!
각각의 sliding-window에 대해 multiple region proposals를 예측 합니다. (multi scales, ratios)
각 location에 대한 가능한 proposals 수의 maximum을 k라고 notation 합니다.
이로 인해서 regression layer 에서는 k개 box에 대한 encoding \((x,y,w,h)\)을 갖기 때문에 4k개의 output을 갖고, cls에서는 object일 score와 object가 아닌 score로 2k개의 output을 갖습니다.

Anchor box에 대한 Fig. 3.

anchor는 sliding-window의 중앙에 위치하고 논문에서는 3개의 scale과 3개의 ratio를 갖습니다. (k = 9)

Translation-Invariant Anchors

Translation Invariant : Object의 이동에 영향을 받지 않음.

Anchor는 Translation-Invariant 특성을 갖습니다.
이러한 특성을 갖는 anchor로 인해 output layer의 dimension과 parameters가 크게 감소한다고 합니다.

Multi-Scale Anchors as Regression References

multi scales를 다루기 위한 popular ways 두가지가 존재합니다.

  • Images, feature pyramid 기반 : 유용하지만 시간이 많이 든다.
  • Use sliding window (Pyramid of feature) 보통 첫번째 방법과 같이 사용됩니다.

이와 달리 Faster R-CNN에서는 anchor-based method를 사용합니다. (pyramid of anchors)
이는 scale를 다루기 위한 extra cost를 안들게 합니다.

Loss Function

각 anchor에 대해 Object가 있는지 없는지 binary class label을 할당해줍니다.(Positive, Negative)
Positive label 기준에는 2가지가 있습니다.

  • Ground Truth에 대해 가장 높은 IoU를 갖는 anchor
  • 0.7보다 높은 IoU를 갖는 anchor

여기서 주의 해야 할 것은 1개의 ground truth box가 multiple anchors에 대해 positive label을 할당 할 수 있다는 점 입니다.

그리고 위의 조건을 만족하지 못한 non positive anchor 중 IoU가 0.3 보다 낮으면 Negative로 판별합니다.

Positive도 Negative도 아니라면 train에서 제외합니다.

Fast R-CNN의 multi-task loss를 minimize하는 loss function을 정의합니다.
$$
L({p_i},{t_i})={1 \above 1pt N_{cls}}\sum_i L_{cls}(p_i,p^*_i) + \lambda {1 \above 1pt N_reg}\sum_i p^*_i L_reg(t_i,t^*_i)
$$

\(p_i\) : i번째 anchor의 cls pred label (positive/Negative)
\(p^*_i\) : i번째 anchor의 cls ground truth label (positive/Negative)

옆의 regression loss 부분은 해당 anchor의 cls ground truth label이 positive일 때만 적용 하는 것을 알 수 있습니다. (object가 존재 할 때만)

\(L_{reg}\)는 Smooth L1 를 의미 합니다.

multi-task loss는 Fast R-CNN과 매우 유사합니다.

논문에서 \(N_{cls}= 256\) : minibatch size,
\(N_{reg}\) (~2,400) : anchor 개수에 해당합니다. 256 * 9 가 되겠네요,,
\(\lambda=10\)로 두 부분의 균형을 맞춰줌.

Training RPNs

RPN을 훈련하면 Negative anchors로 편향 될 수 있다고 합니다. 그래서 비율이 Pos, Neg가 1:1까지 되도록 uniformly sample 합니다.
그리고 all new layers에 대해 \(N(\mu=0, \sigma=0.01)\)의 가우시안 분포로 초기화 해줍니다.

Sharing Features for RPN and Fast R-CNN

그래서 어떻게 RPN과 Fast R-CNN을 같이 훈련 시킬까요?

RPN과 Fast R-CNN은 실제로는 독립적으로 훈련됩니다. Convolutional layer를 공유하기 위한 technique이 필요합니다.

features를 share 하면서 Networks를 training하는 세 방법 !

  • Alternating train (반복해가며 훈련)

    • train RPN (proposals를 내놓음)
    • proposals로 Fast R-CNN을 훈련
    • Fast R-CNN으로 RPN을 initialize (지금 까지의 방법을 반복)
  • Approximate joint training : RPN과 Fast R-CNN을 merge!
    training 중에 Feed forward 시에는 분리된 형태로 진행되지만, back propagation일 때는 signal에 대해 share 한 형태입니다.

  • Non-approximate joint trainig
    RPN으로 예측된 bounding box 또한 function의 input이기 때문에 bounding box가 back propagation을 통해 학습되려면 gradients가 필요합니다. 이는 roi-warping을 통해 해결 될 수 있다고 합니다. 하지만 추가적 설명은 논문의 요지에서 벗어나는 내용이라서 생략했습니다.

4-Step Alternating Training

  1. 3.1.3 training RPN방법으로 train 시킵니다. 이 network는 Imagenet pre-trained model로 initialize 되고, region proposal task에 대해 fine-tuning 합니다.

  2. Fast R-CNN 훈련 : Step-1의 RPN에서의 proposals를 사용합니다. 이 Network 또한 Imagenet pre-trained model로 initialize 됩니다. 여기까지 두 network는 convolutional layer를 공유하지 않습니다.

  3. Detector network로 RPN 훈련 : 공유되는 convolution layers를 fix하고, RPN의 unique layers를 fine-tuning 합니다. (이제 두 networks는 convolutional layers를 공유합니다.)

  4. Fast R-CNN 훈련 : 공유되는 convolutional layers를 fix하고 Fast R-CNN의 unique layers를 fine-tuning 합니다.

마치면서..

Fast R-CNN 그리고 RPN을 같이 이용한 Faster R-CNN에 대해 리뷰해봤습니다.
전에 Deep CNN을 이용한 Object Detection의 조상격인 R-CNN에 대해서도 리뷰 했었는데요, 이에 대해서는 구현하는 것을 실패했습니다. ㅜㅜ (참고할 github를 찾지 못했음,,)
그래서 이번에는 R-CNN, Fast R-CNN의 진화체인 Faster R-CNN을 꼭 구현해보고자 합니다.
나중에 구현한다면 수정하여 올리겠습니다.!

728x90