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 不支持点云序列:标注是逐帧进行的,跨扫描序列的轨迹传播尚未实现。当你需要空间标签上的信度统计,或者三维只是一项多模态研究中的一部分时,再在三维场景中选择它。

延伸阅读