KITTI数据集剖析和可视化

[复制链接]
查看807 | 回复0 | 2023-8-23 12:01:50 | 显示全部楼层 |阅读模式
一、KITTI数据集简介

1.1 先容

   

  • 文章链接
    《Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite (2012)》
  

  • 概述
    KITTI数据集是现在国际上最大的自动驾驶场景下的盘算机视觉算法评测数据集。该数据集用于评测立体图像(stereo),光流(optical flow),视觉测距(visual odometry),3D物体检测(object detection)和3D跟踪(tracking)等盘算机视觉技能在车载情况下的性能。
    KITTI包罗市区、乡村和高速公路等场景收罗的真实图像数据,每张图像中最多达15辆车和30个行人,另有各种程度的遮挡与截断。
    3D目的检测数据集由7481个训练图像和7518个测试图像以及相应的点云数据构成,包罗总共80256个标记对象。
  • 数据收罗平台
Kitti的数据收罗车,顶上是一个64线的velodyne激光雷达,前面有四个摄像头分别是cam0~3,其中0和1是灰度相机,2和3是rgb相机。激光雷达的坐标系遵循右手定则,而相机坐标系遵循左手定则,如图所示。

为了天生双目立体图像,相同范例的摄像头相距54cm安装。由于彩色摄像机的分辨率和对比度不敷好,以是还使用了两个立体灰度摄像机,它和彩色摄像机相距6cm安装。

四个相机经过了严酷的位置改正,包管yz同值,x同轴,假如想举行lidar与camera的坐标系转换,默认以cam0为基准,即假如是cam0转到velodyne,就直接转,假如是cam其他转velodyne,则先要转到cam0,再转到velodyne,相机和激光的坐标转换后续会详细分析。
   详细的传感器参数如下:
2 × PointGray Flea2 grayscale cameras (FL2-14S3M-C), 1.4 Megapixels, 1/2” Sony ICX267 CCD, global shutter
2 × PointGray Flea2 color cameras (FL2-14S3C-C), 1.4 Megapixels, 1/2” Sony ICX267 CCD, global shutter
4 × Edmund Optics lenses, 4mm, opening angle ∼ 90◦, vertical opening angle of region of interest (ROI) ∼ 35◦
1 × Velodyne HDL-64E rotating 3D laser scanner, 10 Hz, 64 beams, 0.09 degree angular resolution, 2 cm distance accuracy, collecting ∼ 1.3 million points/second, field of view: 360◦ horizontal, 26.8◦ vertical, range: 120 m
1 × OXTS RT3003 inertial and GPS navigation system, 6 axis, 100 Hz, L1/L2 RTK, resolution: 0.02m / 0.1◦
  

  • 坐标系

为了方便传感器数据标定,规定坐标系方向如下 :


  • camera: x = right, y = down, z = forward
  • velodyne: x = forward, y = left, z = up
  • GPS/IMU: x = forward, y = left, z = up
1.2 下载

   

  • 数据集官网
    数据集官网下载地点
  • 百度网盘下载链接
    链接:https://pan.baidu.com/s/1-4WchJlcZ2guwcfbHqrdFw
    提取码:grys
    发起使用百度网盘的下载链接(由于文件特殊大,而且官网的下载速率很慢。)
  进入官网,下图赤色框标记的为我们必要的数据:


  • 彩色图像数据(12GB)
  • 点云数据(29GB)
  • 相机改正数据(16MB)
  • 标签数据(5MB)。
其中彩色图像数据、点云数据、相机改正数据均包罗training(7481)和testing(7518)两个部分,标签数据只有training数据。

二、数据剖析

2.0 数据集布局

按照官方给出的OpenPCDet中的KITTI数据集的组织方法,排布数据集
  1. data
  2. │──  kitti
  3. │  │── ImageSets
  4. │  │── testing
  5. │  │  ├── calib & image_2 & velodyne
  6. │  │── training
  7. │  │  ├── calib & image_2 & label_2 & planes & velodyne
复制代码


  • image_2 即2号彩色相机所拍摄的图片(.png);
  • calib对应每一帧的外参(.txt);
  • label_2是每帧的标注信息(.txt);
  • velodyne是Velodyne64所得的点云文件(.bin)
2.1 ImageSets

数据集列表信息,一样平常包罗如下3部分:


  • train.txt:训练集 列表信息
  • test.txt:测试集 列表信息
  • val.txt:验证集 列表信息
2.2 Testing & Training

2.2.1 calib

