External Memory

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

Single Shot MultiBox Detector、Crafting GBD-Net

SSD: Single Shot MultiBox Detector

https://arxiv.org/abs/1512.02325

CNNにおいて普通ネットワークの先端に近づくにつれて、同サイズのフィルターサイズの受容野のスケールは大きくなる。
SSDは一つのニューラルネットワークより異なるスケールの特徴マップからの出力によって、直接クラス弁別とbounding-boxの決定を行って物体位置認識を行う。

これにより高速かつ高精度で物体位置認識の計算を行うことが可能となった。
SSD300におけるPASCAL VOC2007testセットの精度と速度はデータセットが07+12でmAP 74.3%、速度は59 FPSである。
SSD512ではmAP 76.8 %、速度は22 FPSである。(Nvidia Titan X)


特徴マップの作成にはベースCNNを用い、この文献ではVGG16である。
このマップから直接または、conv層を追加することによってクラスごとのスコアとboxのオフセットの出力を行う。
よって一つの層の特徴マップから(c+4)kmn個の出力が得られる。
cはクラス数、4はboxのオフセットパラメータ、kはboxの領域数、m,nはフィルターマップの領域の大きさを表す。
それぞれの特徴マップのセルごと1,2,3,1/2,1/3と1/1のスケール拡大boxの6種類のアスペクト比のbox(default box)から、信頼スコアとboxのオフセットを予測する。
default boxのスケールはサイズが同じ(3*3)conv層のスライドが2以上なら層ごとにスケールは2倍で解像度は下がる。
各特徴マップでのdefault boxのスケールは以下のように表される。

\displaystyle s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1)

最下層スケールs_minは0.2、最先端層のスケールはs_max=0.9でmは層数でkはcurrent層である。


学習においては誤差関数と逆伝播がend-to-endで適用される。
誤差関数は信頼スコアと位置誤差の重みαありの和として表される(文献ではα=1)。
それぞれソフトマックス誤差関数とsmoothL1誤差関数が用いられる。
領域にはground-truthに対してjaccard overlap 0.5以上をpositiveとしている。
またpositiveとnegativeのdefault boxの学習サンプル数の比率を調整するために、
信頼スコアでソートしたうえで比率が1/3となるように選び出している。


testセットの物体認識に対しては、恐らく信頼スコア値のtopいくつかを抽出してそのbox位置とクラスを予測とするのだろう。


Crafting GBD-Net for Object Detection

https://arxiv.org/pdf/1610.02579.pdf

GBD-Netは物体領域認識において、物体だけに焦点を当てるだけでなく
その周囲の環境や文脈をの情報を盛り込んで判別を行うニューラルネットワークである。

物体領域の判別において局所的な強い特徴量によって誤りを引き起こしたり、遮蔽物や局所的な類似特徴による判別ミスなどを引き起こす恐れがあった。
文献においてはうさ耳バンドを着用した人の顔や、動物の体表模様などを例として挙げている。


GBD-Net(gated bi-directional CNN)は、ゲート機能を有する双方向ネットワーク構造を持つCNNである。
双方向ネットワークは複数のスケールと解像度間でゲートを通して情報をお互いにやり取りすることで、大域的な特徴と局所的な細かい特徴間での相補的な効果により判別精度を向上させる。
この時ゲートは関連のない情報と関連性のある情報を制御する機能を持つ。
この文献においてGBD-Netはfast R-CNNの枠組みの下で実装される。

GBD-NetはCNN中の後半部分辺りに挿入される(BN-netではinception 4d、Res-Netでは269では234番目)。
しかしどこにでも挿入することは可能である。
GBD-Netの直前にRoi pooling layerを配置して様々な特徴マップサイズを、同じサイズのベクトルにする。
それぞれの解像度とスケールに対して特徴量は共有されないので各解像度に対し複数のCNNに分岐する。

Roi poolingで4つのスケールに分岐させた後、warpingさせて4つの特徴マップ\mathbf{f}^{-0.2},\mathbf{f}^{0.2},\mathbf{f}^{0.8},\mathbf{f}^{1.7}をGBD-netに入力をする。
\mathbf{f}^pのpはスケール倍率でサイズが224*224にwarpingするデフォルトの場合p=0.2(1.2倍)である。
\mathbf{h}_i^0\ i=1,2,3,4を入力、\mathbf{h}_i^3を出力とするGBD-Net構造は以下のように表される。
iはそれぞれのスケールである。

\mathbf{f}_i^1=\sigma(\mathbf{h}_i^0\otimes \mathbf{w}_i^1+\mathbf{b}_i^{0,1})+G_i^1\bullet \sigma(\mathbf{h}_{i-1}^1\otimes \mathbf{w}_{i-1,i}^1+\mathbf{b}_i^1)
\mathbf{f}_i^2=\sigma(\mathbf{h}_i^0\otimes \mathbf{w}_i^2+\mathbf{b}_i^{0,2})+G_i^2\bullet \sigma(\mathbf{h}_{i+1}^2\otimes \mathbf{w}_{i+1,i}^2+\mathbf{b}_i^2)
\mathbf{f}_i^3=\mathbf{h}_i^0+\beta max(\mathbf{h}_i^1,\mathbf{h}_i^2)

G_i^1=sigmoid(\mathbf{h}_{i-1}^0\otimes \mathbf{w}_{i-1,i}^g+\mathbf{b}_{i-1,i}^g)
G_i^2=sigmoid(\mathbf{h}_{i+1}^0\otimes \mathbf{w}_{i+1,i}^g+\mathbf{b}_{i+1,i}^g)

σ()はReLU、sigmoid()はシグモイド関数である。
w,bはそれぞれ重みとバイアス、Gはゲート関数を表す。
これらの表式はconv層と非線形層で実現される。


GBDの学習においてはpre-trainデータを大きく変化しないような初期値の設定が必要である。loss関数はcls lossとloc lossを足し合わせたもので、loc lossにはsmooth L1関数を用いる。

テスト時のregion proposalには拡張RPNを使ったCraftを用いる。

ILSVRC2016 ImageNetのobject detectionではmAP 66%、後にさらに1%弱ほど向上しているようである。

VOC2007 dataset 07+12でmAP 77.2%。baseより+4.1%である。