摘要:本文融合了 Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite 和 Vision meets Robotics: The KITTI Dataset 两篇论文的内容,主要介绍 KITTI 数据集概述,数据采集平台,数据集详细描述,评价准则以及具体使用案例。本文对 KITTI 数据集提供一个较为详细全面的介绍,重点关注利用 KITTI 数据集进行各项研究与实验。

KITTI 数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。该数据集用于评测立体图像 (stereo),光流(optical flow),视觉测距(visual odometry),3D 物体检测(object detection) 和 3D 跟踪 (tracking) 等计算机视觉技术在车载环境下的性能。KITTI 包含市区、乡村和高速公路等场景采集的真实图像数据,每张图像中最多达 15 辆车和 30 个行人,还有各种程度的遮挡与截断。整个数据集由 389 对立体图像和光流图,39.2 km 视觉测距序列以及超过 200k 3D 标注物体的图像组成[1] ,以 10Hz 的频率采样及同步。总体上看,原始数据集被分类为’Road’, ’City’, ’Residential’, ’Campus’ 和 ’Person’。对于 3D 物体检测,label 细分为 car, van, truck, pedestrian, pedestrian(sitting), cyclist, tram 以及 misc 组成。

如图 - 1 所示,KITTI 数据集的数据采集平台装配有 2 个灰度摄像机,2 个彩色摄像机,一个 Velodyne 64 线 3D 激光雷达,4 个光学镜头,以及 1 个 GPS 导航系统。具体的传感器参数如下[2] :

  • 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◦
    KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图1
                        图 - 1 数据采集平台
      如图 - 2 所示为传感器的配置平面图。为了生成双目立体图像,相同类型的摄像头相距 54cm 安装。由于彩色摄像机的分辨率和对比度不够好,所以还使用了两个立体灰度摄像机,它和彩色摄像机相距 6cm 安装。为了方便传感器数据标定,规定坐标系方向如下[2] :
    • Camera: x = right, y = down, z = forward
    • Velodyne: x = forward, y = left, z = up
    • GPS/IMU: x = forward, y = left, z = up
    KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图2
                        图 - 2 传感器设置

图 - 3 展示了 KITTI 数据集的典型样本,分为 ’Road’, ’City’, ’Residential’, ’Campus’ 和’Person’五类。原始数据采集于 2011 年的 5 天,共有 180GB 数据。
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图3

图 - 3 KITTI 数据集的样本,展现 KITTI 数据集的多样性。

3.1 数据组织形式

论文[2] 中提及的数据组织形式,可能是早期的版本,与目前 KITTI 数据集官网公布的形式不同,本文稍作介绍。
如图 - 4 所示,一个视频序列的所有传感器数据都存储于 data_drive 文件夹下,其中 date 和 drive 是占位符,表示采集数据的日期和视频编号。时间戳记录在 Timestamps.txt 文件。
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图4

图 - 4 数据组织形式
  对于从 KITTI 数据集官网下载的各个分任务的数据集,其文件组织形式较为简单。以 Object detection 为例,下图是 Object Detection Evaluation 2012 标准数据集中 left color images 文件的目录结构,样本分别存储于 testing 和 training 数据集。

data_object_image_2
|── testing
│ └── image_2
└── training
└── image_2

下图是 training 数据集的 label 文件夹目录结构。

training/
└── label_2

3.2 Annotations

KITTI 数据集为摄像机视野内的运动物体提供一个 3D 边框标注(使用激光雷达的坐标系)。该数据集的标注一共分为 8 个类别:’Car’, ’Van’, ’Truck’, ’Pedestrian’, ’Person (sit- ting)’, ’Cyclist’, ’Tram’ 和’Misc’ (e.g., Trailers, Segways)。论文[2] 中说明了 3D 标注信息存储于 date_drive_tracklets.xml,每一个物体的标注都由所属类别和 3D 尺寸(height,weight 和 length)组成。当前数据集的标注存于每种任务子数据集的 label 文件夹中,稍有不同。
  为了说明 KITTI 数据集的标注格式,本文以 Object detection 任务的数据集为例。数据说明在 Object development kit 的 readme.txt 文档中。从标注数据的链接 training labels of object data set (5 MB) 下载数据,解压文件后进入目录,每张图像对应一个. txt 文件。一帧图像与其对应的. txt 标注文件如图 - 5 所示。
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图5

