カメラキャリブレーションと 2D での検証
すべての 3D 直方体をキャリブレーション済みの各カメラ画像に投影し、アノテーターが 3D で編集して 2D で検証できるようにします。これがない 3D ラベル付けにフィードバックループがない理由。
点群に 3D ボックスを描くと、それを写した写真の中の物体にぴたりと重なる様子が見えます。 項目ごとに与えたカメラキャリブレーションによって、すべての直方体があらゆるカメラビューに投影され、ボックスを動かすたびに描き直されます。
yaml
annotation_schemes:
- annotation_type: spatial_annotation
name: objects
source_field: point_cloud
calibration_field: calibration # the item field holding the rig
tools: [cuboid_3d]
labels:
- {name: car, color: "#FF6B6B"}動作する例:examples/spatial/kitti-cuboids/。
聞こえる以上に重要な理由
40 メートル先の車はライダーの反射が数十点あるだけです。ボックスがぴったりか、長さは正しいか、回転は合っているか。どれも点群だけからはほとんど答えられませんが、カメラ画像なら一目でわかります。
そこでアノテーターは 3D で編集し、2D で検証します。ビューポート下のパネルには、ボックスが投影された各カメラのビューが表示されます。
これがなければ、3D のラベル付けにはフィードバックループがありません。周回カメラから見て正しく見えるボックスが視線方向には数メートルずれていても、3D ビューの中にそれを教えてくれるものはないのです。
座標系こそが誤りの温床
キャリブレーションは変換の連鎖であり、どの環も気づかれないまま誤りうる箇所です。
- 参照座標系とカメラ座標系。 補正済みの参照座標系が必要な場所で特定のカメラの変換を使うと、すべてのボックスがそのカメラのステレオ基線分だけずれます。数センチメートルの系統的な誤りで、アノテーターの雑さと取り違えられやすいものです。
- 位置の約束事。 KITTI の 3D の location はボックスの底面の中点です。これを中心として読むと、すべての物体が自身の高さの半分だけ地下に埋まります。
- 寸法の順序と軸の割り当て。 KITTI の dimensions は
h w lで、ボックス自身の座標系では長さが X 方向、高さが Y の下向き、幅が Z 方向に伸びます。長さがカメラの前方軸に沿うと仮定すると——自然な選択に見えます——ちょうど 90° 回転したボックスができあがります。
最後の一つは学ぶところの多い例です。往復テストでは捕まえられません。逆変換が同じ仮定を置くため、両者が互いに整合してしまうからです。devkit 自身の頂点計算式と突き合わせて初めて捕まるもので、まさにそのためのテストがあります。