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

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

Bottom-up Object Detection by Grouping Extreme and Center Pointsを読んだのでメモ

はじめに

Bottom-up Object Detection by Grouping Extreme and Center Pointsを読んだのでメモ.

気持ち

Object detectionにbounding boxを使うのは良くないのでextreme pointsと中心位置の4点をheatmapとして回帰しようというもの.Extreme pointというのはICCV2017のExtreme clicking for efficient object annotationで提案された概念で,物体の一番上の点,下の点,左の点,右の点を表す(詳しくは論文の図を参照).このextreme pointsで物体検出することでよりタイトで無駄のない物体検出が可能とのこと.特にextreme pointsベースの検出のいいところとしては,物体の種類ごとにextreme pointの位置が大体決まっているということ.例えば人ならtopとbottomを表すextreme pointsは大体頭と足に来るため,bounding boxでの検出よりも優しいタスクになっていると考えられる.また,CVPR2018で提案されたextreme pointを使ったsegmentation手法であるDeepExtremeCutを使えば物体のマスクを生成することが可能で,それによってinstance segmentationによってstate-of-the-artを達成したというもの.

ちなみに乱暴に要約するとCornerNetの出力をextreme pointsに変えたというもの.

ExtremeNet

ExtremeNetの出力は5\times Cのheatmapsと4\times 2のoffset maps.Cはクラス数.heatmapsはextreme pointsと中心位置を表すもので,offset mapsはextreme pointsのsub-pixelレベルでの精度を保証するもので,cornerNetで提案されているものと同じ.cornerNetについては以前にメモをした.検出されたextreme pointsは最終的に幾何的な整合性が取れるようにグルーピングされる.

Extreme pointsのグルーピングは検出された各extreme pointsから計算される中心位置c=\left(\frac{l_x+t_x}{2},\:\frac{t_x+b_x}{2}\right)が検出された中心位置\hat{Y}^{(c)}から閾値\tau_c以内に存在すればそのextreme pointsを一つの物体のextreme pointsとしてまとめる.ちなみにextreme pointsはheatmapとして得られるため,座標として得るために3x3のパッチ内で閾値\tau_pを超える値を持つ最大の点を探索する.

Edge aggregation

Extreme pointsの検出は常にユニークなものではなく,一つの物体に対して複数の点が現れる場合がある.特に車など直線的な物体ではその直線上のどこでもextreme pointになり得る場合がある.そのため,そのような冗長なextreme pointsはエッジに沿って並んでいるという仮定を置いて,エッジ上に並ぶextreme pointsを統合することを考える.方法としては通常通り閾値\tau_pを超えるextreme pointsを選び,水平もしくは垂直方向にextreme pointsのスコアをaggregateするというもの.ただ,闇雲に水平または垂直方向に足していっても仕方がないので,aggregate対象のextreme pointsのスコアが単調減少し続ける限りaggregateする.つまりここでは暗に,真のextreme pointを中心にガウス分布的に冗長なextreme pointsが存在するということを仮定している.スコアは単純な足し合わせではなく次のように\lambda_{aggr}を導入している.

\displaystyle
\tilde{Y}_m=\hat{Y}_m+\lambda_{agar}\sum_{i=I_0}^{i_1}N_i^{(m)}

Y_mは注目しているextreme pointを表し,N_iはaggregate対象のextreme point.\lambda_{aggr}は実験では0.1に設定したとのこと.

学習

Extreme pointをアノテーションしたデータセットは公開されていないのでCOCOのpolygon maskを利用してextreme pointの真値を作成したとのこと.論文を書いたチームは計算資源があまりないのでpretrain済みのCornerNetを5台のGPUで250kイテレーションのfine-tuneをしたとのこと(CornerNetの学習は10GPUで500kイテレーション140GPU日).

まとめ

内容的にはcornerNetの検出対象をbounding boxの隅ではなくextreme pointにしたというもの.そのおかげでcorner poolingのようなトリッキーなことをせず精度よく検出が可能になった.またDeepExtremeCutとの相性が良く,Instance Maskまで高精度で生成が可能というもの.