Memo : Fast R-CNN
特徴
- RoI pooling layerにより、任意のサイズの入力を固定サイズの特徴マップに変換する
- クラス分類とbbox regressionを同時に学習させるmulti-task lossにより学習はSingle Stage
- multi-task lossにより全層の学習が可能
- 従来のR-CNNやSPPNetより高速かつ精度が高い
流れ
入力:画像と画像内の物体候補(object proposals)のリスト
- 1枚の画像全体をConvNet(CNN層とMax Pooling層の組み合わせ)に通すことでConv Feature Mapを得る
- 各物性候補(任意のサイズ)に対して、region of interest (ROI) poolingにより固定サイズのfeature vectorを得る
- 各feature vectorをFC層に通して、2つの出力層(K個のオブジェクトクラスと背景のK+1クラスに対するソフトマックス確率推定値を出力する層とK個のクラスに対するbounding-boxの位置を表す4つの実数値を出力する層)に分岐する
各論
RoI max pooling
RoI max poolingは以下の操作を各feature map channelごとに実施します。この操作はSPPnetsのspatial pyramid pooling layerを1つのpyramid層のみにしたよりシンプルな構造だと理解できます。
- (h × w)サイズのRoI windowを(h/H × w/W)サイズの(H × W)のsubwindowsのグリッドに別ける
- 各subwindowごとにmax poolingを実施することで、(H × W)のfeature mapを得る
以下の図はこちらから引用しました。
Training Scheme
N枚の画像をサンプリングしたのちに、各画像からR/N個のRoIをサンプリングすることにしたことで、SPPNetsの訓練スキームと比較し高速化が実現している。
N=2, R=128の場合は、128枚の異なる画像から1つずつRoIをサンプリングするより大雑把に64倍高速化されている。
このスキームの懸念としては、1枚の画像から取得されるRoIは相関があると思われるため、学習の収束が遅くなることが考えられるが、本論文の実際のケースではSPPnetsより収束が早かったことが報告されている。
Multi-task loss
各RoIに対して以下のMulti-task lossを計算します。ここで、
上式のbounding-box regressionでは以下のlossを使用します。SPPNetsやR-CNNで使用されているL2lossより頑健なロスであるL1を使用しています。
推論時
- 物体らしさ(Objectness)を見つける手法であるSelective Searchにより、画像からR=2000個のRoIを取得します(論文中ではR=45000)
- クラスの確率とbouding-boxの予測値を計算する
- 各クラスに対してnon-maximum suppressionを使用する
Selective Search
Selective SearchはRegion Proposalの抽出方法です。画像内の類似したピクセルをまとめることで、複数のセグメントに分割します。かなり時間がかかる手法になるので、推論時のボトルネックになっておりFaster R-CNNではRPNが使用されています。
詳細は以下の記事が詳しいです。
Non-maximum Suppression
Non-maximum Suppression(NMS)は予測されたBounding Boxが重なっている場合にスコアの低いものを除外していく処理になり、名前の通りIoUが最大でないものを抑制する手法です。
NMSは並列処理ができないのでBoundingBoxの数が増えるほど時間がかかります。そのため、数に上限を設ける場合もありますが、実際には正解のBounding Boxがある場合もあるため精度と速度のトレードオフになります。
fine-tuning
FC層だけでなく、CONV層(>= conv3_1)からファインチューニングすることでより精度向上した。
Discussion