共计 1392 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍:为什么我们需要 3D 数据标注?
在自动驾驶、机器人导航、增强现实等领域,3D 数据标注是训练 AI 模型的关键环节。相比 2D 图像,3D 数据能提供深度信息,让计算机更准确地理解物体在真实世界中的空间关系。

- 自动驾驶:标注车辆、行人、交通标志的 3D 位置,帮助汽车判断距离和运动轨迹
- AR/VR:标注虚拟物体的锚定点,实现虚实融合的精准定位
- 工业检测:标注零件三维尺寸缺陷,提高质检精度
主流工具对比:选对工具事半功倍
- Labelbox
- 优势:云端协作方便,支持点云和图像联合标注
-
适用场景:中大型团队的多模态标注项目
-
Supervisely
- 优势:内置 AI 辅助标注,支持自动预标注
-
适用场景:需要减少人工标注量的项目
-
CVAT
- 优势:开源免费,支持本地部署
- 适用场景:预算有限的小型团队或个人开发者
核心概念解析
3D 点云标注
通过给激光雷达扫描的点集添加标签,常见标注类型包括:
- 语义分割(给每个点分类)
- 实例分割(区分同类物体的不同个体)
立体图像标注
基于双目相机图像,通过视差计算深度信息后进行标注,需要注意:
- 左右视图的一致性校验
- 遮挡区域的处理策略
3D 边界框
与 2D 框不同,需要标注 9 个参数:
- 中心点坐标(x,y,z)
- 长宽高尺寸
- 三个旋转角度(通常用欧拉角表示)
实战:用 Python 实现点云标注
import open3d as o3d
import numpy as np
# 加载点云数据
pcd = o3d.io.read_point_cloud("sample.pcd")
# 创建可视化窗口
vis = o3d.visualization.VisualizerWithEditing()
vis.create_window()
vis.add_geometry(pcd)
# 设置标注参数
params = {'box_size': [1.5, 1.8, 4.0], # 典型轿车尺寸(长, 宽, 高)
'label_color': [1,0,0] # 红色标注框
}
# 开始交互式标注
vis.run() # 按 K 进入标注模式
vis.destroy_window()
# 获取标注结果
annotations = vis.get_picked_points()
print(f"已标注 {len(annotations)} 个物体")
标注流程示意图
flowchart TD
A[加载数据] --> B[初始化标注界面]
B --> C{选择标注类型}
C -->|3D 框 | D[框选物体]
C -->| 多边形 | E[描点绘制]
D --> F[调整尺寸 / 角度]
E --> G[闭合多边形]
F --> H[保存标注]
G --> H
效率优化技巧
- 批量标注
- 对连续帧使用跟踪算法自动传播标签
-
利用相似物体复制粘贴标注
-
快捷键大全
- Ctrl+Z:撤销
- Shift+ 框选:添加选中点
-
Alt+ 滚轮:调整框高度
-
质量检查
- 开启点云投影视图检查标签一致性
- 使用统计过滤移除异常小尺寸标注
常见问题解决方案
- 问题 1 :标注框穿透物体
-
解决:开启点云密度检测,调整框尺寸匹配实际点分布
-
问题 2 :多物体粘连
-
解决:先用聚类算法预处理,再分实例标注
-
问题 3 :标注视角受限
- 解决:设置多个视点标注,最后融合结果
进阶建议
- 建立标注规范文档,明确边缘案例处理方式
- 实现自动化质检流水线,包括:
- 标签完整性检查
- 物理合理性验证(如汽车不会悬浮在空中)
- 使用版本控制管理标注迭代
思考题
- 当标注数据存在严重类别不均衡时,应该如何处理?
- 对于动态物体的连续帧标注,如何平衡标注精度和效率?
- 在多传感器融合场景下,怎样确保不同数据源的标注一致性?
正文完
发表至: 未分类
近两天内
