物体検出の実装を目指す-Fast R-CNNについて

結構間が空いたが、Fast R-CNNの論文を読んだ。適度にメモする。

SPPnetではSelectiveSearchから得た候補領域一つ一つをCNNにかけるというのを無くし、対象とする画像データ一枚からCNN(畳み込みの処理のみ)にかけて得た特徴マップから物体検出を行う手法をとることで、大幅な時間短縮に成功した。大体RCNNから24~102倍(テスト時)速くなった。

Fast-RCNNはSPPnetより10倍(テスト時)速くなっている。まだ速くなるのか。

物体検出は画像分類と比べて複雑な2つの主要な課題がある。(というよりは発生する)

  1. SelectiveSearchなどで候補領域を処理しなければいけないこと
  2. これらの候補領域は正確な位置特定を達成するための大まかな位置情報しか提供しないこと。つまり洗練しなければいけない。

Fast-RCNNではこの2つの問題を考慮し、物体の候補領域から分類を行うこと、空間的位置を改善することを共同で学習する単一段階のアルゴリズムが導入されている。
やっと分類と位置特定の2つが一度に学習できる段階に来た。これは胸が熱い。。。

SPPnetも十分すごいが、かなり大きい欠点がある。それはSPP層つまり空間ピラミッドプーリング処理より前の畳み込み層を更新することができないということ。この欠点によってディープネットワークの精度に限界が発生してしまう。

Fast-RCNNではこの問題も解決しており、全てのネットワークの層を更新できる

学習の手順としては以下のようになる。

f:id:Owatank:20171013125712p:plain

SPPnetと同様に画像全体と物体の候補位置を受け取り、画像全体から畳み込み層と、Maxプーリング層にて一枚のConv特徴マップを生成する。

次に、その特徴マップから受け取った各候補位置に対応する領域を抜き出し(RoI Projectionのあたり)、RoI(region of interest)プーリングと呼ばれる処理を行い固定長の特徴ベクトルを出力する。
出力した固定長の特徴ベクトルは2つのfc層に分岐する。

  • 一つ目はクラス分類を行う出力のsoftmaxに

  • 二つ目はより洗練されたbounding-boxの位置を符号化するbbox-regressorへ

Fast-RCNNにて新たにRoIプーリングが出てきた。これは簡単にいうとSPP層におけるピラミッドレベルが一つしかないプーリング処理。どっちも任意の領域内で決まった長さの特徴ベクトルを出力することに変わりはない。

f:id:Owatank:20171013133646p:plain

そして分類とbounding-box回帰の訓練において2つを合わせたマルチタスクの損失関数を定義することでこの2つを共同に訓練することができる。
たこマルチタスクの損失関数の定義によって全てのネットワークの層を更新することが可能となった。すごいぞお

次はいよいよFaster-RCNN

参考文献及び画像(Fast-RCNNの論文先)