图 - 5 object detection 样本与标注
  为了理解标注文件各个字段的含义,需要阅读解释标注文件的 readme.txt 文件。该文件存储于 object development kit (1 MB) 文件中,readme 详细介绍了子数据集的样本容量,label 类别数目,文件组织格式,标注格式,评价方式等内容。下面介绍数据格式的 label 描述:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图6

注意,’DontCare’ 标签表示该区域没有被标注,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算 precision),将本来是目标物体但是因为某些原因而没有标注的区域统计为假阳性 (false positives),评估脚本会自动忽略’DontCare’ 区域的预测结果。

3.3 Development Kit

KITTI 各个子数据集都提供开发工具 development kit,主要由 cpp 文件夹,matlab 文件夹,mapping 文件夹和 readme.txt 组成。下图以 object detection 任务的文件夹 devkit_object 为例,可以看到 cpp 文件夹主要包含评估模型的源代码 evaluate_object.cpp。Mapping 文件夹中的文件记录训练集到原始数据集的映射,从而开发者能够同时使用激光雷达点云,gps 数据,右边彩色摄像机数据以及灰度摄像机图像等多模态数据。Matlab 文件夹中的工具包含读写标签,绘制 2D/3D 标注框,运行 demo 等工具。Readme.txt 文件非常重要,详述介绍了某个子数据集的数据格式,benchmark 介绍,结果评估方法等详细内容。

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

4.1 stereo 与 visual odometry 任务

KITTI 数据集针对不同的任务采用不同的评价准则。对于立体图像和光流 (stereo and optical flow),依据 disparity 和 end-point error 计算得到平均错误像素数目(average number of erroneous pixels)。
  对于视觉测距和 SLAM 任务 (visual odometry/SLAM),根据轨迹终点(trajectory end-point)的误差进行评估。传统的方法同时考虑平移和旋转的误差,KITTI 分开评估[1] :
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图7

图 - 6 Stereo 和 optical flow 的预测结果与评估

4.2 3D 物体检测和方向预测

目标检测需要同时实现目标定位和目标识别两项任务。其中,通过比较预测边框和 ground truth 边框的重叠程度 (Intersection over Union,IoU) 和阈值 (e.g. 0.5) 的大小判定目标定位的正确性;通过置信度分数和阈值的比较确定目标识别的正确性。以上两步综合判定目标检测是否正确,最终将多类别目标的检测问题转换为 “某类物体检测正确、检测错误” 的二分类问题,从而可以构造混淆矩阵,使用目标分类的一系列指标评估模型精度。
  KITTI 数据集采用文献[3] 用到的平均正确率 (Average Precision,mAP) 评估单类目标检测模型的结果。PASCAL Visual Object Classes Challenge2007 (VOC2007)[3] 数据集使用 Precision-Recall 曲线进行定性分析,使用 average precision(AP) 定量分析模型精度。物体检测评估标准对物体漏检和错检进行惩罚,同时规定对同一物体重复且正确的检测只算一次,多余的检测视为错误(假阳性)。
  对于每一张样本和某一个给定类型的检测器,算法输出预测结果 ,表示检测出图像中有个物体,每个物体的位置信息和置信度分布是和。
  为了评估边界框定位的准确性,使用检测框与 ground truth 框之间的重合度来度量:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图8

