Skip to content

如何標註三維點雲

用帶朝向的三維立方體標註雷射雷達與攝影測量資料。格式、細節層次、為什麼旋轉應當用四元數儲存,以及如何衡量三維框上的一致性。

標註點雲意味著在稀疏、取樣不均的資料上放置帶朝向的三維框,而一個遠處的物件可能只有幾十個回波點。 難點不在於繪製:而在於讓檢視器保持可互動、給標註者一種核對自己工作的方式,以及選擇一種能在往返轉換中保真的旋轉表示。

格式

格式說明
KITTI velodyne .bin裸 float32 的 x、y、z、強度。無檔案頭,因此佈局是假定的
PCDascii、binary 與 binary_compressed(LZF)
PLYascii 以及兩種位元組序的 binary
LAS1.0 至 1.4
.xyz / .pts每行 x y z [r g b]
LAZ壓縮的 LAS。請先轉換:laszip -i scan.laz -o scan.las

請在服務端解析,而不是在瀏覽器中。四種格式意味著四套位元組序與記錄佈局的缺陷,而且每次頁面載入都要重新解析一份兩百萬點的掃描件。

保持可互動

原始掃描件太大,無法樸素地渲染。有兩件事讓它變得可行:

  • 八叉樹細節層次。 點按區域以及與相機的距離載入。這在 Potato 中預設開啟(lod: true)。
  • 抽稀上限max_points)。請把它當作檢視器設定,而不是資料設定。

這個區分曾經害過人一次,值得再說一遍:逐點分割標籤過去是以抽稀後點雲中的索引儲存的,因此調低 max_points 會悄悄讓已有標籤指向不同的點。索引應當始終指向原始檔。

給標註者一個二維核對手段

40 米外的一輛車只有幾十個回波點。框貼得緊不緊、長度對不對、旋轉是否正確,僅憑點雲幾乎都無法回答,而在相機影像中卻一目瞭然。

所以:在三維中編輯,在二維中核驗。為每個條目提供標定資訊,並把每個框都投影到各個相機檢視中。沒有它,三維標註就沒有反饋迴路——一個從環繞相機看起來正確的框,可能沿視線方向偏差數米,而沒有任何東西會提示你。

正交切片面板補上了另一半:三個軸對齊檢視,便於精確調整,且完全可用鍵盤驅動。

把旋轉存為四元數

多數格式只存單個偏航角。在內部儲存完整的四元數看起來像是過度設計——直到某次往返轉換丟了東西為止。

它讓 KITTI 匯入做到無損,包括那約 0.85° 的相機相對雷射雷達的安裝傾角,而只有偏航角的欄位會一聲不吭地把它丟掉。匯出回 KITTI 時仍然必須捨棄俯仰與滾轉——正確的做法是報告捨棄了多少朝向資訊,而不是悄悄把框壓平。

請在格式相關的程式碼中、明確地跨越這個落差,而不要在儲存層中、悄無聲息地跨越。

座標系是最容易出錯的地方

三條容易搞錯、又不易察覺的約定:

  • 參考座標系與相機座標系。 在本應使用校正後參考座標系的地方用了某臺相機的變換,會讓每個框都平移該相機的雙目基線距離。系統性的、幾釐米的偏移,很容易被誤以為是標註者不夠細緻。
  • 在 KITTI 中位置指的是底面,而非中心。若按中心來讀,會把每個物體埋進地下半個自身高度。
  • 尺寸順序與座標軸分配。 這裡的 90° 旋轉錯誤是往返測試抓不到的,因為逆向轉換做了同樣的錯誤假設,兩者彼此自洽。只有與參考實現自己的角點公式作比對才能發現。

衡量一致性

請使用精確的帶旋轉三維 IoU。對於水平的車載資料,軸對齊的近似還算夠用;而對於無人機、手持與室內掃描則是錯的,在那裡它所報告的分歧是度量方式的產物,而非標註者的分歧。

與二維情形一樣,請把問題拆開:標註者是否找到了相同的物件、是否給出了相同的標籤、是否放在了相同位置。參見如何測量邊界框上的一致性

配置

yaml
annotation_schemes:
  - annotation_type: spatial_annotation
    name: objects
    description: "Put a 3D box around every vehicle and pedestrian."
    source_field: point_cloud
    calibration_field: calibration
    tools: [cuboid_3d, point_3d]
    labels:
      - {name: car, color: "#FF6B6B", key_value: "1"}
      - {name: pedestrian, color: "#FFD93D", key_value: "2"}
    color_mode: height
    lod: true
    max_points: 400000
    fit_box_height: true

可用示例:KITTI 展示設計

什麼時候該選別的工具

Segments.ai、Kognic、Deepen AI、Supervisely 與 Xtreme1/BasicAI 都是這方面的專業產品,對於生產級的自動駕駛流水線,它們更領先:帶軌跡傳播的序列工作流、雷達與多雷射雷達、自動擬合立方體的模型,就 Deepen 而言還有一整套無靶標標定產品。Supervisely 與 Xtreme1 可自託管,而 Supervisely 能處理大得多的點雲。

Potato 不支援點雲序列:標註是逐幀進行的,跨掃描序列的軌跡傳播尚未實現。當你需要空間標籤上的信度統計,或者三維只是一項多模態研究中的一部分時,再在三維場景中選擇它。

延伸閱讀