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

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

Bounding Box Regression with Uncertainty for Accurate Object Detectionを読んだのでメモ

はじめに

Bounding Box Regression with Uncertainty for Accurate Object Detectionを読んだのでメモ.Object detectionのための新しいbounding box回帰のための誤差を提案.

気持ち

物体検出において正解となるbounding boxのアノテーションの曖昧さを問題視.アノテーションに気をつけたCOCO datasetでさえ曖昧なアノテーションがある(曖昧さについてはFigure 1参照).なのでその曖昧さもモデリングしたいというもの.

KL Loss

手法自体はごく単純で,モデルが予測したbounding boxをガウス分布P_\Theta(x),正解をディラックデルタ関数P_D(x)=\delta(x-x_g)として表現して,その二つのKL divergenceを取るというもの.

\displaystyle
\hat{\Theta}=\underset{\Theta}{\mathrm{argmin}}\frac{1}{N}\sum D_{KL}(P_D(x)| P_\Theta(x))

この式を具体的に展開すると以下の式が得られる.

\displaystyle
L_{reg}=D_{KL}(P_D(x)| P_\Theta(x))=\frac{(x_g-x_e)^2}{2\sigma^2}+\frac{\log(\sigma^2)}{2}+\frac{\log(2\pi)}{2}-H(P_D(x))

x_g,x_eはそれぞれ真の座標値と推定値.H(P_D(x))エントロピー.モデルが推定するのはx_e\sigmaとなる.学習パラメータ\Thetaに関わる項だけ抜き出せば,目的関数は次の形に書ける.

\displaystyle
L_{reg}=\frac{(x_g-x_e)^2}{2\sigma^2}+\frac{1}{2}\log(\sigma^2)

実際のところ,\sigmaを直接モデルに履かせると学習初期で小さすぎる値を吐いたりして勾配爆発を起こすため,\alpha=\log(\sigma^2)をモデルに吐かせる.なので\alphaを使って書き直すと次のようになる.

\displaystyle
L_{reg}=\frac{e^{-\alpha}}{2}(x_g-x_e)^2+\frac{1}{2}\alpha

当然だが,\sigmaが1(\alpha=0)のときは二乗誤差になる.また,smooth L1 lossのように|x_g-x_e|\gt 1の場合には次のように二乗の項を絶対値に変える.

\displaystyle
L_{reg}=e^{-\alpha}(|x_g-x_e|-\frac{1}{2})+\frac{1}{2}\alpha

\alphaを推論するブランチの重みの初期値は平均0の標準偏差0.0001のガウス乱数で初期化したとのこと.よくわからなかった論文曰く,このように初期化すれば学習初期においてこの誤差関数がsmooth L1 lossのように振る舞うらしい.

Variance Voting

推論させた曖昧さ\sigma^2をNMSの処理において利用することで精度を高める.具体的にはsoft-NMSを踏襲した形で,曖昧さ\sigma^2が小さい矩形ほど高い重みをつけるように修正した.具体的にはIoUが0以上のbounding boxを使って次のように計算する.

\displaystyle
p_i=e^{-(1-IoU(b_i,b))^2/\sigma_i}\\
x=\frac{\sum_i p_ix_i/\sigma^2_{x,i}}{\sum_ip_i/\sigma^2_{x,i}}

まとめ

論文には精度が上がると書いてあるが,実験結果を見ると検出自体の精度というよりはbounding boxの精度が上がるという面での貢献が大きそう.実装は簡単なのでとりあえず使っとけの感覚で導入しても悪くはなさそう.