3D目标检测基础知识

3D目标检测基础知识

如何描述3D空间中的一个物体

  • 位置
    即xyz坐标

  • 大小
    lwh长宽高,即3D 框的尺寸 (x_size, y_size, z_size),按惯例定义为物体 3D 框在航向角 yaw 角度为 0 时沿着 x, y, z 轴三个方向的长度

  • 姿态
    三种表达方式:欧拉角、旋转矩阵、四元数

    • 欧拉角
      分为pitch俯仰角、yaw航向角(偏航角)、roll翻滚角。车辆等地面上的物体,一般不会发生翻转和倾斜,
      因此一般只用考虑航向角。
      航向角的定义:选择一个轴作为重力轴,在垂直于重力轴的平面上选择一个参考方向,则参考方向的朝向角 yaw 为 0,朝向角沿着顺时针方向增大。如下图,z轴为重力轴,参考方向为y轴, 车辆前进方向与参考方向y轴的夹角则为yaw。需要注意是的,下图的坐标轴是基于车辆坐标系,即x轴向前,y轴向左,z轴向上。

    • 旋转矩阵
      一个坐标系中的坐标在另一个坐标系中表示的转换关系

    • 四元数
      (w,x,y,z)


坐标系

在自动驾驶的感知系统中,除了自车坐标系外,3D目标检测还涉及相机、激光雷达等传感器,每个传感器都有自己的坐标系。如下图

  • lidar坐标系
    x轴向前,y轴向左,z轴向上。重力轴为z轴,参考方向为x轴正方向,航向角rz是lidar坐标系下目标的前进方向和x轴的夹角

  • camera坐标系
    z轴向前,y轴向下,x轴向右。重力轴为y轴,参考方向为x轴正方向, 航向角ry是相机坐标下目标的前进方向和x轴的夹角


偏航角、观测角、目标方位角的关系

如下图,蓝色为ego vehicle,绿色为目标物体,相机坐标系的z轴向前.

  • 方位角theta,定义为自车与目标物体连线偏离自车前进方向的角度

  • 航向角rotation_y,即目标方向和相机X轴正方向的夹角(顺时针方向为正),描述的是目标在现实世界中的朝向。如图 ∠ B O C \angle BOC BOC所示。rotaiton_y的取值范围 [ − π , π ] [-\pi, \pi] [π,π],不随目标位置的变化而变化,

  • 观测角alpha, 描述的是目标相对于相机视角的朝向,定义为以相机原点为中心,相机原点到物体中心的连线为半径,将目标旋绕重力轴旋转到目标前进方向与ego vechicle一样时所需的角度,如图 ∠ B O D \angle BOD BOD所示。观测角alpha取值范围为 [ − π , π ] [-\pi, \pi] [π,π],随目标位置变化而变化

Rotation_y和Alpha之间可以相互转换。因为 ∠ A O C = 9 0 ∘ −  theta  \angle \mathrm{AOC}=90^{\circ}-\text { theta } AOC=90 theta ,所以有
∠ A O B = ∠ A O C − ∠ B O C = 9 0 ∘ −  theta  −  rotaion_y  \angle \mathrm{AOB}=\angle \mathrm{AOC}-\angle \mathrm{BOC}=90^{\circ}-\text { theta }-\text { rotaion\_y } AOB=AOCBOC=90 theta  rotaion_y 
又因为 ∠ A O B + ∠ B O D = 9 0 ∘ \angle \mathrm{AOB} + \angle \mathrm{BOD} = 90^{\circ} AOB+BOD=90, 可得
 alpha  = ∠ B O D = 9 0 ∘ − ∠ A O B =  theta  +  rotation_y  \text { alpha }=\angle \mathrm{BOD}=90^{\circ}-\angle \mathrm{AOB}=\text { theta }+\text { rotation\_y }  alpha =BOD=90AOB= theta + rotation_y 
