2D3D点云数据标注从入门到精通:工具选型与实战避坑指南

1次阅读
没有评论

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

image.webp

为什么点云标注这么重要?

在自动驾驶和机器人领域,点云数据 是感知环境的核心输入。激光雷达扫描得到的数百万个空间点,能精确描绘出周围物体的形状和位置。但原始点云就像未分类的乐高积木——只有通过标注(比如框出车辆、行人),AI 模型才能学会识别这些物体。

2D3D 点云数据标注从入门到精通:工具选型与实战避坑指南

新手最容易踩的坑包括:

  • 效率低下:手动标注一帧数据可能耗时 30 分钟以上
  • 格式混乱:不同工具输出的标注文件结构差异大
  • 精度失控:坐标系转换错误导致标注偏移 10cm+(在自动驾驶中非常危险)

工具选型:哪款适合你?

1. LabelCloud

优点
– 纯 Python 开发,可直接调用 Open3D
– 支持自定义标注类型(如Bounding Cube
– 轻量级,适合快速验证

缺点
– 缺少团队协作功能
– 对大规模点云(>50 万点)卡顿明显

2. Supervisely

优点
– 提供云端协作平台
– 内置智能预标注(如自动拟合立方体)
– 支持视频级点云标注

缺点
– 需要联网使用
– 高级功能收费

3. CVAT

优点
– 开源免费
– 同时支持 2D/3D 标注
– 可部署到本地服务器

缺点
– 3D 标注功能较基础
– 学习曲线陡峭

手把手实战:从加载到标注

第一步:用 Open3D 加载点云

import open3d as o3d

# 加载 PCD 文件(注意路径不要含中文)point_cloud = o3d.io.read_point_cloud("sample.pcd")

# 可视化设置
vis = o3d.visualization.Visualizer()
vis.create_window(width=800, height=600)
vis.add_geometry(point_cloud)

# 调整视角(FOV=60 度)ctr = vis.get_view_control()
ctr.set_front([0, 0, -1])  # 相机朝向
vis.run()

第二步:坐标系对齐

当点云歪斜时,需要旋转矩阵修正:

import numpy as np

# 构建旋转矩阵(绕 Z 轴转 30 度)theta = np.radians(30)
rot_mat = np.array([[np.cos(theta), -np.sin(theta), 0],
    [np.sin(theta), np.cos(theta), 0],
    [0, 0, 1]
])

# 应用变换
points = np.asarray(point_cloud.points)
points = np.dot(points, rot_mat.T)
point_cloud.points = o3d.utility.Vector3dVector(points)

第三步:理解标注文件

标准 JSON 格式示例:

{
  "version": "1.0",
  "objects": [
    {
      "class": "car",
      "position": [1.2, 3.4, 0.8],  // 中心点坐标
      "dimensions": [4.5, 1.8, 1.6], // 长宽高
      "rotation": 0.12  // 偏航角(弧度)}
  ]
}

避坑指南:血泪经验总结

坐标系转换

  • 激光雷达坐标系通常是 X 前 Y 左 Z 上
  • 相机坐标系是 Z 前 X 右 Y 下
  • 转换时注意:
  • 先平移后旋转
  • 检查旋转顺序(建议 Z→Y→X)

动态物体处理

对于移动的行人:
1. 在第一帧手动标注
2. 使用卡尔曼滤波预测后续帧位置
3. 微调边界框避免累积误差

性能优化技巧

点云下采样

# 使用体素网格下采样(保持形状)down_pcd = point_cloud.voxel_down_sample(voxel_size=0.05)

加速查询

建立 KD 树后,搜索效率提升 10 倍 +:

pcd_tree = o3d.geometry.KDTreeFlann(point_cloud)
[k, idx, _] = pcd_tree.search_radius_vector_3d(query_point, radius=1.0)

延伸思考:半自动标注

用 PyTorch3D 实现思路:
1. 训练一个简单分类器预测粗略边界框
2. 将预测结果导入标注工具微调
3. 主动学习:把模型不确定的样本优先标注

完整代码示例见 GitHub 仓库(链接)。记住:好的标注数据比算法更重要!

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