KITTI数据集解读
摘要:
KITTI数据集是自动驾驶场景下的计算机视觉数据集,由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创建,包含 stereo、光流、3D物体检测等多种传感器数据。数据集由2011年采集的 urban、road、residential、campus 和 person 五种场景组成,总计180GB,每张图像最多含15辆车和30人。数据集的下载地址为 http://www.cvlibs.net/datasets/kitti/evalodometry.php,传感器配置包括2个灰度相机、2个彩色相机、一个6DOF激光雷达、一个GPS/IMU和一个4超球雷达。数据组织形式分为 'Road', 'City', 'Residential', 'Campus' 和 'Person' 五类,开发工具包包含开发环境、评估工具、映射文件和数据集介绍。深度预测模块将激光雷达点云转换为uint16 PNG图像,深度计算方法为像素值除以256。数据集还提供pose数据,用于位姿估计,文件夹地址为 http://dataset.f3322.net/datasets/kitti/。
目录
1.KITTI数据集概述
2.数据采集平台
3.Dataset详述
3.1 数据组织形式
3.2 Development Kit
3.3 GPS/IMU位姿数据
3.4 传感器标定
D_xx解释:
3.5 深度预测、深度完成模块的数据介绍
3.6 pose数据介绍
参考
1.KITTI数据集概述
KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院共同创立,是国际上规模最大的自动驾驶场景下的计算机视觉算法评测基准库。该基准库用于评估立体图像、光流、视觉测距、3D物体检测和3D跟踪等计算机视觉技术在车载环境下的性能表现。KITTI数据集包含不同场景下的真实图像数据,每张图像中最多容纳15辆车辆和30名行人,同时兼顾了复杂的遮挡和截断情况。整个数据集由389对立体图像和光流图、39.2公里视觉测距序列以及超过200,000张具有3D标注的图像组成[1],以10Hz的频率同步采集。从数据集分类来看,主要分为'Road'、'City'、'Residential'、'Campus'和'Person'五大类。在3D物体检测领域,label分为car、van、truck、pedestrian、sitting pedestrian、cyclist、tram以及misc类别。
地址: [Evaluating Odometry Performance Dataset](Kittis Visual Odometry Dataset "http://www.cvlibs.net/datasets/kitti")
相关论文:
- Geiger A, Lenz P, Urtasun R. Are we prepared for autonomous driving? The kitti vision benchmark suite is a widely recognized benchmark for evaluating autonomous driving systems[C]//2012 IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2012: 3354-3361.
- Geiger A, Lenz P, Stiller C, et al. Vision meets robotics: The kitti dataset is a valuable resource for researchers in both fields[J]. The International Journal of Robotics Research, 2013, 32(11): 1231-1237.
- Uhrig J, Schneider N, Schneider L, et al. Sparsity-invariant convolutional neural networks (CNNs) have shown promising results in handling sparse data[C]//2017 international conference on 3D Vision (3DV). IEEE, 2017: 11-20.
2.数据采集平台
如图-1所示,KITTI数据集的数据采集平台配置了两组灰度和彩色摄像头,搭配一个64线3D激光雷达,配备4个光学镜头,并配备了GPS导航系统。具体参数如下[2]:灰度摄像头每组包含2个,彩色摄像头同样为2组,3D激光雷达型号为Velodyne 64LX,镜头为4个,以及GPS导航系统1个。
- 2台PointGray Flea2黑白相机(型号:FL2-14S3M-C),每台1.4百万像素,采用1/2” Sony ICX267 CCD,配备全局快门
- 2台PointGray Flea2彩色相机(型号:FL2-14S3C-C),每台1.4百万像素,同样采用1/2” Sony ICX267 CCD,配备全局快门
- 4组Edmund Optics镜头,每组镜头4毫米焦距,开孔角度约90度,感兴趣区(ROI)垂直开孔角度约35度
- 1台Velodyne HDL-64E旋转三维激光扫描仪,扫描频率10赫兹,具有64个扫描束,分辨率0.09度角,距离精度2厘米,每秒约采集130万个点,视野范围:水平360度,垂直26.8度,最大测量距离120米
- 1套OXTS RT3003惯性导航系统,集成6轴加速度计,支持100赫兹采样率,采用L1/L2 RTK定位,定位精度0.02米/0.1度

图2展示了传感器的配置平面图。为了构建双目立体图像,相同类型的摄像头以54厘米的距离进行安装。由于彩色摄像机的分辨率和对比度较低,我们采用了两个立体灰度摄像机进行补充,它们与彩色摄像机之间的距离为6厘米。为确保传感器数据的准确标定,我们遵循以下坐标系方向设定[2] :
• Camera: x = right, y = down, z = forward
• Velodyne: x = forward, y = left, z = up
• GPS/IMU: x = forward, y = left, z = up

