KITTI数据集是移动机器人和自动驾驶领域的重要资源,由德国卡尔斯鲁厄理工学院和美国丰田技术研究院于2012年共同创建。该数据集通过多种车载传感器,采集真实场景下的图像和点云数据,以及其他环境信息,旨在支持自动驾驶算法的开发和评估。
KITTI数据集配备了双目彩色相机、灰度相机、光学镜片、64线激光雷达和组合导航系统,可获取全方位的图像和点云数据,以及车辆位置、方向和速度信息,KITTI传感器配置如图2-1所示。数据集包含多种道路场景的训练和测试数据,标注主要集中在汽车、行人和骑行者等目标上。
图2-1 KITTI传感器配置
KITTI数据集已成为自动驾驶算法研究的重要基准,广泛应用于物体检测、语义分割和行为预测等任务。其丰富的传感器配置和精准的标注信息为自动驾驶技术的发展提供了有力支持。
本节将对KITTI数据集进行详细说明。
在官网界面,你可以根据需要下载以下数据。
1)左视图数据:目标数据集的左侧彩色图像数据,大小约为12GB。这些数据主要适用于单目或双目视觉模型。如果你只关注基于单目图像或激光雷达点云的3D目标检测,那么只需下载这部分数据。
2)右视图数据:与左视图数据相对应,用于构建双目视觉模型。若你的研究或应用需要双目视觉信息,请同时下载右视图数据。
这部分数据由激光雷达捕获,反映场景的三维结构信息,总大小约为29GB。如果你的算法或模型需要使用到激光雷达信息,那么这部分数据是必需的。
这是一个较小的数据集(约5MB),但包含了训练数据集中目标的所有标注信息,以及相机与激光雷达之间的转换矩阵。对需要进行监督学习或需要校准多传感器数据的任务来说,这部分数据都是至关重要的。请确保在下载主数据集的同时,也下载这部分数据以支持研究或开发工作。
KITTI数据集包含了原始及经过同步和校正处理的双目灰度图像序列(以PNG格式存储,分辨率约1240×370)、3D激光雷达点云数据(每帧约含10万个点,以二进制bin格式存储)、3D GPS/IMU数据(涵盖位置、速度、加速度等,以txt格式存储)、校正文件(涉及相机参数及其与GPS/IMU、激光雷达间的转换关系,同样以txt格式存储)以及3D目标检测标签(包含汽车、行人等多个类别,以XML格式存储)。
在自动驾驶领域,KITTI数据集是一个广泛使用的、用于多种感知任务的标准数据集。其文件夹结构经过精心设计,便于研究者高效地存储、访问和使用数据。以下是对KITTI数据集文件夹结构的详细介绍。
1)KITTI_DATASET_ROOT:数据集的根目录,也是包含训练和测试数据的主要文件夹。
2)training:包含7481个训练数据样本。这些数据通常用于训练机器学习模型或进行其他形式的数据分析。
3)image_2(训练场景):存储用于可视化的彩色图像。这些图像对理解场景内容、调试算法和展示结果非常有帮助。
4)calib(训练场景):包含相机的内外参数。这些信息对于对齐图像数据与其他传感器(如激光雷达)的数据来说至关重要,能够在三维空间中准确理解场景。
5)label_2:包含用于训练和评估的标签数据。标签通常包括物体(如车辆、行人等)的边框位置、类别和其他属性,是监督学习中的关键元素。
6)velodyne(训练场景):存储原始的激光雷达数据。这些数据提供了场景的三维结构信息,对障碍物检测、场景理解等任务至关重要。
7)velodyne_reduced(训练场景):一个空目录,通常用于存储基于图像大小进行视锥体缩减处理后的激光雷达数据。这种缩减有助于减少数据处理的计算量,同时仍然能够保留足够的信息来执行准确的感知任务。不过在使用这个目录前需要预先填充相应的缩减数据。
8)testing:包含7518个测试数据样本。这些数据用于评估训练好的模型的性能,通常不包含在训练过程中。
9)image_2(测试场景):与训练数据中的image_2文件夹类似,该文件夹存储测试数据的彩色图像,用于可视化和结果展示。
10)calib(测试场景):同样包含相机的内外参数信息,这些信息对测试数据的处理同样重要。
11)velodyne(测试场景):存储测试数据的原始激光雷达扫描信息,用于在三维空间中进行精确的场景感知。
12)velodyne_reduced(测试场景):也是一个空目录,用于存储缩减后的激光雷达数据。在处理测试数据时,这个目录也需要预先填充相应的缩减数据。
KITTI数据集的文件夹结构清晰、有序,使得研究者能够轻松地访问和使用所需的数据。同时,数据集提供了丰富的标注信息和多模态传感器数据(如图像和点云数据),为自动驾驶领域的感知算法研究提供了有力的支持。
在自动驾驶数据集中,一些关键文件扮演着重要角色。其中,时间戳文件(timestamps.txt)能够确保不同传感器数据的时序一致性,实现精确对齐。图像文件夹(image_0x)存储经过预处理和校正的相机图像,可以减少无关信息并降低计算量。GPS/IMU数据(oxts/frame_number.txt)提供车辆动态行为和场景上下文。激光雷达点云数据(velodyne_points)呈现丰富的三维场景结构,支持障碍物检测等任务。标注文件(tracklet_labels.xml)包含物体类别、大小和位置信息,对监督学习至关重要。校正参数压缩文件(data_calib.zip)确保多传感器数据的一致性和准确性。相关坐标值示意图有助于直观理解激光雷达点云数据,如图2-2所示。
图2-2 坐标值示意图
KITTI数据集的物体标注文件包括图像数据信息和点云数据信息。
具体而言,目标标注涉及图像或点云上的数据标注。转换矩阵用于处理多传感器之间的位置关系,以实现2D图像目标和3D点云目标之间的双向转换,多传感器的安装位置如图2-3所示。
图2-3 多传感器的安装位置
式(2-1)描述了一个完整的从点云坐标系到最终图像坐标系的转换过程,涵盖了空间转换、畸变校正和内参转换等关键步骤。
其中:
x 是用来表示在激光雷达坐标系中的点的向量,其中包括点的三维坐标和一个比例因子(通常设为1)。
是一个4×4的转换矩阵,用于表示从激光雷达坐标系到未校准相机坐标系的转换。它包括旋转和平移部分,可以将激光雷达坐标系中的点转换到相机坐标系中。
是一个畸变校正矩阵,用于图像的成像平面校准。乘以这个矩阵后,原本点的坐标被转换到已经校准后的相机坐标系下,实现对原本相机坐标的校正。
是相机的内参矩阵,包含相机的焦距、主点坐标等信息。乘以这个矩阵后,可以将校准后的相机坐标转换为最终的图像坐标 y 。
整个公式的计算过程是从右到左的,首先将点从激光雷达坐标系转换到未校准的相机坐标系,然后进行校正,最后投影到图像平面上。这是3D点云数据与图像数据融合的关键步骤。
图像数据的标注按场景提供,每一行表示一个物体的标注。从标注文件夹中的readme.txt文件中可以了解如何获取标注数据的txt文件,以及标注文件各个字段的含义。readme.txt文件详细介绍了子数据集的样本容量、label类别数目、文件组织格式、标注格式以及评价方式等内容。
文件的标注也是根据特定场景提供的,每个文件名都对应一个唯一的场景编号,而文件的内容则描述了该场景中的各个物体。以编号为000000的场景为例,这是一个未经标注的PNG图片文件,如图2-4所示。
图2-4 未标注信息的PNG图片
文件中的每一行都代表一个物体的标注,如图2-5所示。其中,第二行“Car 0.00 2 1.75...”详细描述了当前场景中车辆的位置、尺寸、被遮挡或被截断的情况等。这种标注方式允许研究人员准确地理解和分析场景中的物体,从而有助于开发和测试相关算法和模型。
图2-5 000009.txt
下面以000009.txt文件的第一行标注数据为例进行具体分析和说明。
1)Car:此字段表示被标注物体的类别。Car表示该物体是一辆车。
2)0.00:此字段表示当前标注物体被截断的程度。数值越高,表示截断越严重。此标注依赖于标注人员的主观经验。
3)0:此字段表示当前标注物体被遮挡的程度。遮挡的标注是一系列离散值。0表示无遮挡,1表示部分遮挡,2表示严重遮挡,3表示由于距离过远,遮挡状况不明。此标注同样依赖于标注人员的主观经验。
4)-1.50:此字段以弧度值表示,描述当前标注物体与相机之间的夹角,即观测角度。
5)601.96 177.01 659.15 229.51:这4个数值作为整体,用来标注一个2D的边界框,表示物体在图像中的位置。前两个值表示当前框的左上角坐标,后两个值表示当前框的右下角坐标。
6)1.61 1.66 3.20:此字段表示当前标注物体的3D尺寸,包括目标的高度、宽度和长度。标注参考单位为米。
7)0.70 1.76 23.88:此字段表示当前标注物体在三维场景下的中心点坐标。
8)-1.48:此字段表示物体在该位置以此类推存在的概率,即置信度得分。这是网络预测后需要提供的结果。
点云数据是通过激光照射到物体表面并反射回来而产生的一组信息,通常包括三维空间坐标( x , y , z )和反射率信息。
Velodyne 3D激光扫描数据通常存储在名为velodyne_points的文件夹中。每个扫描数据都以尺寸为 N ×4的矩阵形式存储在二进制文件中,以节省存储空间。其中 N 代表激光点云中点的个数。这个矩阵结构由浮点值组成,其中前三个值代表 x 、 y 和 z 坐标,第4个值代表反射率信息(如反射强度)。这些值按行对齐存储,即矩阵中的前4个值对应第一个测量值。
在数据读取方面,有几个关键步骤。
1)由于每次扫描可能具有不同的点数,因此在读取数据之前,必须根据文件大小确定扫描点数。
2)为了实现数据读取,需要分配一个缓冲区,并将指针设置为 x 、 y 、 z 和反射率信息。
3)从二进制文件中加载点云数据,并将每个点推入点云数据结构中。
这一系列操作能够确保点云数据的准确读取和存储,为后续的分析和处理打下基础。通过这种方式,点云数据不仅捕获了物体表面的几何形状,还捕获了物体表面的反射特性,从而为各种应用,如三维重建、物体识别和导航等,提供丰富的信息。
以某一场景的点云数据文件为例,如图2-6所示,每一行代表一个点,每个点由4个值组成。
图2-6 点云数据文件
通过这些数据,我们可以观察到以下特点。
1)空间分布: x 坐标的范围从57.388到76.535, y 坐标的范围从4.620到7.007, z 坐标的范围从2.161到2.802。这些坐标描述了点云在三维空间中的分布。
2)反射强度:大部分点的反射强度为0.00,但也有一些点的反射强度略有不同,例如0.07、0.15和0.10。反射强度可以提供有关物体表面材质的信息。
3)结构信息:通过 x 、 y 和 z 坐标,我们可以推断出点云的几何结构和形状。例如,连续的点可能代表物体表面的一部分。
4)可能的异常值:某些点的坐标可能与周围点的坐标有显著差异,这可能表示存在噪声或其他异常情况。
总体而言,这些点云数据为三维重建、物体识别和导航等任务提供了丰富的信息。
KITTI标定(校准)文件的主要目的是将激光雷达坐标系中测得的点云坐标转换到相机坐标系中。这些相关参数被存储在data object calib目录中,该目录下包括7481个训练标定文件和7518个测试标定文件。
标定文件采用文本文件(txt)格式进行存储,并按以下结构组织。
1)训练标定文件:存储在“data_object_calib/training/calib”目录下,文件名格式为“xxxxxx.txt”,其中xxxxxx代表具体的文件编号,共包含7481个训练标定文件。
2)测试标定文件:存储在“data_object_calib/testing/calib”目录下,文件名格式同样为xxxxxx.txt,共包含7518个测试标定文件。
这些标定文件为KITTI数据集中的点云数据与图像数据之间的转换提供了必要的参数和转换矩阵,从而确保了不同传感器数据之间的一致性和准确性,为后续的分析和处理提供了基础。
当前KITTI数据集标注的噪声来源一般是由标注人员的主观差异所引发的标注错误。