External Memory

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

Fast/Faster R-CNN

前回のR-CNN、SPP-netの続き

Fast R-CNN

https://arxiv.org/pdf/1504.08083

Fast R-CNNはR-CNNやSPP-netの速度や精度などを改善したものである。
いくつかのconv層とmax pooling層の後にRoI pooling layerを導入することで、
multi-task lossを用いて学習を単一の段階で済ませ、fine-tuningにおいて全ての層を更新することが可能になる(SPPではFC層のみ)。
これによりFC層だけだったのがconv層部分もfine-tuneを行うことができVOC07のmAP基準で6%弱ほど向上している。

RoIに続いてFC層が配置され、その出力はクラス分類用とbounding-box regresson用として分岐し、それぞれのloss(multi-task loss)を用いて学習もしくは識別される。

RoIで抽出されたh×wサイズのwindowは予め設定されたグリッド数H×Wに分割され、
通常のmax poolingと同様の操作によりチャンネルごとに独立にグリッドに出力される。
これはSPPの単一pyramidと同等である。

SPP-netにおいてSPPより前のlayerの重みを学習できないのは、
その受容野の大きさにより逆伝播が非常に非効率になるからである。
効率的な学習のためにSGDにおいてmini-batchを階層的にサンプリングする。
batchに対して画像をサンプリング数Nと、RoIの出力サンプル数をRと固定する。
よって、RoIにおける画像当たりのサンプリング数はR/Nとなる。
この文献ではN=2、R=128で良い結果が得られたとある。
これにより、R-CNNやSPP-netの時のような単にN=128とするより約64倍の学習速度が出る。

lossの計算はクラス分類とbounding-box regressionを組み合わせたmulti-task lossを用いる。
L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u \geq 1]L_{loc}(t^u,v)

L_{cls}=-\log p_u

\displaystyle L_{loc}(t^u,v)=\sum_{i\in\{x,y,w,h\}}smooth_{L_1}(t_i^u-v_i)

smooth_{L_1}(x)=\left\{ \begin{array}{ll}
      0.5x^2 & (if\ |x|<1) \\
      |x|-0.5 & (otherwise)\end{array}\right.

t^uはカテゴリーuのタプルt^u=(t_x^u,t_y^u,t_w^u,t_x^h)
u,v=(v_x^u,v_y^u,v_w^u,v_x^h)はそれぞれカテゴリーとbounding-boxのラベルである。
カテゴリーが背景の場合はu=0、また文献においてはλ=1と設定している。

テスト時においてはproposalにselective searchを用い
Rは約2000で最大45000まで検討を行っているが、2000以降ではproposalの数が大きくなると精度は落ちる。


SPP-netと同じく物体認識のスケール不変性のためにsingle scale detectionとmulti-scaleを用いており、windowサイズは大体224*224、single scaleの場合s=600、multi-scaleの場合sは480-1200の範囲から6種類である。
multi-scaleの方がmAPはよくなるが、識別速度やGPUメモリの関係で非常に深いCNNでは適用が比較的難しくなる。

クラス分類器はSVMからsoftmaxに変更されており、softmaxの方が高いmAPが得られている。

VOC07に対して学習時間、テスト時間ともに大幅にスピードアップしており、
さらにSVDを用いることででR-CNNと比較して213倍の物体認識速度(テスト時の速度)が得られており、さらにR-CNNと比較して非常に深いCNNならばmAPも向上している。
ただしこれはregion proposalの経過時間は含まないようである。

Faster R-CNN

https://arxiv.org/pdf/1506.01497.pdf

Faster R-CNNはregion proposal処理部分をR-CNNの特徴マップの後に、
conv layersを追加し、そのunitをRegion Proposal Network(RPN)とする。
RPNはCNN構造内で効率的なproposalを計算し、領域境界とそれぞれの局所領域における物体認識スコアを同時に回帰する。
またFully-Connected層はconv層に置き換えるのでRPNはFCNである。

RPNはregion proposalと物体認識の計算において、同じconvoluion layersを共有する。
この共有conv layersはこの文献においてはZF、もしくはVGG-16が用いられる。
この共有CNNの出力特徴マップからn*n(この文献ではn=3)sliding windowを用いてより低次元(256or512)の特徴マップに送り込まれる。
この特徴マップはbox-regression layer (reg)、box-classification layer (cls)の二つに分岐し計算される。よってこの操作は共有CNNから3*3conv層と2つの1*1conv層unitへ入力されるのと同じである。

それぞれの領域における最大の提案可能proposal数をk(ここではk=9)とするので、box数kに対しreg層の出力は4k、cls層の出力は2kとなる。
このk boxesはanchorsと呼ばれ、スケールやアスペクト比の種類数と繋がっている。
k=9では、スケール3種、アスペクト比3種であり、特徴マップのサイズがW*Hならアンカー数はWHkとなる(スライド幅1より)。
この文献においてスケールは128*128、256*256、512*512でアスペクト比は1/1、2/1、1/2と設定している。


RPNにおけるloss関数はFast R-CNNとほぼ同じ形であるが、RPN内では二値分類である(object / not object)。

PRNの後RoIによりクラス分類とbounding-box regressionが行われる。
それぞれのスケールとアスペクト比にそれぞれregressorが割り当てられる。


RPNの学習においては逆伝播とSGDを用い、mini batchとしてランダムに256アンカーをサンプリング、positiveとnegativeが1:1となるようにnegativeをパディングする。
またZFの場合は全てのlayerを、VGGの場合はcov3_1からのlayerをtuneする。
RPNとR-CNNの学習は独立して(networkを分離)行いそれぞれ交互に反復して行う。


テストはスピードと精度のトレードオフの関係でs=600のシングルスケールモードで行われる。また、境界が交差したアンカーはテスト時には無視され、RPN proposalsはtop300個(NMSありなので少し減る)で充分なmAPが得られ、これを比較のため固定としている。
それ以上(6000 without NMS)proposalsはmAPは減少するがこれによりNMSの必要性が示唆されている。


Faste R-CNNのmAPはVOC07で69.9%、VOC2012で67.0%(学習はそれぞれに用意されたtrain dataのみの使用)である。
train dataにCOCOなどを利用すれば、さらに9%弱向上する。
Fast R-CNNより3%程度の向上である。
速度はVGGで10倍程度早くなっている(5fps)。



もうこのようなネットワークを使うならテストはまだしも学習はpre-trainedデータやら高性能GPU必須か。