图-2 传感器设置
3.Dataset详述
图-3呈现了KITTI数据集的代表性样本,将其划分为'Road'、'City'、'Residential'、'Campus'以及'Person'五大类。KITTI数据集的样本被采集于2011年,共计5天,其数据总量为180GB。

图-3 KITTI数据集的样本,展现KITTI数据集的多样性。
3.1 数据组织形式
论文[2]中提及的数据组织形式可能属于较早版本,与KITTI数据集官网公开的形式存在差异,本文将对此进行简要介绍。如图所示,一个视频序列的所有传感器数据均存储于data_drive文件夹中,其中date和drive为占位符,分别表示采集数据的时间和视频编号。时间戳则记录在Timestamps.txt文件中。

图-4 数据组织形式
下载地址:有位网友将其放置在自己的服务器上,方便大家下载。该链接表示赞赏:http://dataset.f3322.net:666/share/kitti/



3.2 Development Kit
KITTI的各个子数据集都提供了一个开发工具包( toolkit),主要包含 cpp目录、matlab目录、mapping目录以及 readme文件。图中以 object detection任务的 devkit_object文件夹为例展示了这一结构。 cpp目录下主要包含评估模型的源代码 evaluate_object.cpp。 mapping目录中的文件用于建立训练集与原始数据集之间的映射关系,从而允许开发者同时使用激光雷达点云、GPS数据、右侧面板彩色摄像机数据以及灰度摄像机图像等多模态数据。 matlab目录中的工具箱提供了读写标签、绘制2D/3D标注框以及运行演示文稿等功能。 readme文件则详细说明了该子数据集的数据格式、基准测试指标以及评估方法。
devkit_object
|── cpp
│ |── evaluate_object.cpp
│ └── mail.h
|── mapping
│ |── train_mapping.txt
│ └── train_rand.txt
|── matlab
│ |── computeBox3D.m
│ |── computeOrientation3D.m
│ |── drawBox2D.m
│ |── drawBox3D.m
│ |── projectToImage.m
│ |── readCalibration.m
│ |── readLabels.m
│ |── run_demo.m
│ |── run_readWriteDemo.m
│ |── run_statistics.m
│ |── visualization.m
│ └── writeLabels.m
3.3 GPS/IMU位姿数据
OXTS (GPS/IMU):
对于每一帧,我们将30个不同的GPS/IMU数据记录在文本文件中,涉及地理坐标、高度、全球定位、速度、加速度、角速率、精度和卫星信息。加速度和角速率均采用两个坐标系进行表示,其中一个是与车体坐标系(x,y,z)绑定的,另一个则对应地面切面坐标系(f,l,U)。在与OXTS设备的短暂(约1秒)通信中断时,我们采用线性插值方法填充数据,并将最后三个记录标记为'-1'以表示缺失的信息。dataformat.txt文件中包含更多详细信息。此外,转换工具程序也包含在开发工具包中。
以下是改写后的文本
3.4 传感器标定
在开发基于KITTI多传感器数据的融合算法时,这部分内容扮演着关键角色。在raw data数据集中,提供了三个标定文件,具体包括:calib_cam_to_cam.txt,用于相机间的标定,记录了以下关键信息:S_xx记录了图像在未校正状态下的尺寸信息,具体包括宽度和高度;K_xx则存储了相机校正前的内参数矩阵,其大小为3x3;D_xx则包含了校正前相机的畸变系数向量,向量大小为1x5;R_xx和T_xx分别表示相机的外参数,其中R_xx为3x3旋转矩阵,T_xx为3x1平移向量;S_rect_xx则记录了校正后相机图像的尺寸参数;R_rect_xx为3x3的旋转矩阵,用于确保图像平面共面;P_rect_xx则为3x4的投影矩阵,用于将校正后的相机00坐标转换为其他相机的图像像素坐标。值得注意的是,在同步校正数据集中,通常只需关注P_rect_xx矩阵和R_rect_00矩阵,因为它们在图像处理和坐标转换中起着关键作用。
参考:KITTI数据集测试中的3个 camera参数校准( "KITTI数据集测试 - 3 calib 相机参数")
D_xx解释:
图像的畸变主要有两种:径向畸变和切向畸变。
径向畸变:中心点的畸变程度最低,随着半径的增大,畸变程度也随之增强,具体表现为枕形畸变和桶形畸变两种类型。

径向畸变矫正公式如下(泰勒级数展开式前3项):

其中

是理想坐标,

和

是畸变后的像素点坐标,且:

切向畸变 :在透镜与成像平面不平行时就会产生,类似于透视变换。

