はじめに
CVPR2018から以下の論文
[1]B. Tekin, et. al. "Real-Time Seamless Single Shot 6D Object Pose Prediction"
のまとめ。
公式?のコード
https://github.com/Microsoft/singleshotpose
概要
- RGBの画像から物体の6D(位置x,y,zとroll pitch yaw)を推定するモデル
- 後処理は必要なく、YOLOのようにモデルからいきなり各値が推定される
- 50fpsとリアルタイムの処理が可能
- 6Dの推定はPnPアルゴリズムを使用
モデル
全体像
モデルの全体像は以下の図([1]のFigure1より)。

確かにYOLO テイストなアーキテクチャ。(参照 [2])
下側左から入力画像(b)。
それに対して出力されるfeature mapは $S \times S$ グリッドの $D$ チャンネル。
各グリッドはbounding box(の中心)を1個保持する(c)
それをイメージ化したものが(d)。
具体的には(d)に示したようにbounding boxの中心座標、bounding boxの8つの頂点座標、bounding boxの信頼度、物体のクラスをそれぞれのチャンネルで推定する。
よってクラス数を $C$ として
(1+8) \times 2 + 1 + C
チャンネルだけ存在する。
bounding box各点の信頼度
近接するグリッドは1つの物体に対して似たようなbounding boxを推定するだろう。
これらを以下の手順で1つに絞り込む。
まず予測する中心座標や頂点座標を $\bf{x}$ として、ground truth $\bf{x}\rm_{gt}$ とのユークリッド距離 $D_T(\bf{x})$ を求める。
この $D_T(\bf{x})$ に対して以下の式で各点の信頼度を算出する。
c(\bf{x}\rm) = \begin{cases}
e^{\alpha (1- \frac{D_T(\bf{x})}{d_{th}})} & if \ D_T(\bf{x}\rm) < d_{th}\\
0 & otherwise
\end{cases}
$d_{th}$ は閾値。これをグラフ化すると以下。

距離が縮まるに従って1に近づく。
この $c(\bf{x}\rm)$ を9点で平均してbounding box各点に関する信頼度とする。
bounding boxの座標を算出
まずbounding boxの中心座標 $(c_x, c_y)$ はsigmoidで0から1の範囲を出力する。(0,0)がグリッドの左上、(1,1)はグリッドの右下。
8個の頂点は、
g_x = f(x) + c_x \\
g_y = f(y) + c_y
とする。 $f(\cdot)$ は恒等写像。
誤差関数
bounding boxの座標に関するlossを $\mathcal{L}_{pt}$ 、
物体に対する信頼度に関する loss を $\mathcal{L}_{conf}$ 、
物体のクラスに関する loss を $\mathcal{L}_{id}$ としてloss全体はこれらの総和
\mathcal{L} = \lambda_{pt}\mathcal{L}_{pt} + \lambda_{conf}\mathcal{L}_{conf} + \lambda_{id}\mathcal{L}_{id}
となる。係数 $\lambda_{conf}$ はYOLOと同様、物体がある時とない時で別の値とする。具体的には物体がある時は 5.0、ない時は 0.1。
$\lambda_{pt}, \ \lambda_{id}$ は1.0。
書きかけ
Reference
YOLOのアーキテクチャ参考資料
https://www.slideshare.net/ssuser07aa33/introduction-to-yolo-detection-model