論文読み Objects as Points (CenterNet)
著者による実装 github.com
3D detectionとポーズ推定についても追々まとめます。
どんなもの?
- 従来の物体検出手法では、潜在的な物体位置を網羅的に列挙しそれぞれを分類することで検出を行うが、無駄が多く非効率でNMSなどの後処理を必要とする。
- CenterNetでは、物体をbounding boxの中心点としてモデル化することで物体を検出する。
- キーポイント推定によって中心点を探索するとともに、タスクに合わせてbounding boxの大きさや3D location, orientation, ポーズなどを回帰で推定する。
- 精度と速度の両方でSOTA。
技術や手法のキモ
Preliminary
- 入力画像 (W x H)に対して、出力されるキーポイントマップは$$\hat{Y} \in [0, 1]^{\frac{W}{R} \times \frac{H}{R} \times C}$$
- Rはストライドを表しており、キーポイントマップは入力画像に対して1/Rにダウンサンプリングされる。
- Cはキーポイントの種類を表しており、物体検出の場合にはカテゴリ数、ポーズ推定の場合には関節数となる。
- は検出したキーポイント、は背景に対応する。
- hourglass networkやDLAなどのencoder-decoderネットワークを用いて、キーポイントマップを推定する。
- ground truthのキーポイント座標に対して、ダウンサンプリングされたキーポイント座標は。
- とガウシアンカーネルを用いてground truthのキーポイントマップYを作成する。 $$Y \in [0, 1]^{\frac{W}{R} \times \frac{H}{R} \times C}$$
- ガウシアンカーネルをかけた後のマップについて一つの座標に複数クラスが存在する場合には最大のみ採用する。
- 学習に用いるlossは以下の。 $$ L_k = -\frac{1}{N} \sum_{xyc} \left\{ \begin{array}{} (1 - \hat{Y}_{xyc})^{\alpha} \log \hat{Y}_{xyc} & {\rm if} \hspace{1pt} Y_{xyc} = 1 \\ (1 - Y_{xyc})^{\beta} \hat{Y}_{xyc}^{\alpha} \log (1 - \hat{Y}_{xyc}) & {\rm otherwise} \end{array} \right. $$
- ストライドによって発生する離散的な誤差を修正するために追加でオフセットを推定する。
- オフセットは以下のL1 lossで学習。 $$ L_{off} = \frac{1}{N} \sum_p \left|\hat{O}_{\tilde{p}} - \left(\frac{p}{R} - \tilde{p}\right)\right| $$
Objects as Points
- オブジェクトのbounding boxを、カテゴリをとする。
- 中心点は。
- キーポイントマップによって中心点を推定するのに加えて、bounding boxのサイズを推定する。
- つまり、キーポイントマップと、bounding boxの大きさを示すマップを推定する。
- 学習には以下のL1 lossを用いる。 $$L_{size} = \frac{1}{N} \sum_{k=1}^N \left| \hat{S}_{p_k} - s_k \right|$$
- 他の物体検出手法でやるような座標のスケーリングは行わず、代わりにそれぞれのlossの係数でスケールを調整する。
- 全体のlossは以下の通り。 $$L_{det} = L_k + \lambda_{size} L_{size} + \lambda_{off} L_{off}$$
- キーポイント、オフセット、bounding boxのサイズの3つを推定するため、ネットワークが出力するマップのチャンネル数はとなる。
From points to bounding boxes
- 推論時にはキーポイントマップからピークを各カテゴリ独立に抽出する。
- 周囲8近傍点以上の値を持つ点のうち上位100点をピークとする。
- ピークの値をそのまま確信度として用いるとともに、ピークの座標とオフセット、bounding boxのサイズから以下のようにしてbounding boxを求める。 $$(\hat{x}_i + \delta \hat{x}_i - \frac{\hat{w}_i}{2}, \hat{y}_i + \delta \hat{y}_i - \frac{\hat{h}_i}{2}, \hat{x}_i + \delta \hat{x}_i + \frac{\hat{w}_i}{2}, \hat{y}_i + \delta \hat{y}_i + \frac{\hat{h}_i}{2})$$
- ピークを抽出する処理がNMSのような作用を持つため、NMSのような後処理は必要ない。
- さらにピーク抽出は3x3のmax poolingによって実装できるため、NMSよりも計算コストが低そう。
有効性の検証
- 物体検出についてはCOCOデータセットを用いてSOTAと比較。
- 精度・速度の両面で良好な結果。