機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

Grid R-CNNを読んだのでメモ

はじめに

Grid R-CNNを読んだのでメモ.前に読んだcornerNetと同じくkey pointベースの検出方法.投稿時期とフォーマットからおそらくcvprに投稿された論文.また今年もSenseTimeから沢山の論文がアクセプトされるのでしょうか.

Grid R-CNN

基本的にCornerNetと同じコンセプトで,bounding boxの角(key point)をヒートマップとして出力させて後処理的にBounding Boxを生成する.CornerNetはSSDやYOLOのようなSingle stageの検出方法だったが,ここではtwo stage検出として構成する.CornerNetとの本質的な違いはkey pointの推論に必要な情報がない場合,つまりkey pointに対応するピクセルに物体の情報が無い場合の対処法.CornerNetではCorner poolingによりこれを克服していたが,Grid R-CNNでは検出するkey pointの数を増やすことで,情報のないkey pointの検出を他のkey pointの検出により補うことで解決する.

Grid Guided Localization

ここでは物体のbounding boxの検出としてN\times N gridを検出することを考える.Figure 1には3x3の場合の例が載っていて,この場合には矩形の4角と各辺の中点,後中心の全部で9点のkey pointを検出することになる.今回はR-CNN型の検出器なので,このgridの検出はtwo stage目,つまりRoIpooling(ないしはRoIalign)をした後のrefinementの部分で行われ,key pointの検出に関してはheatmapでの出力となり,学習はkey pointがあるかないかの2値分類としてbinary cross-entropyの最小化を行う.出力のheatmapは各key point毎に1つ,つまり3x3のkey point検出の場合は全部で9つのheatmapを出力する.正解値に関しては論文中に"5 pixels in a cross shape are labeled as positive locations of the target grid point."とだけ書いてあり,十字のハードラベルを正解とするらしい?

N\times N点のkey pointが得られたら,それらを使って次のようにbounding box B=(x_l,y_u,x_r,y_b)を決定する.

\displaystyle
x_l=\frac{1}{N}\sum_{j\in E_1}x_jp_j,\:y_u=\frac{1}{N}\sum_{j\in E_2}y_jp_j\\ \displaystyle
x_r=\frac{1}{N}\sum_{j\in E_3}x_jp_j,\:y_b=\frac{1}{N}\sum_{j\in E_4}y_jp_j

x,yはkey pointの座標でpは推論結果の確率を表す.E_iはbounding boxの各辺上にあるkey pointの集合.なので矩形の中心のkey pointや4x4gridなどに拡張した際に(論文では3x3しかやってないが)出てくる矩形の内側のkey pointは矩形を決める際には寄与しない.なんの意味があって検出するんだということになるがそれは次のfeature fustionに利用される.

Grid Points Feature Fusion

Key pointベースの物体検出で問題となるのは画像上でkey pointが存在する位置に対象となる物体の情報が含まれていない場合があること.CornerNetではcorner poolingなるプーリングによって解決していたが,Grid R-CNNではその他のkey pointを利用して解決をする.

考え方としては,例えば3x3 gridの左上のkey pointを検出することを考えると,上中央と中央左のkey pointの座標から左上のkey pointの座標を得ることができる.なので各key point毎に独立な特徴マップを持っておいて,関係するkey point同士の特徴マップを融合しようというもの.Figure 3にコンセプトの例があり,さらにもう一つ遠いkey pointを利用する例(second order feature fusion)も示されている.

Key point毎の特徴マップをF_i,今注目しているkey pointの特徴を補正するのに使うkey point(source point)の集合をS_iとする.S_iに属するj番目のsource pointの特徴マップF_jに対してカーネルサイズ5x5の畳み込み層を3回適用することで情報の伝達を行う.この畳み込みをT_{j\rightarrow I}とする.T_{j\rightarrow i}から出力された特徴マップを使って次のように注目しているkey pointの特徴マップを変換する.

\displaystyle
F_i'=F_i+\sum_{j\in S_i}T_{j\rightarrow i}(F_j)

基本的に各key pointはregular gridな形の配置になるため,学習される畳み込み層T_{j\rightarrow i}は平行移動を表現するようなものになるはずというのが裏にある思いかと. ちなみにFirst order fusionの場合にはS_iに属するkey pointはgrid上におけるL_1距離が1のもので,second orderの場合には2といった形で変わる.

Extended Region Mapping

ここはtips的な部分で,簡単言えばregion proposal network (RPN)で得られた候補矩形がそもそも検出対象の物体をカバーしてなければheatmapベースの検出を行うことができないので大きめにRoIPoolingしようということ.じゃあどれくらい大きくするかというとこで,この論文では以下の式に従ってRoIPoolingする領域を決める.

\displaystyle
I'_x=P_x+\frac{4H_x-w_o}{2w_o}w_p\\ \displaystyle
I'_y=P_y+\frac{4H_y-h_o}{2h_o}h_p

I_x',I_y'は元画像上での位置.h_o,w_oは出力のマップの縦横サイズで,h_p,w_pRPNから得られた矩形の縦横サイズ,P_x,P_yは矩形の左上の座標.この計算に従ってRoIPoolingでクロップする領域を大きくすれば真の矩形との被り率が0.5を超える矩形なら対象となる物体全体をクロップすることが可能.

まとめ

Object detectionもkey pointが主流になりそうな感じ.ここら辺で一回実装して理解を深めたいところ.

CornerNetと比較してGrid R-CNNはcorner poolingみたいな実装めんどくさそうな演算がないのは実装するとき嬉しいところ.