3D数据标注拉框教程:从零开始的实战指南与避坑技巧

1次阅读
没有评论

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

image.webp

为什么 3D 标注比 2D 更难?

刚接触点云标注时,我被这些现实问题暴击过:

3D 数据标注拉框教程:从零开始的实战指南与避坑技巧

  • 点云密度过山车 :激光雷达扫描近处密密麻麻,远处稀疏得连轮廓都看不清(比如 10 米外的行人变成几个散点)
  • 幽灵遮挡 :前车遮挡后车时,人类能脑补完整形状,但算法可能把两个车识别成一个怪异物体
  • 视角分裂症 :在俯视图画好的完美立方体,切到侧视图发现悬空或嵌进地面

这些痛点在自动驾驶标注任务中尤为致命——漏标一个锥桶可能导致车辆违规变道。

工具横评:哪款适合你的团队?

工具 渲染帧率 (FPS) API 成熟度 协作功能 学习曲线
Labelbox 25~30 ★★★★☆ 多版本追溯 中等
CVAT 15~20 ★★★☆☆ 基础冲突检测 陡峭
Supervisely 30~45 ★★★★★ 实时同步 平缓

实战建议
– 小团队选 Supervisely:他们的 3D 插件可以直接标注点云序列
– 需要自定义流程选 Labelbox:Webhooks 能触发自动化质检
– 预算有限用 CVAT:但要做好手动修复标注的准备

手把手代码实战

预处理:给点云 ” 美颜 ”

import open3d as o3d

# 原始点云像没梳过的头发
pcd = o3d.io.read_point_cloud("raw_data.pcd")

# 体素化降噪(像用梳子整理头发)voxel_size = 0.05  # 毫米级任务用 0.03,米级用 0.1
pcd = pcd.voxel_down_sample(voxel_size)

# 去除孤独的点(类似 PS 去杂色)clusters = pcd.cluster_dbscan(eps=0.1, min_points=10)
valid_points = [i for i,c in enumerate(clusters) if c>=0]
pcd = pcd.select_by_index(valid_points)

视角切换:像玩 3D 游戏

# 用 WASD 控制视角(想象玩第一人称游戏)def key_callback(vis, key, x, y):
    if key == ord('W'):
        vis.get_view_control().rotate(10.0, 0.0)  # 俯仰角
    elif key == ord('S'):
        vis.get_view_control().rotate(-10.0, 0.0)
    return False

vis = o3d.visualization.VisualizerWithKeyCallback()
vis.register_key_callback(ord('W'), key_callback)
vis.add_geometry(pcd)
vis.run()

标注结果怎么存?

{
  "version": "1.1",
  "objects": [
    {
      "class": "car",
      "box": {"center": [1.2, 3.4, 0.5],
        "size": [4.3, 1.8, 1.5],  // 长宽高
        "yaw": 0.52               // 偏航角(弧度制)},
      "attributes": {"occlusion": 0.3          // 遮挡比例 0~1}
    }
  ]
}

团队协作防踩坑

冲突场景 :A 标注员在俯视图标了车顶,B 在侧视图标车轮,结果生成两个重叠框

解决方案
1. 采用乐观锁——提交时检查该区域是否有新标注
2. 空间分区——把道路划分网格,不同人负责不同网格
3. 版本快照——每次保存生成 Git 风格的差异记录

质量检查:用数字说话

计算两个标注框的重叠度:

def calculate_iou(box1, box2):
    # 转换为 8 个角点坐标
    corners1 = get_box_corners(box1)
    corners2 = get_box_corners(box2)

    # 计算相交体积(使用凸包算法)intersection = convex_hull_volume(corners1, corners2)

    # IoU = 交集 / (体积 1 + 体积 2 - 交集)
    return intersection / (box1.volume + box2.volume - intersection)

验收标准
– IoU>0.7 → 合格
– 0.3<IoU<0.7 → 需要复核
– IoU<0.3 → 必须重标

留给你的思考题

  1. 如何处理动态物体(如行人挥手)导致的点云变形?
  2. 当标注预算有限时,应该优先标注哪些关键帧?

(欢迎在评论区分享你的实战经验)

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