3D点云数据标注工具全指南:从入门到实战避坑

1次阅读
没有评论

共计 1512 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

刚开始接触 3D 点云标注时,我用 Excel 手动记录每个物体的坐标和尺寸,不仅效率低下(标注一帧数据需要 2 小时),还经常出现多视角不一致的问题。更头疼的是,当点云密度达到 10 万 + 时,普通笔记本直接卡死。这种原始方式在 KITTI 这样包含 7481 帧训练数据的数据集上根本不可行。

3D 点云数据标注工具全指南:从入门到实战避坑

工具横评

工具名称 安装方式 标注类型支持 扩展性 内存占用(百万点)
CloudCompare 原生安装(1 分钟) bbox/ 语义分割 / 测量工具 插件丰富 /Python 绑定 1.2GB
LabelMe3D Docker(5 分钟) bbox/ 关键点 REST API 支持 800MB
Supervisely 云服务(即开即用) 全类型支持 完整 SDK
CVAT Docker-compose(10 分钟) bbox/3D 立方体 任务队列管理 1.5GB
SemanticSeg 源码编译(30 分钟 +) 专业级语义分割 学术论文复现专用 2GB+

注:测试环境为 Intel i7+16GB 内存,点云规模约 50 万点

实战演示:CloudCompare 标注 KITTI 数据

  1. 下载并安装 CloudCompare(推荐 2.12.alpha 版本,对大型点云优化更好)
  2. 导入 bin 文件:File > Open 选择 Velodyne points 格式
  3. 创建标注:按 Shift+A 调出标注工具栏,选择 3D box 模式
  4. 调整视角:按住鼠标滚轮旋转,Shift+ 滚轮 平移,Ctrl+ 滚轮 缩放
  5. 保存结果:使用 Tools > Save 导出为 PCD 格式
# open3d 半自动标注示例(带异常处理)import open3d as o3d
import numpy as np
import logging

logging.basicConfig(filename='labeling.log', level=logging.INFO)

try:
    pcd = o3d.io.read_point_cloud("000001.bin", format='xyz')

    # 自动地面分割
    plane_model, inliers = pcd.segment_plane(
        distance_threshold=0.2,
        ransac_n=3,
        num_iterations=100
    )

    # 可视化调整
    vis = o3d.visualization.VisualizerWithEditing()
    vis.create_window()
    vis.add_geometry(pcd)
    vis.run()  # 进入交互模式
    vis.destroy_window()

    # 获取用户框选结果
    bbox = vis.get_cropped_geometry()
    o3d.io.write_point_cloud("labeled.pcd", bbox)

except Exception as e:
    logging.error(f"标注失败: {str(e)}", exc_info=True)

生产建议

  • 点云密度处理
  • 车载激光雷达数据建议先体素降采样(0.1m 粒度)
  • 标注完成后再用原始高密度点云微调

  • 多人协作方案

  • 使用 Git LFS 管理标注文件
  • 每个标注员创建独立分支
  • 通过 diff --point-cloud 命令检查冲突

  • 质量校验

  • 用 Frustum 校验多视角一致性
  • 运行脚本检查 bbox 重叠率(应 <5%)
  • 随机抽样人工复核(建议 10% 比例)

动手挑战

用 PyTorch3D 实现标注结果的可视化验证:
1. 加载 KITTI 的标注 json 文件
2. 将 bbox 转换为 8 个顶点坐标
3. 使用 pytorch3d.structures.join_meshes_as_scene 创建场景
4. 添加相机视角动画(参考 KITTI 的 calib 参数)
5. 输出 GIF 验证标注合理性

提示:遇到 CUDA 内存不足时,尝试减小 batch_size 参数

正文完
 0
评论(没有评论)