kitti数据集在3D目标检测中的入门

数据集官网下载地址:
http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
kitti数据集在3D目标检测中的入门
3D目标检测数据集由7481个训练图像和7518个测试图像以及相应的点云数据组成,包括总共80256个标记对象。
上图红色框标记的为我们需要的数据,分别是彩色图像数据(12GB)、点云数据(29GB)、相机矫正数据(16MB)、标签数据(5MB)。其中彩色图像数据、点云数据、相机矫正数据均包含training(7481)和testing(7518)两个部分,标签数据只有training数据。
需要填写邮箱,然后会给发送下载链接(但是很慢)!!!
可以通过—KITTI数据集下载(百度云)
https://blog.****.net/u013086672/article/details/103910266

一:目前3D点云在目标检测的算法历程
kitti数据集在3D目标检测中的入门
其中上半部分主要是利用了图片以及激光雷达作为输入,例如F-PointNet网络先从2D图片上检测出目标,然后投影到3D点云中。但是这种方法存在遮挡等问题。
然后下半部分是仅仅利用了激光雷达的点云作为输入,其中同理分为两种类型,一是基于无规则的点云直接提取特征做检测即Point-based,另一种是Voxel-based,其主要先把无规则点云处理为有规则的,然后再提取特征。
这里注意的是AP主要是car的检测,再行人检测其没有还这么好的效果,因为很多物体和人比较相似所以误差较大。

二:kitti数据集的采集
KITTI数据集的数据采集平台装配有2个灰度摄像机,2个彩色摄像机,一个Velodyne 64线3D激光雷达,4个光学镜头,以及1个GPS导航系统。 kitti数据集在3D目标检测中的入门
为了生成双目立体图像,相同类型的摄像头相距54cm安装。由于彩色摄像机的分辨率和对比度不够好,所以还使用了两个立体灰度摄像机,它和彩色摄像机相距6cm安装。为了方便传感器数据标定,规定坐标系方向如下:
• Camera: x = right, y = down, z = forward
• Velodyne: x = forward, y = left, z = up
• GPS/IMU: x = forward, y = left, z = up
kitti数据集在3D目标检测中的入门
三:数据集介绍
1)images文件
kitti数据集在3D目标检测中的入门
2)velodyne文件
kitti数据集在3D目标检测中的入门kitti数据集在3D目标检测中的入门
效果图如下:
kitti数据集在3D目标检测中的入门
3)calib文件
kitti数据集在3D目标检测中的入门
kitti数据集在3D目标检测中的入门
kitti数据集在3D目标检测中的入门注:这里可以将label中照相机标注的3D目标检测框的中心坐标通过上面公式映射到点云中物体的真实检测框,这样的话都是三位坐标系的转换,那么对于2D目标检测框如何从点云中来得到的,这是个问题!!!!------这段理解是错的。。
应该是:
雷达坐标系变换到xx号相机的图像坐标系的公式
设X为雷达坐标系中的齐次坐标,Y为对应在xx号相机的图像坐标系的齐次坐标,则
kitti数据集在3D目标检测中的入门
以上是对于raw data,对于目标检测其转换是:
kitti数据集在3D目标检测中的入门
(R|T) : 雷达坐标系 -> 0号相机坐标系
R_rect_00: 0号相机坐标系 -> 矫正后的0号相机坐标系
P_rect_0x: 矫正后的0号相机坐标系 -> x号相机的图像平面
从上面可以看出主要是从三维到二维平面的转换!!!
效果图:待!!
4)label文件
kitti数据集在3D目标检测中的入门
每一行代表一个object,每一行都有16列分别表示不同的含义,具体如下:
第1列(字符串):代表物体类别(type)
总共有9类,分别是:Car、Van、Truck、Pedestrian、Person_sitting、Cyclist、Tram、Misc、DontCare。其中DontCare标签表示该区域没有被标注,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算precision),将本来是目标物体但是因为某些原因而没有标注的区域统计为假阳性(false positives),评估脚本会自动忽略DontCare区域的预测结果。
第2列(浮点数):代表物体是否被截断(truncated)
数值在0(非截断)到1(截断)之间浮动,数字表示指离开图像边界对象的程度。
第3列(整数):代表物体是否被遮挡(occluded)
整数0、1、2、3分别表示被遮挡的程度。
第4列(弧度数):物体的观察角度(alpha)
取值范围为:-pi ~ pi(单位:rad),它表示在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角,如图1所示。
第5~8列(浮点数):物体的2D边界框大小(bbox)
四个数分别是xmin、ymin、xmax、ymax(单位:pixel),表示2维边界框的左上角和右下角的坐标。
第9~11列(浮点数):3D物体的尺寸(dimensions)分别是高、宽、长(单位:米)
第12-14列(整数):3D物体的位置(location)分别是x、y、z(单位:米),特别注意的是,这里的xyz是在相机坐标系下3D物体的中心点位置。
第15列(弧度数):3D物体的空间方向(rotation_y)取值范围为:-pi ~ pi(单位:rad),它表示,在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),如图1所示。
第16列(整数):检测的置信度(score)要特别注意的是,这个数据只在测试集的数据中有。
5)development kit文件
下载 raw data development kit,其中的readme文件详细记录了你想知道的一切,数据采集装置,不同装置的数据格式,label等。即以上的所有信息都在此文件中介绍了。