calib文件是相机、雷达、惯导等传感器的改正数据。以“000001.txt”文件为例,内容如下:
  1. P0: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 0.000000000000e+00 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
  2. P1: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.875744000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
  3. P2: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 4.485728000000e+01 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.163791000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.745884000000e-03
  4. P3: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.395242000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.199936000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.729905000000e-03
  5. R0_rect: 9.999239000000e-01 9.837760000000e-03 -7.445048000000e-03 -9.869795000000e-03 9.999421000000e-01 -4.278459000000e-03 7.402527000000e-03 4.351614000000e-03 9.999631000000e-01
  6. Tr_velo_to_cam: 7.533745000000e-03 -9.999714000000e-01 -6.166020000000e-04 -4.069766000000e-03 1.480249000000e-02 7.280733000000e-04 -9.998902000000e-01 -7.631618000000e-02 9.998621000000e-01 7.523790000000e-03 1.480755000000e-02 -2.717806000000e-01
  7. 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
复制代码


  • P0~P3                                                          P                                               r                                     e                                     c                                     t                                                           (                                     i                                     )                                                             P_{rect}^{(i)}                        Prect(i)​ :改正后的相机投影矩阵                                                          R                                               3                                     ∗                                     4                                                             R^{3*4}                        R3∗4
    0、1、2、3 代表相机的编号,0表现左边灰度相机,1右边灰度相机,2左边彩色相机,3右边彩色相机。

    其中                                                         b                                  x                                               (                                     i                                     )                                                             b_x^{(i)}                        bx(i)​表现相对于参考摄像机0的基准值(以米为单元)
  • R0_rect                                                          R                                               r                                     e                                     c                                     t                                                           (                                     i                                     )                                                             R_{rect}^{(i)}                        Rrect(i)​ :改正后的相机旋转矩阵                                                         R                                               3                                     ∗                                     3                                                             R^{3*3}                        R3∗3
    在实际盘算时,必要将该3x3的矩阵扩展为4x4的矩阵,方法为在第四行和第四列添加全为0的向量,而且将(4, 4)的索引值设为1。
  • Tr_velo_to_cam                                              (                                           T                                               v                                     e                                     l                                     o                                                           c                                     a                                     m                                                      )                                      (T_{velo}^{cam})                        (Tvelocam​) :从雷达到相机0的旋转平移矩阵 (                                                         R                                               3                                     ∗                                     4                                                             R^{3*4}                        R3∗4)
    在实际盘算时,必要将该3x4的矩阵扩展为4x4的矩阵,方法为增加第四行向量[0,0,0,1]。这个矩阵实在包罗了两个部分,其一是3x3的旋转矩阵,其二是1x3的平移向量。

  • Tr_imu_to_velo                                              (                                           T                                               i                                     m                                     u                                                           v                                     e                                     l                                     o                                                      )                                      (T_{imu}^{velo})                        (Timuvelo​) : 从惯导或GPS装置到相机的旋转平移矩阵 (                                                         R                                               3                                     ∗                                     4                                                             R^{3*4}                        R3∗4)
    假如要将激光雷达坐标系中的点x投影到左侧的彩色图像(P2)y中,可使用如下公式:

    若想将激光雷达坐标系中的点x投射到其他摄像头,只需更换P2矩阵即可(例如右边的彩色相机P3)。
  1. 1、将 Velodyne 坐标中的点 x 投影到左侧的彩色图像中 y,使用公式 y = P2 * R0_rect * Tr_velo_to_cam * x
  2. 2、将 Velodyne 坐标中的点 x 投影到右侧的彩色图像中 y,使用公式 y = P3 * R0_rect * Tr_velo_to_cam * x
  3. 3、将 Velodyne 坐标中的点 x 投影到编号为 0 的相机(参考相机)坐标系中,使用公式 R0_rect * Tr_velo_to_cam * x
  4. 4、将 Velodyne 坐标中的点 x 投影到编号为 0 的相机(参考相机)坐标系中,再投影到编号为 2 的相机(左彩色相机)的照片上,使用公式 P2 * R0_rect * Tr_velo_to_cam * x
复制代码
2.2.2 image_2

image文件以8位PNG格式存储,图集如下:

2.2.3 label_2

label文件是KITTI中object的标签和评估数据,以“000001.txt”文件为例,包罗样式如下:
  1. Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
  2. Car 0.00 0 1.85 387.63 181.54 423.81 203.12 1.67 1.87 3.69 -16.53 2.39 58.49 1.57
  3. Cyclist 0.00 3 -1.65 676.60 163.95 688.98 193.93 1.86 0.60 2.02 4.59 1.32 45.84 -1.55
  4. DontCare -1 -1 -10 503.89 169.71 590.61 190.13 -1 -1 -1 -1000 -1000 -1000 -10
  5. DontCare -1 -1 -10 511.35 174.96 527.81 187.45 -1 -1 -1 -1000 -1000 -1000 -10
  6. DontCare -1 -1 -10 532.37 176.35 542.68 185.27 -1 -1 -1 -1000 -1000 -1000 -10
  7. DontCare -1 -1 -10 559.62 175.83 575.40 183.15 -1 -1 -1 -1000 -1000 -1000 -10
