相機標定與二維核驗
把每一個三維立方體投影到各個已標定的相機影像上,讓標註者在三維中編輯、在二維中核驗。以及為什麼缺了這一步,三維標註就沒有反饋迴路。
在點雲中畫一個三維框,然後看著它落在拍到該物體的那張照片上的對應位置。 按條目提供的相機標定,會把每一個立方體投影到每一個相機檢視中,並隨框的移動即時重繪。
yaml
annotation_schemes:
- annotation_type: spatial_annotation
name: objects
source_field: point_cloud
calibration_field: calibration # 存放相機裝置資訊的條目欄位
tools: [cuboid_3d]
labels:
- {name: car, color: "#FF6B6B"}可執行示例:examples/spatial/kitti-cuboids/。
為什麼這比聽起來更重要
40 米外的一輛車只有幾十個雷射雷達回波點。框貼得緊不緊、長度對不對、旋轉是否正確,僅憑點雲幾乎都無法回答,而在相機影像中卻一目瞭然。
因此標註者是在三維中編輯、在二維中核驗的。視口下方的面板會顯示每個相機的檢視,並把各個框投影其上。
沒有這一步,三維標註就沒有反饋迴路。一個從環繞相機看起來正確的框,可能沿視線方向偏差數米,而三維檢視中沒有任何東西會提示你。
座標系是最容易出錯的地方
標定是一條變換鏈,每一環都有可能悄悄出錯:
- 參考座標系與相機座標系。 在本應使用校正後參考座標系的地方用了某一臺相機的變換,會讓每個框都平移該相機的雙目基線距離。幾釐米,且是系統性的,很容易被誤以為是標註者不夠細緻。
- 位置約定。 KITTI 的三維位置指的是框底面的中點。若按中心來讀,會把每個物體埋進地下半個自身高度。
- 尺寸順序與座標軸分配。 KITTI 的尺寸是
h w l,並且在框自身的座標系中,長度沿 X 軸,高度沿 Y 軸向下,寬度沿 Z 軸。若假定長度沿相機的前向軸——這看起來是最自然的選擇——就會得到一個恰好旋轉了 90° 的框。
最後這一條最具啟發性:往返測試抓不到它,因為逆向轉換做了同樣的假設,兩者彼此自洽。只有與官方開發工具包自己的角點公式作比對才能發現,而針對這一點確實有一項測試。