四:效果可视化

由于pointRCNN源码的训练和inference很详细,但是没有可视化的代码,本文介绍其3d框结果的可视化方法
github连接:https://github.com/sshaoshuai/PointRCNN
1)将pointRCNN预测结果拷贝到KITTI数据集
pointRCNN的结果存储在:(里面包含000001.txt等等,存的是3d框的预测结果)
PointRCNN/output/rcnn/default/eval/epoch_no_number/val/final_result
把整个文件夹复制到kitti数据集的training目录下,文件夹命名pred
数据组织结构如下:
(注意,这里的training里面是全部7481张图,不然会报错没有000000.txt)
kitti数据集在3D目标检测中的入门
2) 运行可视化源码kitti_object_vis
源码地址:https://github.com/kuixu/kitti_object_vis
首先:下载源码并进到源码文件夹’
git clone https://github.com/kuixu/kitti_object_vis
其次:把上述kitti数据集的object/目录,链接到data/目录下过去,并命名为obj(因为这个源码需求)
cd kitti_object_vis/data
ln -s /home/ubuntu/dataset/KITTI/object obj
然后:下载源码和源码所需的库(mayavi之类的),照readme里面去做
最后:运行
(1) 只显示LiDAR 仅真值
cd kitti_object_vis
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis
(回车键进入下一张)
(2) 显示LiDAR和image 仅真值
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes
(回车键进入下一张)
(3) 显示特定某张图的LiDAR和image 仅真值
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes --ind 100
(ind 100表示就是图像编号为000100.txt)
注:红色是预测框,绿色是真值框
kitti数据集在3D目标检测中的入门
(4)** 显示pointRCNN预测值**+真值对比**
在以上所有命令后面加 -p
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes --ind 6 -p
kitti数据集在3D目标检测中的入门
kitti数据集在3D目标检测中的入门
可以看到:对于预测的3D点云检测框,只能在lidar中展示,暂且不知道如何将其转换到图片上进行2D和3D的展示,即image中只能显示gt,无法显示预测结果。
我的理解:在输入图片训练的时候,将3D照相机的坐标映射到点云中的坐标系中,但是不知道准确的映射关系;另外在输出的时候会检测到2D和3D的坐标,从而我认为3D的照相机坐标就是点云中的坐标,并且为什么存在2D坐标,可能3D和2D坐标也有一定的映射关系-----待。

参考链接:
1.https://blog.****.net/u013086672/article/details/103910266
2.https://blog.****.net/lovely_yoshino/article/details/105814646?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
3.https://blog.****.net/solomon1558/article/details/70173223
4.https://blog.****.net/lovely_yoshino/article/details/105814646?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
5.https://www.cnblogs.com/notesbyY/p/10478645.html
6.https://blog.****.net/tiatiatiatia/article/details/97765165