切向畸变的矫正公式如下:

两种畸变最后都归结到五个参数:

;知道这五个参数后即可完成畸变的矫正。
calibration file between laser雷达 and camera——实现激光雷达与相机间的对准关系:
calib_img_to_velo.txt:GPS/IMU与激光雷达间的对准关系:其中,R矩阵:3×3的旋转矩阵,T向量:3×1的平移向量。
3.5 深度预测、深度完成模块的数据介绍
激光数据以某种格式存储为png类型(uint16)与真实距离(米)之间存在转换关系。通过将png图像的像素值除以256进行计算,可以得到深度信息。来源:The KITTI Vision Benchmark Suite。
- Obtain the development package (48 K bytes) 中的 README file *
Depth maps derived from annotated and raw Velodyne scans are stored as 16-bit PNG images, accessible through MATLAB, libpng++, or the Pillow library (from PIL import Image). A value of 0 signifies an invalid pixel, indicating the absence of ground truth data or the absence of an estimation for that pixel. The depth in meters can be calculated by converting the 16-bit value to a float and dividing it by 256.0.
disp(u,v) = ((float)I(u,v))/256.0;
valid(u,v) = I(u,v)>0;
KITTI平台上的3D激光雷达点云数据(通过官网获取的原始文件中的同步文件下的)bin格式文件(输入文件),经过转换处理后生成pcd格式文件(输出文件)并进行存储。
// load point cloud
fstream input(infile.c_str(), ios::in | ios::binary);
if(!input.good()){
cerr << "Could not read file: " << infile << endl;
exit(EXIT_FAILURE);
}
input.seekg(0, ios::beg);
pcl::PointCloud<PointXYZI>::Ptr points (new pcl::PointCloud<PointXYZI>);
int i;
for (i=0; input.good() && !input.eof(); i++) {
PointXYZI point;
input.read((char *) &point.x, 3*sizeof(float));
input.read((char *) &point.intensity, sizeof(float));
points->push_back(point);
}
input.close();
cout << "Read KTTI point cloud with " << i << " points, writing to " << outfile << endl;
pcl::PCDWriter writer;
// Save DoN features
writer.write<PointXYZI> (outfile, *points, false);
3.6 pose数据介绍
数据集的具体位置信息位于
在文件夹 devkit_odometry/devkit/reame.txt 中说明:在poses目录下,包含00.txt至10.txt共11个序列,每个文件包含Nx12个表格,其中N表示帧数。每个文件中的Nx12表格用于表示左相机(推测为Cam 0,左侧灰度相机)在不同时间点的位姿信息。通过转移矩阵,每个时间点的左相机坐标系中的点会被转换为第0帧的坐标系中的位置。转移矩阵中的平移分量则表示该相机相对于第0帧的位置信息。
Folder named 'poses': This folder houses the ground truth poses, representing the trajectory of the first 11 sequences. This dataset is valuable for training and refining your method. Each file xx.txt contains a N×12 table, where N denotes the number of frames in the sequence. Row i represents the ith pose in the left camera's coordinate system (with z-axis pointing forward) using a 3×4 transformation matrix. These matrices are stored in row-wise order (with the first entries corresponding to the first row), enabling the projection of a point from the ith coordinate system into the first (=0th) coordinate system. Consequently, the translational component (3×1 vector in column 4) indicates the pose of the left camera's coordinate system in the ith frame relative to the first (=0th) frame.
在ORB-SLAM3算法中,相机位姿(camera pose)的表示采用Tcw,即从世界坐标系的点Pw到相机坐标系的点Pc的变换矩阵。值得注意的是,此处的camera pose的逆是Twc,即Pw = Twc * Pc。在实际应用中,当保存位姿信息时,通常以第一帧的相机坐标系作为世界坐标系的参考(即0,0,0,0,0,0,1),保存的内容是第i帧相机坐标系下的点到第0帧(世界坐标系)的变换矩阵,即Twc(相机位姿的逆)。
示例:sequence 00 的poses(轨迹)00.txt

参考
无人驾驶之KITTI数据集介绍与应用(二)——官方matlab代码使用与解读
KITTI数据集简介与使用
KITTI数据集简介及应用,以及其国内下载地址。该数据集基于KITTI平台构建,旨在为自动驾驶等技术领域提供高质量的3D视觉数据。具体而言,KITTI数据集包含多辆汽车在城市道路场景中的多帧图像、标注信息以及车辆运动数据。这些数据经过严格标注,能够帮助研究者进行车辆检测、跟踪、语义分割等任务的算法开发。此外,该数据集还提供了丰富的标注信息,便于模型训练和评估。至于下载地址,用户可以通过以下链接获取:
