共计 1403 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
3D 点云数据标注是自动驾驶、机器人感知等领域的重要基础工作,但在实际标注过程中会面临诸多挑战:

- 数据量大:单帧激光雷达点云常含 10 万 + 点,传统标注工具易卡顿
- 维度复杂:需同时处理 XYZ 坐标、强度、RGB 等多维信息
- 视角限制:单一视角难以完整标注被遮挡物体
- 标注标准模糊:3D 边界框的朝向、尺寸标注易产生歧义
技术选型对比
当前主流 3D 标注工具特性对比:
| 工具 | 开源 | 3D 支持 | 自动化扩展 | 学习成本 |
|---|---|---|---|---|
| CVAT | ✓ | ✓ | ✓ | 中 |
| LabelBox | ✗ | ✓ | ✗ | 低 |
| Supervisely | ✗ | ✓ | ✓ | 高 |
CVAT 的核心优势:
- 完全开源可定制
- 支持 Python API 扩展
- 完善的 3D 视图联动功能
核心实现流程
1. 数据预处理
推荐使用 PLY 格式存储点云,转换示例:
import open3d as o3d
# 从 KITTI 格式转换
pcd = o3d.io.read_point_cloud("000000.bin", format='xyz')
o3d.io.write_point_cloud("000000.ply", pcd)
2. CVAT 项目创建
- 新建 Project 时选择 ”3D Task” 类型
- 设置标注规范(如 Car/Pedestrian/Cyclist)
- 配置关键属性(如 truncated/occluded 状态)
3. 多视角标注技巧
- 使用
Shift+ 鼠标拖动旋转视图 Alt+ 滚轮调整框体朝向- 开启 ” 同步视图 ” 确保 2D-3D 一致性
自动化标注示例
批量导入脚本:
from cvat_sdk import make_client
with make_client("http://localhost:8080", "admin", "password") as client:
task = client.tasks.create(
name="KITTI_3D",
labels=[{"name": "Car"}, {"name": "Pedestrian"}],
task_type="3d"
)
# 上传点云序列
task.upload_data([f"frame_{i}.ply" for i in range(100)])
半自动标注 API 调用:
# 使用预训练模型生成初始标注
response = task.annotations.predict(
frame=0,
model="pointpillars",
confidence_threshold=0.7
)
性能优化方案
渲染优化
- 启用
Octree加速显示(修改 config.yml):cvat: point_cloud: octree_depth: 8 point_size: 2
分布式标注
- 使用 NFS 共享存储
- 配置多个 CVAT-worker 节点
- 通过 Redis 分配任务
常见问题解决
- 框体漂移:检查点云坐标系与标注框是否一致
- 标签错位:重新校准传感器内外参
- 显示异常:降低点云渲染质量(
LOD=0.5) - API 超时:分批处理数据(每批 <500 帧)
- 标注不一致:制作详细的标注手册模板
数据安全建议
-
移除 GPS 元数据:
import laspy las = laspy.read("scan.las") las.header.pop("gps_time") las.write("clean.las") -
对点云进行随机扰动(σ=0.01m)
开放讨论
在实际项目中,我们发现 3D 标注质量评估缺乏统一标准。大家是如何解决以下问题的:
- 如何量化标注者间的一致性?
- 点云稀疏区域的标注策略该如何制定?
- 时序连续帧的标注如何保证稳定性?
期待在评论区看到各位的实战经验分享!
正文完
发表至: 未分类
近两天内
