自动驾驶入门:Camera与LiDAR融合数据标注的实战指南

1次阅读
没有评论

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

image.webp

背景痛点

自动驾驶系统的训练依赖高质量的多模态标注数据,但 Camera 与 LiDAR 融合标注存在三大核心挑战:

自动驾驶入门:Camera 与 LiDAR 融合数据标注的实战指南

  • 传感器标定误差 :相机镜头畸变、LiDAR 与相机安装位置偏差导致的空间对齐误差
  • 时间不同步 :传感器采样频率差异(如相机 30Hz vs LiDAR10Hz)造成的时序错位
  • 数据规模压力 :单辆测试车每日产生约 4TB 原始数据,人工标注成本极高

技术选型

主流标注工具对比:

工具类型 代表产品 优点 缺点
云端 SaaS LabelBox 支持团队协作,版本管理完善 网络依赖强,定制化能力有限
本地化工具 CVAT 开源免费,支持 3D 点云标注 多模态融合标注流程繁琐
自研方案 基于 Open3D 开发 可深度适配特定传感器组合 需要专业开发团队维护

核心实现

1. 传感器标定

内参标定(Camera Intrinsics)

使用棋盘格标定法获取:
– 焦距 (fx,fy)
– 主点坐标 (cx,cy)
– 径向畸变系数 (k1,k2,k3)

外参标定(LiDAR-to-Camera)

通过标定靶球计算变换矩阵:

T_{lidar}^{cam} = \begin{bmatrix}
R_{3×3} & t_{3×1}\\
0_{1×3} & 1
\end{bmatrix}

2. 时间同步方案

  • 硬件同步 :采用 PTP 协议实现 μs 级同步(需支持 GPS 授时的传感器)
  • 软件同步 :基于时间戳插值对齐(适合消费级设备)

3. 多模态数据对齐

点云到图像的投影公式:

def project_pointcloud(points, T, K):
    """
    将 LiDAR 点云投影到相机图像平面
    :param points: (N,3) LiDAR 坐标系下的点云
    :param T: (4,4) 外参矩阵
    :param K: (3,3) 相机内参
    :return: (N,2) 图像坐标
    """
    homo_points = np.hstack([points, np.ones((len(points),1))])  # 齐次坐标
    cam_points = (T @ homo_points.T).T[:,:3]  # 转到相机坐标系
    uv = (K @ cam_points.T).T  # 投影到图像平面
    uv[:,:2] /= uv[:,2:]  # 归一化
    return uv[:,:2]

代码示例

标定验证脚本(检查投影准确性):

import numpy as np
import cv2

# 加载标定结果
K = np.load("camera_intrinsics.npy")  # 相机内参
T = np.load("extrinsic_matrix.npy")   # 外参

# 生成测试点云(标定板角点世界坐标)checker_points = np.array([[0,0,0], [0.2,0,0], [0,0.2,0], [0.2,0.2,0]
])

# 执行投影
uv = project_pointcloud(checker_points, T, K)

# 可视化验证
img = cv2.imread("calib_image.jpg")
for u,v in uv:
    cv2.circle(img, (int(u),int(v)), 5, (0,255,0), -1)
cv2.imwrite("projection_check.jpg", img)

性能考量

提升标注效率的三种方法:

  1. 半自动标注 :
  2. 使用预训练模型生成初始标注(如 Mask R-CNN 检测 2D 框)
  3. 人工仅需修正错误标注

  4. 智能辅助工具 :

  5. 基于点云密度的自动筛选(过滤远处低密度区域)
  6. 跨模态标签传递(2D 检测框反投影到 3D 点云)

  7. 流程优化 :

  8. 建立标注 QA 检查表(包含常见错误类型)
  9. 采用分级标注策略(关键帧精细标注 + 普通帧自动插值)

避坑指南

常见错误 解决方案
点云在图像边缘畸变严重 重新检查镜头畸变校正参数
动态物体出现重影 检查时间同步精度,建议≤10ms
标注工具卡顿 使用 E57 格式替代 PCD 减少点云数据量
雨天点云噪声干扰 添加基于反射强度的点云过滤
夜间图像特征不足 融合红外相机数据辅助标注

互动实践

任务 :使用 Open3D 实现点云 - 图像投影可视化

  1. 安装依赖:

    pip install open3d numpy opencv-python

  2. 下载示例数据包(包含点云 + 图像 + 标定文件)

  3. 参考代码框架:

    import open3d as o3d
    import cv2
    
    # 加载数据
    pcd = o3d.io.read_point_cloud("sample.pcd")
    img = cv2.imread("sample.jpg")
    
    # 实现投影函数(参考前文 project_pointcloud)def visualize_projection(points, image, uv):
        """可视化投影结果"""
        for u,v in uv:
            cv2.circle(img, (int(u),int(v)), 2, (0,0,255), -1)
        cv2.imshow("Projection", img)
        cv2.waitKey(0)
    
    # 调用示例
    points = np.asarray(pcd.points)
    uv = project_pointcloud(points, T, K)
    visualize_projection(points, img, uv)

完成效果应显示点云在图像上的正确投影位置(红色点)。建议尝试调整外参矩阵观察投影变化,直观理解标定参数的影响。

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