【コンピュータビジュアル】『LightHead R-CNN:In Defense of Two-stage Object Detector』


Light-Head R-CNN: In Defense of Two-Stage Object Detector

 , , 。

 :https://zhuanlan.zhihu.com/cyh24

 , , !

この文章はテーマから見れば一目瞭然だ:two-stage object detectorを守る.
Object detectionは2つの大きなジャンルに分かれていることを知っています.
  • 類はtwo-stage detector(Faster RCNN,Mask RCNN等):第1ステップはproposalsを生成する、第2ステップはこれらのproposalsを分類、回帰する.
  • もう一つはsingel-stage detector(YOLO,SSDなど):これらのアルゴリズムは一歩一歩、object detection taskをregression problemに簡略化したと理解できる.

  • 通常、前者は検出精度が高く、後者は検出速度が速い.YOLO、YOLOv 2、SSDなどのスピードが速くて精度の良いone stage detectorが登場するにつれて、RCNN familyへの愛着は少なくなったようです.結局、本当に応用が定着したとき、speedは明らかに非常に重要な点です.正直に言うと、もしあなたがランキングを磨くためでなければ、これらのone stage detectorアルゴリズムの精度も確かに十分です.まして速度は本当に速いです.
    しかし、個人的にはsingle-stageの上限はtwo-stageより低いと思います.two-stage detectorの速度を最適化する仕事を見たいと思っています.だから、ideaは大きくありませんが、実験はとてもよくできています.手動でいいですね.

    Abstract


    この文章では、著者は主に分析した.
  • なぜtwo-stage detectorが遅く、主に遅いのはどこですか?
  • 速度が遅いと同時に精度を保証するにはどうすればいいですか?

  • 本文では、著者はtwo-stageをbodyとheadに分解した.
  • body:proposal(RoI)を生成するプロセス、すなわちROI warping.
  • head:proposalベースrecognitionプロセス、すなわちRCNN subnet.

  • 著者らは,現在のアルゴリズムはbest accurcyを追求するためにheadを非常にheavyに設計するのが一般的であるため,前のbase modelを小さくしても検出速度を著しく向上させることはできないと考えている.
    この文章のポイントは、headをどのように痩せるかです.ライトヘッドおよび他のtrick:-著者はResnet-101をベースモデルとしてCOCO-2017のチャンピオンを獲得した.-さらに重要なことに,著者らは,base modelとして軽量レベルのXceptionを用い,30.7 mmAPに達し,102 FPSに達し,speedからaccuracyまで既存のsingle‐stageのアルゴリズムを完全に打ち破った.
    前の図では、speedとaccuracyの間のtrade-offがどれだけ良いかを自分で感じてみましょう.

    Light-Head R-CNN


    前述したように,著者らはtwo-stageをbody(RoI warping)+head(RCNN subnet)に分け,headがheavyすぎることがtwo-stageの効率が低い主な原因であると指摘した.典型的なtwo-stage detector構造を見てみましょう.

    RCNN subnet of Faster RCNN


    上の図はbase modeがResnet-101のFaster RCNNのネットワーク構造です.
  • は、まずResnet-101で特徴を抽出する、channel数2048のfeature mapを得る.
  • そして、RPNによって生成された各RoIは、RoI poolingによって固定サイズのfeature mapを得る.
  • 各RoIに対応する固定サイズのfeature mapは,RCNN-subnetにより最終的な分類,回帰結果を得る.

  • 各RoIはRCNN-subnetで1回計算され、精度を保証するためにFaster R-CNN用のRCNN-subnetは通常2つの大きなFC(またはresnetの5番目のステージ)であり、このようなやり方は非常に時間がかかります.
    スピードアップのため、通常RoI feature mapの後にglobal average poolが採用される.このような目的は,最初のFC層の計算量を減らすことであるが,ターゲットbbox回帰に不利なspatial localizationの情報がいくつか失われる.

    RCNN subnet of R-FCN


    R−FCNNはFaster−RCNNの各RoIが計算を繰り返す場合にいくつかの最適化を行った.
    R-FCNでは、
  • 同様に、Resnet-101を介してchannel数2048のfeature mapが得る.
  • そして、1 x 1の畳み込みコアを用いる、Position-sensitive feature map(channel:P^2(C+1))を得る.
  • 各RoIは、PSRoI Pooling層を介してfeature map(size:P*P,channel:C+1)を得る.さらに1つのglobal average pool層を経由して各RoIのpredictionを得る.

  • R-FCNのRCNN-subnetは小さく、global average poolしか含まれていないので、Faster-CNNより速いことがわかります.しかし,得られたfeature mapにPosition-sensitiveの特徴を持たせるためには,そのchannel数がP^2(C+1)であることを満たす必要がある.COCOデータセットでは、対応するchannel数が3969であり、これは必然的に大きな時間とストレージのオーバーヘッドをもたらす.

    RCNN subnet of Light-head RCNN


    上図は本稿で提案した改良構造であり,基本的にR−FCNに基づいて修正されていることがわかる.違うところは:1.著者らはlarge separable convolutionを用いてchannel数の少ないfeature map(3969から490に減少)を生成した.2.R-FCNのglobal average poolの代わりにFC層を用い、空間情報の損失を回避する.
    本文でいうlarge separable convolutionはInception 3の思想を参考にしたはずである:Inception 3は大きさk*kのボリュームコアを1*kとk*1の2層のボリュームで代用する.このようなボリューム置換を用いると,計算結果が一致することを前提として計算量を減らすことができる.減少した計算量は,ほぼ元のk/2であり,著者らはkを15としたので,ここで計算を大幅に減少させた.もちろん、計算の複雑さはC_と同じです.midとC_out関係.

    Experiments


    著者らは,8個のPascal TITAN XP GPUs上を走るCOCOの実験を行った.

    Implementation Details

  • synchronized SGD with weight decay: 0.0001, momentum: 0.9.
  • Each mini-batch has 2 images per GPU.
  • Each image has 2000/1000 RoIs for training/testing.
  • Pad images within mini-batch to the same size by filling zeros into the right-bottom of the image.
  • Learning rate: 0.01 for first 1.5M iterations and 0.001 for later 0.5M iterations.
  • Adopt atrous algorithm in stage 5 of Resnet.
  • Adopt OHEM.
  • Backbone network is initialized based on the pre-trained ImageNet.
  • Pooling size: 7.
  • Batch normalization is also fixed for faster experiment.
  • Data augmentation: Horizontal image flipping.

  • Ablation Experiments


    この部分は文章全体で私が一番好きな部分で、実験はよくできました.しかし、具体的な対比実験はやはり原文を見るべきだ.ここでは実験の結論を簡単にまとめます.

    Baselines


    著者らはR-FCNのオープンソースコードによりCOCO mini-validation set上にmmAP 32.1%のbaselineを得てB 1と記す.またいくつかの改善を通じて、より良いR-FCN baselineが得られ、B 2と記す.主な改善点は次のとおりです.
  • は画像に対してresizeを行い、shorter edgeを800とするとともにmax sizeを1200とする.
  • は画像が大きくなるので、新しいanchor:{322,642,1282,2562,5122}を採用する.
  • R-CNNでregression lossはclassification lossよりずっと小さいことが分かったのでregression loss*2.
  • Each image has 2000/1000 RoIs for training/testing.

  • 効果は非常に顕著で、これらの簡単な改善の後、R-FCNは3%上昇し、以下の図に示す.

    Thin feature maps for RoI warping


    より少ない数のfeature mapが結果に及ぼす影響を調べるために,著者らはまた実験を行った.以下の2点を除いて、R-FCNとほぼ一致しています.
  • feature map channelは3696(81*7*7)から490(10*7*7)に減少する.
  • feature map channel数を変更したため、global average poolを直接介してpredictionを行うことができず、FC層を追加した.

  • 実験結果は以下の通りである.
    これは予想に合致し,channel数が少なくなると必然的に精度の低下を招く.

    Large separable convolution


    上記の実験はchannel数を減らしたが,R−FCN中の1*1のボリュームコアを用いた.Large separable convolutionがもたらした影響を検証するために、著者らは前のグループの実験の基礎の上で、1*1の核を巻き、Large separable convolutionに変えた.同時に、k=15、Cmid=256、Cout=490とする.
    large separable convolutionを用いると、channel数は減少したが、効果は0.7%向上した.

    R-CNN subnet


    thin feature mapとlarge separable convolutionの効果についてそれぞれ紹介しました.以下はこの2つを結合した効果です.
    精度が大幅に向上する、mmAPは37.7%に達した.さらに重要なのは、thin feature mapおよびlight RCNN-subnetのため、数千のRoIがあってもアルゴリズムは速い.

    ライト-Head RCNNはどれくらい正確ですか?


    アルゴリズムの精度を向上させるために,著者らは他のtrickを加えた.
  • PSRoI poolingにRoIAlign(Mask-CNN)の補間技術を加え、1.7%向上した.
  • NMS thresholdを0.3から0.5に変更する後、0.6%上昇した.
  • multi-scaleを用いてtrainingを行い、1%上昇する.

  • 最終的に、COCO test-devデータセットでは、次のperformanceに達しました.

    ライト-Head RCNNはどれくらい速くできますか?


    精度と速度をバランスさせるために,著者らは以下のように変更した.
  • はResnet-101の代わりにXceptionを用いる.
  • atrous algorithmを廃棄する.
  • RPNチャンネルを256に半分に減らす.
  • Large separable convolution: kernel size = 15, Cmid = 64, Cout = 490 (10 × 7 × 7).
  • はPSPooling+RoI-alignを採用する.

  • 上記trickを採用した後、COCO上で102 FPSに達するとともに30.7%mmAPの精度に達することができる.とてもすごいと言えます!

    Conclusion


    この文章をまとめると、著者は主に以下のいくつかの改善点を持っている.
  • Large separable convolution+Thin feature mapはアルゴリズム速度を向上させる.
  • global average pooliingの代わりにFCを用いて空間情報の損失を低減し,精度を向上させる.
  • は、例えば、PSRoI pooling with RoIAlign、multi-scale training、OHEMなどの他のtrickを加えて精度をさらに向上させる.