考虑到rotation_y和alpha都是逆时针方向为负,所以有
−  alpha  =  theta  −  rotation_y  -\text { alpha }=\text { theta }-\text { rotation\_y }  alpha = theta  rotation_y 

 alpha  =  rotation_y  −  theta  \text { alpha }=\text { rotation\_y } - \text { theta }  alpha = rotation_y  theta 


数据集

NuScenes

点云数据原始格式

NuScenes数据中存在lidar点云和radar点云,其中lidar为稠密点云,具有三维坐标;而radar为稀疏点云,一般的FMCW毫米波雷达不存在高度信息(4D radar可以探测高度)。lidar点云数据的研究相对较多,这里不做过多介绍。

  • radar点云格式
    radar的点云数据格式如下图所示,每一行为一个点,包含了点的坐标、速度、强度等信息。点云数据一般通过.pcd文件保存,包头等信息为明文,具体的点云数据为二进制数据

    3D目标检测基础知识_第1张图片
  • 可视化效果

    从不同的角度观察同一个pcd文件, 普通的毫米波雷达无法测量高度信息,因此右图中Z轴取值一样

    3D目标检测基础知识_第2张图片 3D目标检测基础知识_第3张图片
  • 验证高度数据

    取值均为0

    3D目标检测基础知识_第4张图片

坐标转换

Nuscenes数据集分为全局坐标系、车身坐标系、camera坐标系、pixel坐标系、radar坐标系、lidar坐标系。除了全局坐标系,均为相对坐标系,标注真值基于全局坐标系。

  • 基本原则

    算法拟合的数据大多是基于出传感器成像坐标系,标注的真值需要从全局坐标系转换到各自的传感器坐标系,所有转换必须先通过传感器外参转到车身坐标系,再转换到传感器成像坐标系

    3D目标检测基础知识_第5张图片
  • 如何转换

    通过两个坐标系下的坐标转换矩阵(平移矩阵+旋转矩阵)来转换,相机需要额外通过内参转换到pixel坐标系

    def transform_matrix(translation: np.ndarray = np.array([0, 0, 0]),
                        rotation: Quaternion = Quaternion([1, 0, 0, 0]),
                        inverse: bool = False) -> np.ndarray:
        """
        Convert pose to transformation matrix.
        :param translation: . Translation in x, y, z.
        :param rotation: Rotation in quaternions (w ri rj rk).
        :param inverse: Whether to compute inverse transform matrix.
        :return: . Transformation matrix.
        """
        tm = np.eye(4)
    
        if inverse:
            rot_inv = rotation.rotation_matrix.T
            trans = np.transpose(-np.array(translation))
            tm[:3, :3] = rot_inv
            tm[:3, 3] = rot_inv.dot(trans)
        else:
            tm[:3, :3] = rotation.rotation_matrix
            tm[:3, 3] = np.transpose(np.array(translation))
    
        return tm
    
  • 多传感器融合时的坐标转换

    不同传感器采集频率不同,不是同步触发,一个传感器的数据需要投影到全局坐标系下,经过全局坐标系再投影到另一个传感器下达到时间对齐。借助于全局坐标系(绝对坐标系)进行运动补偿,从而完成了不同传感器之间的时间对齐。

    e.g.

    # Fuse four transformation matrices into one and perform transform.
    trans_matrix = reduce(np.dot, [ref_from_car, car_from_global, global_from_car, car_from_current])
    velocity_trans_matrix = reduce(np.dot, [ref_from_car_rot, car_from_global_rot, global_from_car_rot, car_from_current_rot])
    current_pc.transform(trans_matrix)
    

数据预处理

3D目标检测基础知识_第6张图片

Kitti


REFERENCES

  • 3D目标检测
  • 点云数据
  • 基于CenterTrack的3D目标检测源码解读
  • 干货整理:欧拉角、旋转矩阵、四元数合辑
  • 欧拉角pitch、yaw,roll的理解
  • 旋转矩阵及左右乘的意义
  • KITTI 3D目标检测数据集解析
  • Nuscenes数据集中radar到image投影的源码解析
  • NuScenes 3D目标检测数据集解析

你可能感兴趣的:(3D目标检测,自动驾驶,目标检测,计算机视觉)