KITTI数据集如何解读和使用

  

  网上有很多KITTI数据集的介绍,但是都不完整,新手很容易看得晕头转向,这里我详细解释下。

1 下载数据

  我主要关心3D目标检测,对应的数据下载页面在这里:链接。
  KITTI采集数据用了4个相机和1个激光雷达,所以下载时要看好。对于没接触过目标检测的同学,注意由于这里下载的是训练和评估用的数据,因此它们不是连贯采集的数据,而是被随机排列的,这是为了用于训练神经网络。
  data_object_calib.zip也要下载下来,这里面是每一帧下相机和激光雷达的变换关系,例如第一帧000000.txt的内容如下。相机和激光雷达标定不应该是一次性的吗,为什么每一帧还要单独标定呢,这可能是因为图片在不同的场景下得到的,已经被打乱了,所以每一帧都跟着一个标定文件。

P0: 7.070493000000e+02 0.000000000000e+00 6.040814000000e+02 0.000000000000e+00 0.000000000000e+00 7.070493000000e+02 1.805066000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P1: 7.070493000000e+02 0.000000000000e+00 6.040814000000e+02 -3.797842000000e+02 0.000000000000e+00 7.070493000000e+02 1.805066000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P2: 7.070493000000e+02 0.000000000000e+00 6.040814000000e+02 4.575831000000e+01 0.000000000000e+00 7.070493000000e+02 1.805066000000e+02 -3.454157000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 4.981016000000e-03
P3: 7.070493000000e+02 0.000000000000e+00 6.040814000000e+02 -3.341081000000e+02 0.000000000000e+00 7.070493000000e+02 1.805066000000e+02 2.330660000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 3.201153000000e-03
R0_rect: 9.999128000000e-01 1.009263000000e-02 -8.511932000000e-03 -1.012729000000e-02 9.999406000000e-01 -4.037671000000e-03 8.470675000000e-03 4.123522000000e-03 9.999556000000e-01
Tr_velo_to_cam: 6.927964000000e-03 -9.999722000000e-01 -2.757829000000e-03 -2.457729000000e-02 -1.162982000000e-03 2.749836000000e-03 -9.999955000000e-01 -6.127237000000e-02 9.999753000000e-01 6.931141000000e-03 -1.143899000000e-03 -3.321029000000e-01
Tr_imu_to_velo: 9.999976000000e-01 7.553071000000e-04 -2.035826000000e-03 -8.086759000000e-01 -7.854027000000e-04 9.998898000000e-01 -1.482298000000e-02 3.195559000000e-01 2.024406000000e-03 1.482454000000e-02 9.998881000000e-01 -7.997231000000e-01

  如果神经网络训练好了,你想看看它跑在连续数据帧上的效果,可以在raw data页面下载连贯数据。

KITTI数据集如何解读和使用_第1张图片

  这里你要注意应该下载哪个,分为校准前的和校准后的,而且每个场景下还有一个用于校准的数据calibration,里面是相机激光雷达之间的坐标变换关系,也要下载下来。里面有以下三个文件:
  calib_velo_to_cam.txt:激光雷达到0号相机的变换矩阵(包含旋转和平移部分)
  calib_imu_to_velo.txt
  calib_cam_to_cam.txt:4个相机之间的投影变换关系

  例如calib_velo_to_cam.txt里的数据是:

R: 7.755449e-03 -9.999694e-01 -1.014303e-03 2.294056e-03 1.032122e-03 -9.999968e-01 9.999673e-01 7.753097e-03 2.301990e-03
T: -7.275538e-03 -6.324057e-02 -2.670414e-01
delta_f: 0.000000e+00 0.000000e+00
delta_c: 0.000000e+00 0.000000e+00

  在你训练完后检验效果,这时它在测试集上会生成一个txt保存的预测结果,例如下例。这个数据的含义在devkit_object.zip中的readme.txt里解释了。

Car 0.00 0 1.80 425.88 181.46 464.31 201.44 1.40 1.75 4.75 -12.29 2.06 53.93 1.58

  其中我们最关心的是物体包围盒的尺寸和位置,但是注意它是相对于相机坐标系表示的,如果你想把包围盒画在激光雷达数据中,就要利用上面出现的Tr_velo_to_cam旋转平移变换把包围盒顶点坐标从相机坐标系转换到激光雷达坐标系下。由于Tr_velo_to_cam的意思是从激光雷达坐标系转换到相机坐标系,所以我们得取个逆。下图是显示在Matlab中的效果(如果不是0号相机,别忘了相机与相机之间还有个变换关系,这个看安装图即可得到)。

KITTI数据集如何解读和使用_第2张图片
KITTI数据集如何解读和使用_第3张图片

  如果你想把激光点云数据显示在图像平面上,要利用投影矩阵,也就是上面的P0~P4,具体使用哪个要看你用了哪个相机的数据。参考这里:点云映射到相机图像、链接、链接。

你可能感兴趣的:(KITTI数据集如何解读和使用)