复制代码
​ 每一行代表一个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轴的夹角(如下图所示,y轴垂直与屏幕)
  • 第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轴的夹角),如下图所示。
  • 第16列(浮点数):检测的置信度(score)

2.2.4 planes

  1. # Plane
  2. Width 4
  3. Height 1
  4. -1.851372e-02 -9.998285e-01 -5.362310e-04 1.678761e+00
复制代码
2.2.5 velodyne

velodyne文件是激光雷达的丈量数据(绕其垂直轴(逆时针)连续旋转),以“000001.bin”文件为例,内容如下:
  1. 8D 97 92 41 39 B4 48 3D 58 39 54 3F 00 00 00 00
  2. 83 C0 92 41 87 16 D9 3D 58 39 54 3F 00 00 00 00
  3. 2D 32 4D 42 AE 47 01 3F FE D4 F8 3F 00 00 00 00
  4. 37 89 92 41 D3 4D 62 3E 58 39 54 3F 00 00 00 00
  5. E5 D0 92 41 12 83 80 3E E1 7A 54 3F EC 51 B8 3D
  6. 7B 14 70 41 2B 87 96 3E 50 8D 37 3F CD CC 4C 3E
  7. 96 43 6F 41 7B 14 AE 3E 3D 0A 37 3F E1 7A 14 3F
  8. 2F DD 72 41 5E BA C9 3E 87 16 39 3F 00 00 00 00
  9. FA 7E 92 41 5E BA 09 3F 58 39 54 3F 00 00 00 00
  10. 66 66 92 41 EC 51 18 3F CF F7 53 3F 00 00 00 00
  11. A4 70 92 41 77 BE 1F 3F CF F7 53 3F 00 00 00 00
  12. A4 70 92 41 8D 97 2E 3F 58 39 54 3F 00 00 00 00
  13. ...
复制代码
点云数据以浮点二进制文件格式存储,每行包罗8个数据,每个数据由四位十六进制数表现(浮点数),每个数据通过空格隔开。一个点云数据由四个浮点数数据构成,分别表现点云的x、y、z、r(强度 or 反射值),点云的存储方式如下表所示:

三、数据集的下载和组织

   

  • 百度网盘下载链接
    链接:https://pan.baidu.com/s/1-4WchJlcZ2guwcfbHqrdFw
    提取码:grys
  从百度网盘下载如下框出的文件。

   其中 xxx.zip 和xxx.z01、xxx.z02、xxx.z03 是分包文件,必须全部下载后才华够解压。
  然后通过xftp把下载的压缩包全部上传到云服务器上。
分包文件的解压方法,以 data_object_image_2.zip 为例子。
  1. # 先将压缩包合并
  2. zip -s 0 data_object_image_2.zip --out image_02.zip
  3. # 再次解压
  4. unzip image_02.zip
复制代码
解压之后的文件布局如下所示。

如下所示,在kitti文件夹下新建testing和training 目次。然后把上一步解压后得到的data_object_image2/testing/image_2 文件放入到data/kitti/testing 文件夹下;把上一步解压后得到的data_object_image2/training/image_2 文件放入到data/kitti/training 文件夹下。
然后新建一个文件夹ImageSets,并进入到该文件夹下。
下载官方已经提供好的分别kitti数据集文件:test.txt train.txt val.txt trainval.txt
  1. # test.txt
  2. wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O test.txt
  3. # train.txt
  4. wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O train.txt
  5. # val.txt
  6. wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O val.txt
  7. # trainval.txt
  8. wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O trainval.txt
复制代码

终极的组织架构如下图所示:

   有时间我们大概多个项目都使用到同一个数据集,这时间可以建立软链接
  好比我的原始kitti数据集下载到了/data/zyw/project/data/kitti , 但是我在mmdetection3d/data 文件夹下必要kitti文件夹。
为了节省内存开销,我们不直接复制,而是创建软链接。
  1. cd mmdetection3d/data
  2. ln –s  /data/zyw/project/data/kitti  kitti
复制代码
四、可视化

4.1 CloudCompare软件

   CloudCompare功能强大,直接安装这个软件是最简单的可视化方法。
  

  • cloudcompare官网下载地点
    选择对应的版本举行下载

  • 或者从百度网盘下载 (winows64,CloudCompare 2.12.4)
    链接:https://pan.baidu.com/s/1RWDdMByK1trY–d05-SlHg
  • 显示-语言翻译-简体中文

提取码:zfjo


  • 点击文件-compare

    可以打开多种格式的点云文件

    可视化结果如下

4.2 PCL库

通过设置PCL来可视化点云,相对比力复杂,详细可以参考下面的博客~
【PCL1.11.0+win10+vs2019】情况设置/ 点云格式转换及可视化
参考

   参考博客:
【1】https://blog.csdn.net/i6101206007/article/details/11225682
【2】https://blog.csdn.net/u013086672/article/details/103913361

来源:https://blog.csdn.net/zyw2002/article/details/127395975
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则