External Memory

プログラミング周辺知識の備忘録メイン

R-CNN、SPP-netの物体領域認識

R-CNN

Rich feature hierarchies for accurate object detection and semantic segmentation(v5)
https://arxiv.org/pdf/1311.2524.pdf

テストはPASCAL VOC or ILSVRC2013を使っている。
ILSVRC2013からclassification taskの他にdetection taskが加わったようである。

R-CNNでは、region proposal、classification、bounding box regressorの複数のtaskに分かれている。

training

region proposal

  • CNNのfine-tuning用に、warpingしたproposal画像のground-truthに対するIoUが0.5以上の領域をpositive、それ以外をnegative(背景)として設定する。
  • SVM学習時にground-truthに対しIoUが0.3以上のnegativeは切り捨てる。

これらのIoU値による設定はCNNとSVMの認識性能が影響しており、
クラス分類は間違っていないが局所化ミスをすることを改善するための調節であると思われる(文献Figure 5)。CNNが画像中の対象の位置による認識差がないことに由来する。
また、softmaxによる学習の後にSVMによる学習を採用しているのは学習時のnegativeサンプルの抽出の仕方の違いが影響しており、性能低下はSVMの学習をしないからではないと述べている。


classification

  • ILSVRC2012データセットを使ってCNNのpre-training
  • 学習データ+validationの一部でCNNのfine-tuning(データがILSVRC2013ならクラス数は200+背景、VOCなら20+背景である。batchsizeは128でpositiveが32、negativeが96とする)
  • クラスごとに線形SVM学習


bounding box regressor

  • Bounding-box regressionを用いて、入力からground-truthを予測する。

予測にはproposal P のpool5層の特徴ベクトルの線形関数d_*(P)=\mathbf{w}_*^T\phi_5(P)を用いる。
x,yはproposalの中心座標、w,hは幅と高さである。
bounding-box regressorsで用いるpool5出力はvisualization, ablationの考察から来たものである。
pool5はCNN部分のtop層であり、FC層の手前の層であるので一番CNNの表現能力の大きい部分といえる。
また\mathbf{w}_*は学習可能なパラメータで以下の式で最適化される。

\displaystyle \mathbf{w}_*=argmin_{{\mathbf{\hat{w}}}_*}\sum_i^N(t_*^i-{\mathbf{\hat{w}}}_*^T\phi_5(P^i))^2+\lambda\|{\mathbf{\hat{w}}}_*\|^2

学習においてPはgroud-truthに近い領域でないと学習はうまくいかないのでIoUが0.6以上の最大値を用い、それ以外は捨て去る。

test
  • region proposals(約2000)を作成(ここではselective search fast modeを用いる)
  • regionをCNNに合わせるために変形(warp)
  • SVMでそれぞれ二値クラス分類

学習したSVMを用いて特徴ベクトルから点数をつけ、
greedy non-maximum suppressionにより、最大得点の領域と大きく重なる(IoUが大きい)領域を削除する。

  • それぞれのproposalに点数をつけて、bounding-box regressorsの学習した重みとpool5層出力により一度だけdetection windowを新しいものにする。


mAPはクラスごとの予測正答率の平均で、偽陽性が目立つと一気にmAPが下がりそう。

SPP-net

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
https://arxiv.org/pdf/1406.4729.pdf


これまではネットワークの入力に対して、画像サイズを固定する必要があったので
事前にwarpingやcroppingを行う必要があり、それが精度に影響を与えていた。
spatial pyramid pooling(SPP) layerはconv層とFully-Connected(FC)層の間に挿入することで、任意の画像サイズの入力に対して、FC層の固定されたunit数に対応させることが可能になる。

SPPは複数のウィンドウサイズを有するpooling layerを用意して、それぞれの出力を結合するものである。
conv層から出力された画像サイズが違っていても、それぞれのウィンドウサイズのpooling層の出力のサイズは入力のサイズにかかわらず一定なので、結果的に結合された出力の次元も固定される。
実際にILSVRC2012データセットの分類に対して使用されるSPPは1*1、2*2、3*3、6*6 pooling layerの組み合わせで出力次元(spatial bin)は50*チャンネル数である。
(n*n pooling layerでは出力の次元はn^2の倍数(チャンネル数)、1*1はglobal poolingである)


SPPより手前の層はbase CNNは既存のものを使用している(ZF-5、Convnet*-5、Overfeat-5/7)。

学習中はGPUを活かすためパラメータを共有した複数の固定サイズのネットワークを使ってSPP-netを再現する(Multi-size training)。
テスト時は直接SPP-netを使用する。
比較用にSPP構造のみを利用したSingle-size trainingも行っている。
(入力サイズはdata augmentation目的で224サイズにcroppingにより変更しており、multi-sizeの場合さらにスケーリングを行う)

SPPを用いることによりMulti-size training、Single-size trainingともにtop1/5 error率は減少している。Multi-size trainingのほうが効果は大きい。

また、テスト時の画像処理に関してはフルスケール画像をmin(w,h)=s∈Sでスケーリングを行い(|S|=6)、conv層からの特徴マップの中央と四隅、縁の中間とそのflippingで計18*6+6=96個(s=224の場合は6個)のwindowにSPPを適用する。
これらとフルスケール画像とそのflippingと合わせて、それぞれのスコアを平均化し最終的な予測とする。
これによりtop5 error率は単一モデルでtest setに対し9.08%、validation setに対し9.14%となる。

Object Detection

上記のR-CNNにおいて、テスト時に2000ものproposalsをネットワークに入力する必要があるがSPP-netでは一回で特徴マップを計算するだけで済み最大100倍以上計算速度が向上する。
特徴マップからの得られたそれぞれの候補windowごとにSPPを適用する。
さらにこれらのwindowsは任意のサイズで行うことが出来る。


detectionの流れは大体以下の通りである。

入力画像は5種類のサイズにスケーリングし、特徴マップを計算する。
selective searchのfast modeを使って2000個のwindowsを生成する。
特徴マップから抽出されたwindowが密で正方形に近ければ大体224*224くらいにリサイズする。
SPPによりpre-trainedされたネットワークの特徴マップをプールしwindowをFC層に送り込んで、二値線形SVM分類器でそれぞれのカテゴリーについてFC層分類のfine-tuneを行う。
この学習は上記R-CNN文献に倣っている。

また同じくFC層のfine-tuneとbounding box regressionの学習も行う。

学習においてpositiveサンプルはground-truthから生成し、negativeサンプルはpositiveとの重なりIoUが30%以下のものを使い、他のnegativeと70%以上重ならないようにする。
fine-tuningの際はground-truthとのIoUが[0.5,1]のものをpositiveとし、[0.1,0.5)をnegativeとする。



この後Fast R-CNN、Faster R-CNNが続けて出ている。