如果则说明检测到的边框和图像上该类的 ground truth 匹配,此时。为了防止重复检测,如果边框与 ground truth 多个边框重合度都大于 50%,取重合度最大的视为对的匹配。检测算法对真实物体的重复检测,只算其中一次为正确预测,其余的重复预测视为错误检测。
  对于一个给定类别,N 是该类所有图像上的真实物体数目。物体检测任务采用 PR 曲线和 AP 值评估模型精度,给定不同阈值 t,得到不同的召回率和精确率,从而可以绘制 P-R 曲线,计算每个检测器的 AP 值:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图9

评价精确率 AP 是 P-R 曲线的积分值,当 t 是离散的情况时,AP 就是不同 t 的召回率对应的精确率的平均值。为了简化计算,PASCAL VOC2007 采用插值的方法,使用 11 个等间距 recall 上的精确值的平均值作为分类器的 AP。召回率取值[0,0.1,…,1],计算公式如下:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图10

每个召回率 r 上的精确值由大于 r 所对应精确率的最大值插值来决定:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图11

对于 KITTI 目标检测任务,仅仅评估目标高度大于 25pixel 的预测结果,将易混淆的类别视为同一类以减少假阳性 (false positives) 率,并且使用 41 个等间距 recall 上的精确值的平均值近似计算分类器的 AP。
对于物体方向预测,文献[1] 提出了一种新颖的方法:平均方向相似性,Average Orientation Similarity (AOS)。该指标被定义为:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图12

其中,r 代表物体检测的召回率 recall。在因变量 r 下,方向相似性 s∈[0,1]被定义为所有预测样本与 ground truth 余弦距离的归一化:
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图13

其中 D(r) 表示在召回率 r 下所有预测为正样本的集合,∆θ(i) 表示检出物体 i 的预测角度与 ground truth 的差。为了惩罚多个检出匹配到同一个 ground truth,如果检出 i 已经匹配到 ground truth(IoU 至少 50%)设置δi = 1,否则δi = 0。

5. 数据使用实践

KITTI 数据集的标注信息更加丰富,在实际使用中可能只需要一部分字段,或者需要转换成其他数据集的格式。例如可以将 KITTI 数据集转换成 PASCAL VOC 格式,从而更方便地使用 Faster RCNN 或者 SSD 等先进的检测算法进行训练。转换 KITTI 数据集需要注意源数据集和目标数据集的格式,类别标签的重新处理等问题,实现细节建议参考 Jesse_Mx[4] 和 github 上 manutdzou 的开源项目[5] ,这些资料介绍了转换 KITTI 数据集为 PASCAL VOC 格式,从而方便训练 Faster RCNN 或者 SSD 等模型。

[1] Andreas Geiger and Philip Lenz and Raquel Urtasun. Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite. CVPR, 2012
[2] Andreas Geiger and Philip Lenz and Christoph Stiller and Raquel Urtasun. Vision meets Robotics: The KITTI Dataset. IJRR, 2013
[3] M. Everingham, L.Van Gool, C. K. I.Williams, J.Winn, and A. Zisserman. The PASCAL Visual Object Classes Challenge 2011 (VOC2011) Results.
[4] Jesse_Mx.SD: Single Shot MultiBox Detector 训练 KITTI 数据集(1).
http://blog.csdn.net/jesse_mx/article/details/65634482
[5]manutdzou.manutdzou/KITTI_SSD.https://github.com/manutdzou/KITTI_SSD
附录
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图14

图 - 7 不同类别物体在数据集中出现的频率 (上图);
对于两个主要类别 (车辆,行人) 主要的方向统计直方图(下图)
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图15

图 - 8 每张图中不同类别物体出现频率统计。
KITTI数据集简介与使用_Solomon1558的专栏-CSDN博客 - 图16

图 - 9 分别为速度,加速度(排除静止状态)统计直方图;视频序列长度统计直方图;每种场景 (e.g., Campus, city) 的帧数统计直方图。
https://blog.csdn.net/solomon1558/article/details/70173223