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页面下载连贯数据。
这里你要注意应该下载哪个,分为校准前的和校准后的,而且每个场景下还有一个用于校准的数据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号相机,别忘了相机与相机之间还有个变换关系,这个看安装图即可得到)。
如果你想把激光点云数据显示在图像平面上,要利用投影矩阵,也就是上面的P0~P4,具体使用哪个要看你用了哪个相机的数据。参考这里:点云映射到相机图像、链接、链接。
本文地址:https://blog.csdn.net/robinvista/article/details/107281123
推荐阅读
-
data loader怎么用 如何使用data loader对SalesForce数据进行导入、导出和删除
-
Excel如何将姓名分拆成姓和名两列(使用数据分列完成)
-
数据库之 游标的解读和使用
-
如何使用myisamchk和mysqlcheck工具快速修复损坏的MySQL数据库文件
-
如何使用JavaScript和正则表达式进行数据验证
-
如何使用python 和excel 对100M左右的数据进行保存和简单分析
-
如何使用JavaScript和正则表达式进行数据验证
-
data loader怎么用 如何使用data loader对SalesForce数据进行导入、导出和删除
-
记录:如何使用ASP.NET Core和EnityFramework Core实现 数据库操作 和 数据库实体 的项目分离
-
KITTI数据集如何解读和使用