深度マップをアノテーションする方法
深度ファイルは自分の単位を持たず、ゼロは「近い」ではなく「反射なし」を意味し、意味のある範囲が全範囲と一致することはありません。深度をアノテーションする前に押さえるべきこと。
深度マップを画像として開くと黒い長方形が出てきます。そして仮に何か見えたとしても、その色がどの距離を意味するのかは分かりません。 深度を画像から隔てる性質が三つあり、そのいずれも、間違えたときに何も知らせてくれません。
ファイルは自分の単位を知らない
RealSense、Azure Kinect、NYU-Depth はミリメートル。KITTI の補完ベンチマークは 1/256 メートル。float 配列から書き出されたものはメートル。
どれなのかはファイルのどこにも記録されていません。depth_scale は格納単位あたりのメートル数であり、これを誤っても目には見えません。窓が再スケールされ、絵は同じに見えるからです。捕まえる唯一の方法は、距離が既知の対象と照合できるメートル単位の数値表示です。
ゼロは距離ではない
ゼロはほぼ普遍的な「反射なし」コード、つまりセンサーがそのピクセルを測れなかったという意味です。深度として読むと、カバレッジの穴という穴に明るい壁を描いてしまいます。
未計測は NaN として持ち回し、どのカラーマップにも現れない色で塗ってください。Potato はマゼンタを使うので、穴が近距離や遠距離として誤読されることはなく、マップのどれだけの割合が穴なのかも報告します。
この割合は聞こえる以上に重要です。テクスチャのない壁に向けたステレオ装置は実際に 80% が穴になります。そして、どのピクセルが欠測なのか見えないアノテーターは、それを形状として読み取りラベルを付けてしまいます。
意味のある範囲が全範囲と一致することはない
内容が 1200 から 1800 の間に収まる 16 ビット深度マップは、素朴な 8 ビット変換では255 階調のうち 4 階調の分離しか得られません。パーセンタイル窓なら254 階調になります。
近/遠の窓は有効ピクセルの第 2 パーセンタイルと第 98 パーセンタイルを既定にしてください。有効とは反射なしピクセルを除外した後という意味で、そうしないと穴がパーセンタイルを支配してしまいます。
設定
instance_display:
fields:
- key: depth
type: depth_map
label: "Depth"直接読み込める形式:16 ビット PNG、16 ビット TIFF、NPY と NPZ、PFM、EXR。
逆投影
カメラ内部パラメータがあれば深度マップは点群になり、同じ 3D 直方体ツールが使えます。RGB-D データセットでは、たいていこちらのほうが生産的なアノテーション方法です。3D の広がりを判断するのは、カラーマップを読むより 3D 空間のほうが容易だからです。
深度上で何をアノテーションするか
- 推定深度に対する、RGB フレームと突き合わせた品質判定。
- 深度が誤っている箇所の領域ラベル。これは深度補完の教師信号になります。
- 逆投影後の 3D ボックス。
品質判定の課題では RGB フレームを並べて表示してください。深度の誤りは、比較したときにだけ明らかになるのが普通です。