视觉与机器人:KITTI数据集
视觉与机器人:KITTI数据集
https://www.mrt.kit.edu/z/publ/download/2013/GeigerAl2013IJRR.pdf
摘要——提出了一个从大众旅行车上捕获的新数据集,用于移动机器人和自动驾驶研究。总的来说,使用各种传感器模式,如高分辨率彩色和灰度立体相机、Velodyne 3D激光扫描仪和高精度GPS/IMU惯性导航系统,在10-100 Hz的频率下记录了6个小时的交通场景。场景多种多样,捕捉真实世界的交通状况,从农村地区的高速公路到有许多静态和动态对象的市中心场景。数据经过校准、同步和时间戳,并提供校正后的原始图像序列。数据集还包含3D轨迹形式的对象标签,为立体、光流、对象检测和其他任务提供在线基准。本文介绍了记录平台、数据格式和提供的实用程序。
索引术语——数据集、自动驾驶、移动机器人、现场机器人、计算机视觉、相机、激光、GPS、基准、立体声、光流、SLAM、物体检测、跟踪、KITTI。
I.简介
KITTI数据集是在德国卡尔斯鲁厄及其周围行驶时从移动平台上记录的(图1)(图2)。它包括相机图像、激光扫描、高精度GPS测量和来自组合GPS/IMU系统的IMU加速度。该数据集的主要目的是推动面向自动驾驶的计算机视觉和机器人算法的发展。虽然介绍性论文主要关注基准、它们的创建和用于评估最先进的计算机视觉方法,但在这里,通过提供原始数据本身的技术细节来补充这些信息。提供了关于如何访问数据的精确说明,并对传感器的局限性和常见陷阱进行了评论。
数据集可以从下载http://www.cvlibs.net/datasets/kitti.
二、传感器设置
传感器设置如图3所示:
•2×PointGray Flea2灰阶相机(FL2-14S3M-C),140万像素,1/2“索尼ICX267 CCD,全局快门
•2×PointGray Flea2彩色相机(FL2-14S3C-C),140万像素,1/2“索尼ICX267 CCD,全局快门
•4×Edmund Optics镜头,4mm,打开角度~90◦, 感兴趣区域的垂直打开角度(ROI)~35◦
•1×Velodyne HDL-64E旋转3D激光扫描仪,10 Hz,64束,0.09度角分辨率,2厘米距离精度,每秒采集约130万点,视场:360◦ 水平,26.8◦ 垂直,范围:120米
•1×OXTS RT3003惯性和GPS导航系统,6轴,100 Hz,L1/L2 RTK,分辨率:0.02m/0.1◦
注意,由于拜耳模式插值处理,彩色相机在分辨率方面缺乏,并且对光不太敏感。这就是为什么使用两个立体相机装备的原因,一个用于灰度,另一个用于彩色。两台立体摄像设备的基线约为54厘米。车辆行李箱中装有一台PC,配有两个六核Intel XEON X5650处理器和一个容量为4兆字节的减震RAID 5硬盘存储。计算机运行Ubuntu Linux(64位)和一个实时数据库来存储传入的数据流。
III、 数据集
本文中描述的原始数据可以从http://www.cvlibs.net/datasets/kitti并且包含总录音的约25%。原因是,主要带有3D tracklet注释的数据已经上线,尽管会根据要求提供更多数据。此外,已经删除了作为基准测试集一部分的所有序列。原始数据集分为“道路”、“城市”、“住宅”、“校园”和“个人”类别。示例框架如图5所示。对于每个序列,提供原始数据、3D边界框轨迹形式的对象注释和校准文件,如图4所示。录音发生在2011年9月26日、28日、29日、30日和10月3日白天。提供的数据的总大小为180 GB。
图1. 录制平台。大众帕萨特旅行车配备了四个视频摄像头(两个彩色和两个灰度摄像头)、一个旋转3D激光扫描仪和一个GPS/IMU组合惯性导航系统。
图2. 录音区。这张图显示了在德国卡尔斯鲁厄大都市地区的GPS记录。颜色对GPS信号质量进行编码:红色轨道使用RTK校正以最高精度记录,蓝色表示没有校正信号。由于没有可用的GPS信号,数据集中已排除了黑跑。
A.数据描述
序列的所有传感器读数都被压缩到一个名为date_drive.zip的文件中,其中日期和驱动器是记录日期和序列号的占位符。
目录结构如图4所示。除了原始记录(“原始数据”)外,还在数据集网站上提供后处理数据(“同步数据”),即校正和同步的视频流。
时间戳存储在Timestamps.txt中,帧传感器读数提供在相应的数据子文件夹中。timestamps.txt中的每一行都由以小时、分钟和秒为单位的日期和时间组成。由于Velodyne激光扫描仪具有“滚动快门”,因此为该传感器提供了三个时间戳文件,一个用于旋转的开始位置(timestamps_start.txt),一个为旋转的结束位置(timestamps_end.txt),另一个用于激光扫描仪正前方并触发相机的时间(timestamps.txt)。
a) 图像:彩色和灰度图像都使用8位PNG文件进行无损压缩存储。发动机罩和天空区域已被裁剪。为了简化数据处理,还提供了经过校正的图像。校正后的图像大小取决于校准参数,平均值为~0.5 Mpx。校正前的原始图像也可用。
b) OXTS(GPS/IMU):对于每一帧,在一个文本文件中存储30个不同的GPS/IMU值:地理坐标,包括海拔、全球方位、速度、加速度、角速率、精度和卫星信息。
加速度和角速率都是使用两个坐标系指定的,一个坐标系连接到车身(x,y,z),另一个坐标系统映射到该位置的地球表面切平面(f,l,u)。不时遇到OXTS设备的短时间(~1秒)通信中断,为此线性插值所有值,并将最后3个条目设置为“-1”,以指示丢失的信息。
dataformat.txt中提供了更多详细信息。开发工具包中提供了转换实用程序。
c) Velodyne:为了提高效率,Velodyne扫描被存储为浮点二进制文件,使用提供的c++或MATLAB代码很容易解析。每个点都存储有其(x,y,z)坐标和一个附加的反射率值(r)。
虽然每次扫描的点数不是恒定的,但平均每个文件/帧的大小为~1.9 MB,相当于~120000个3D点和反射率值。请注意,Velodyne激光扫描仪绕其垂直轴连续旋转(逆时针),这可以使用时间戳文件进行考虑。
图3. 传感器设置。此图显示了传感器(红色)相对于车身的尺寸和安装位置。地面以上的高度以绿色标记,并相对于路面进行测量。传感器之间的转换以蓝色显示。
图4. 提供的Zip文件的结构及其在存储所有KITTI序列的全局文件结构中的位置。这里,“日期”和“驱动器”是占位符,“图像0x”指的是4个摄像机流。
B.注释
对于参考相机视野内的每个动态对象,以3D边界框轨迹的形式提供注释,以Velodyne坐标表示。定义了类别“汽车”、“货车”、“卡车”、“行人”、“人(坐着的)”、“骑自行车的人”、“有轨电车”和“杂项”(例如拖车、分段车道)。
tracklets存储在date_drive_tracklets.xml中。每个对象都被分配了一个类及其3D大小(高度、宽度、长度)。对于每一帧,提供对象的3D平移和旋转,如图7所示。请注意,只提供偏航角,而其他两个角度被假设为接近零。此外,还指定了遮挡和截断的级别。该开发工具包包含C++/MATLAB代码,用于使用boost::serialization库读取和写入tracklets。
为了进一步深入了解数据集的属性,提供了包含注释对象的所有序列的统计信息。两个主要类别“汽车”和“行人”的对象总数和对象方向如图8所示。对于每个对象类,每个图像的对象标签数量和捕获序列的长度如图9所示。由GPS/IMU系统记录的平台的自运动以及关于序列长度和对象数量的统计数据。整个数据集的图10和每个街道类别的如图11所示。
图6. 开发工具包。在KITTI网站上提供的MATLAB开发工具包中演示了使用轨迹(顶部)、Velodyne点云(底部)及其在图像平面上的投影。
C.开发工具包
KITTI网站2上提供的原始数据开发工具包包含带有C++包装的MATLAB演示代码和readme.txt文件,该文件提供了更多详细信息。在这里,将简要讨论最重要的功能。在运行脚本之前,需要使用脚本make.m构建用于将tracklets读取到MATLAB结构和单元阵列中的mex包装器readTrackletsMex.cpp。它将文件tracklets.h从保存tracklets对象的cpp文件夹中包装以进行序列化。
图7. 对象坐标。此图显示了带注释的三维边界框相对于三维Velodyne激光扫描仪坐标系的坐标系。在z方向上,对象坐标系位于对象的底部(与支撑表面的接触点)。
当在C++环境中工作时,也可以直接与此文件接口。
脚本run_demoTracklets.m演示了如何从XML文件中读取3D边界框轨迹并将其投影到相机的图像平面上。
三维Velodyne点云到图像平面的投影如run_demoVelodyne.m见图6所示。
脚本run_demoVehiclePath.m显示了如何使用GPS/IMU数据读取和显示3D车辆轨迹。它使用convertOxtsToPose(),它将GPS/IMU测量值作为输入,并输出车辆在欧几里得空间中的6D姿态。对于这种转换,使用了墨卡托投影。
地球半径
米,比例尺
,以及
地理坐标。
表示第一帧坐标的纬度,并唯一确定墨卡托标度。
函数loadCalibrationCamToCam()可用于读取四个视频传感器的内在和外在校准参数。其他三维刚体变换可以使用loadCalibrationRigid()进行解析。
D.基准
除了原始数据外,KITTI网站还提供了一些计算机视觉和机器人任务的评估基准,如立体、光流、视觉里程计、SLAM、3D对象检测和3D对象跟踪。有关基准和评估指标的详细信息。
IV、 传感器校准
注意到所有传感器都经过了仔细的同步和校准。为了避免随着时间的推移而漂移,每天在录音后对传感器进行校准。请注意,即使传感器设置在两者之间没有改变,但数字差异也是可能的。坐标系的定义如图1和图3所示,即:
•摄像头:x=右侧,y=向下,z=向前
•Velodyne:x=向前,y=向左,z=u
图7. KITTI数据集的示例。此图展示了数据集中的多样性。显示了左侧彩色相机图像。
•GPS/IMU:x=向前,y=向左,z=向上
表示法:在下面,用小写字母(a)写标量,用粗体小写字母(a)写矢量,用粗体大写字母(B)写矩阵。将点从坐标系a带到坐标系b的三维刚体变换将由
表示,T表示“变换”。
A.同步
为了同步传感器,使用Velodyne 3D激光扫描仪的时间戳作为参考,并将每个旋转视为一个帧。在连续旋转扫描仪的底部安装了一个簧片触点,当面向前方时会触发相机。这最大限度地减少了动态对象引起的范围和图像观测的差异。
不幸的是,GPS/IMU系统不能以这种方式同步。相反,由于它提供了100Hz的更新,收集的信息的时间戳与特定帧的激光扫描仪时间戳最接近,导致GPS/IMU和相机/Velodyne数据包之间的最差时间差为5ms。注意,提供所有时间戳,使得可以容易地通过插值获得任何时间的定位信息。所有时间戳都已使用系统时钟记录在主机上。
B.摄像头校准
为了从内部和外部校准相机,使用所提出的方法。请注意,所有相机中心都是对齐的,即它们位于同一个x/y平面上。这一点很重要,因为它使能够联合校正所有图像。
每天的校准参数按行主顺序存储在calib_cam_to_cam.txt中,使用以下符号:
•
…………原始图像大小(1392×512)
•
……校准矩阵(未校正)
•
……失真系数(未修正)
•
……从摄像机0到摄像机i的旋转
•
…..从相机0到相机i的转换
•
…………校正后的图像大小
•
…………..整流旋转矩阵
•
……校正后的投影矩阵
这里,i∈{0,1,2,3}是相机索引,其中0表示左灰度,1表示右灰度,2表示左彩色,3表示右彩色相机。请注意,变量定义符合OpenCV库,使用它来扭曲图像。使用synchronized时
并且校正的数据集只有具有rect下标的变量是相关的。注意,由于枕形失真效应,图像被裁剪,使得校正后的图像的大小小于1392×512像素的原始大小。
校正(旋转)相机坐标中的3D点x=
到第i个相机图像中的点y=
的投影如下
其中
第i个投影矩阵。这里,
表示相对于参考相机0的基线(以米为单位)。注意,为了将参考相机坐标中的3D点x投影到第i个图像平面上的点y,还必须考虑参考相机
的校正旋转矩阵:
这里,通过附加第四个零行和列,并设置
,将
展开为4×4矩阵。
C.Velodyne和IMU校准
已经通过使用初始化刚体变换,相对于参考相机坐标系(相机0)注册了Velodyne激光扫描仪。接下来,针对KITTI立体声基准中表现最好的3种立体声方法,优化了基于50个手动选择的对应关系的欧几里得距离的误差准则和视差误差的稳健度量。使用Metropolis Hastings抽样进行优化。
从Velodyne坐标到相机坐标的刚体变换在calib_velo_to_cam.txt中给出:
•
。旋转矩阵:velodyne→ 照相机
•
。平移矢量:velodyne→ 照相机
使用
Velodyne坐标中的3D点x被投影到第i个相机图像中的点y,作为
为了注册相对于Velodyne激光扫描仪的IMU/GPS,首先记录了一个具有“∞”环路的序列,并使用点对平面ICP算法注册(未扭曲的)点云。给定两个轨迹,该问题对应于众所周知的手眼校准问题,该问题可以使用标准工具解决。旋转矩阵
和平移矢量
存储在calib_imu_to_velo.txt中。imu/GPS坐标中的3D点x被投影到第i个图像中的点y,如下所示
图8. 数据集的对象发生和方向统计。
此图显示了序列中出现的不同类型的对象(顶部)和两个最主要类别“汽车”和“行人”的方向直方图(底部)。
五、总结和今后的工作
在本文中,提供了一个校准、同步和校正的自动驾驶数据集,该数据集捕捉了各种有趣的场景。相信,这个数据集将在机器人和计算机视觉的许多领域非常有用。未来,计划通过为当前未标记的序列添加额外的3D对象标签并记录新的序列来扩展可用序列集,例如在困难的照明情况下,如夜间、隧道中或有雾或雨的情况下。此外,计划通过新的挑战来扩展基准套件。
特别地,将为许多序列提供像素精确的语义标签。
参考文献链接
https://www.mrt.kit.edu/z/publ/download/2013/GeigerAl2013IJRR.pdf