KITTI立体匹配数据集解析

点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

77b554fef96ceb56c3eaef14b1a2cafe.png

作者丨HawkWang

来源丨计算摄影学 

对于立体匹配的研究来说,高质量的数据集非常关键。即便是其最新一代数据,也大多数集中在一些静态的室内场景,如下图所示。

KITTI立体匹配数据集解析_第1张图片

与此同时,在另外一个领域——自动驾驶——人们逐渐开始思考一个问题:视觉设备是否能够在自动驾驶中起到关键的作用?当时,自动驾驶系统的主流传感设备是激光雷达、GPS或是雷达加上高精度地图。于是,人们迫切需要一个更加复杂,更加贴近自动驾驶场景的高质量数据集,能同时用于对立体匹配、光流、视觉里程计/SLAM、3D目标识别等多项任务的研究。

构造这样的数据集是一件需要精心设计和高性能软硬件系统支持的工作。今天我介绍的就是一个非常出名,在自动驾驶领域被广泛采用的数据集:KITTI数据集。其主要制作者是德国卡尔斯鲁厄理工学院(Karlsruher Institut für Technologi)的Andreas Geiger和Philip Lenz,以及美国芝加哥丰田技术研究所(Toyota Technological Institute at Chicago)的Raquel Urtasun。

他们的成果首先发表于2012年的下面这篇文章中,并利用这个数据集和相关的评价指标构建了公开的榜单。

KITTI立体匹配数据集解析_第2张图片

2012年构建的数据包括了389对立体匹配和光流数据对,长达39.2公里的视觉里程计/SLAM数据,真实拥挤的场景中超过200k的3D目标标注信息(每帧图像中最多有15辆汽车、30个行人),很显然,这比起MiddleBurry的数据要复杂了太多。我们重点关注的立体匹配的数据集和榜单信息在这个页面cvlibs.net/datasets/kit

接下来,我从数据采集、传感器标定、数据标注、评价指标,以及典型算法在此数据集上的表现来介绍。在了解了这些基本信息后,我会带你了解后来作者构建的Stereo Evaluation 2015榜单,以及从2020年开始逐渐公开的KITTI-360数据集。

一. KITTI 2012

1.1 数据采集

我们首先来看看作者的复杂采集设备,这里有一段视频加以介绍:

这是一辆改装的大众帕萨特B6汽车。我们很容易看到了车顶加装的各种传感器,实际上车内还有一台配备RAID系统的八核i7计算机,该计算机运行Ubuntu Linux和实时数据库,这样就可以实时记录车载数据了。

KITTI立体匹配数据集解析_第3张图片

我们重点看看图中的传感器,它们包括了:

  • 1个GPS/IMU惯导系统,型号是OXTS RT 3003,实际使用时位置精度<5cm

KITTI立体匹配数据集解析_第4张图片

1个激光雷达:Velodyne HDL-64E。这个激光雷达每秒旋转10周,每个周期能够获得约100k个3D点信息,有效距离为64m,垂直分辨率为64。这个设备能够在室外运动场景提供非常准确的3D信息。上面提到的GPU/IMU惯导设备则用于修正它的自漂移误差。

KITTI立体匹配数据集解析_第5张图片

2个140万像素的灰度摄像头和2个140万像素的彩色摄像头,型号分别是Point Grey Flea 2 (FL2-14S3M-C)和Point Grey Flea 2 (FL2-14S3C-C)。这两组镜头都是高精度的工业摄像头,它们与激光雷达相连同步起来,每秒进行10帧图像采集,分辨率为1392x512,FOV为90◦× 35◦。快门速度是动态调整的,最大快门时间为2ms,我们可以看到相机的响应是非常快的。

KITTI立体匹配数据集解析_第6张图片

安装图的细节如下,我们看到两组摄像头构成了2组立体视觉系统,相机的基距为54cm,而彩色和灰度相机的间距尽可能小,这样可以利用彩色摄像头进行分割和目标检测的任务,而用高灵敏度的灰度摄像头来进行立体匹配和光流这样的任务,并将两类任务的结果对齐到一起。

KITTI立体匹配数据集解析_第7张图片

为了使得成像更加清晰,还使用了4个变焦镜头,焦距4~8mm,型号:Edmund Optics NT59-917

KITTI立体匹配数据集解析_第8张图片

作者们驾驶汽车,在中型城市卡尔斯鲁厄、农村地区和高速公路上行驶,实时收集了原始数据,下面的视频展示了行驶中的场景:

为了能够提供准确的Ground Truth标注数据,很重要的就是需要对这几个传感器做标定,这在下一小节做中介绍。

1.2 传感器标定

这套系统的传感器众多,所以采用了如下步骤进行传感器的标定。

首先是相机的内外参数标定,作者们在墙上贴上 棋盘格,然后通过最优化重投影误差的方式进行了相机标定,接下来用标定的参数对图像做了立体校正。相关的基础知识,可以参见我之前的文章:67. 三维重建2——相机几何参数标定和69. 三维重建4——立体校正(Recitification)

KITTI立体匹配数据集解析_第9张图片

接下来,是标定和对齐激光雷达与参考相机。

KITTI立体匹配数据集解析_第10张图片

由于数据中的大量噪声,使得这个过程并不容易。所以作者们采用了一种半自动的方法,分为好几步:

首先用A. Geiger等人发明的自动化对齐方法,对齐激光雷达和相机,其参考文献为

b70bae401fcf9ddde300631d5653fbb7.png

这相当于一个初始对齐步骤,当然结果还有很多误差。

接下来,人工在激光雷达点云和图像中标注一些明显的物体边缘曲线,同时也利用选定的表现最佳的立体匹配算法计算视差图。现在要做的是迭代式的优化激光雷达和相机之间的几何参数,使得点云匹配点的重投影误差,以及立体匹配过程中的错误点的数量都达到最小——这是一个联合迭代式优化的过程。

通过这两步,就得到了将激光雷达和相机对齐的参数。

最后,是将惯导系统的地理坐标与激光雷达对齐,作者将问题看做了机器人学中的手眼标定问题,这是一个相对成熟的问题,有很多方法可用。

KITTI立体匹配数据集解析_第11张图片

这里通过在一个固定的停车场获取了一段激光雷达的点云数据并用ICP算法对齐拼接到一起,然后采用了下面这篇文章中的方法进行了全自动标定:

01b7e92dae93572042912425f984df0f.png

到此为止,几个传感器的数据都可以通过标定结果对齐到一起了。

1.3 Ground Truth数据生成

作者生成了多种类型的Ground Truth数据,我们这里主要关注的是立体匹配研究用的标准视差数据。在某个感兴趣的图像帧,作者采集了前5帧和后5帧的点云数据,并把这些点云数据通过ICP算法对齐到一起,并投影到感兴趣的图像帧上——你可以理解目标就是得到图像的每个像素的3D坐标,这些信息自然可以通过标定数据转换为视差图。作者删除了容易出错的窗户、围栏等目标。同时,由于激光雷达的特性,被遮挡的物体的3D坐标及视差值是无法稳定的恢复的,所以作者没有对结果做插值填补信息,所以实际生成的视差图中平均约包含50%的像素包含理想的视差值。

1.4 评价指标及典型算法表现

作者通过前述的系统方法实际上获取了约3TB的原始数据。为了评价各种立体匹配算法及光流算法的优劣,作者从这些数据里面挑选了有代表性的一个子集。这个方法挺有意思,实际上是先把每一幅图像表示为144维的描述子,通过聚类算法将图像分成了很多类,然后挑选出其中靠近每一类中心的代表样张得到的,在这个过程中作者还手动去除了照明条件很差的图像。

KITTI光流和立体匹配数据集的介绍如下面的视频所示。这里包含大概194组训练数据对及195组测试数据对,图像尺寸大概0.5M Pixel。我们可以看到,数据中包含了很多困难场景,包括镜面反射表面、大视差、多种不同的材质、多种变化的光照条件,这对当时的各种立体匹配算法提出了严峻的挑战。

作者采用了计算错误像素的比例的方法来评价算法优劣。由于图像尺寸较大,而作者在实际测试算法时并没有降采样图像,所以采用了不同的错误阈值来删选不同数量的错误匹配像素数量,默认情况下如果超出3个像素的匹配误差就会被认为是错误的匹配。

作者测试了好几种在当时特别有代表性的立体匹配算法,它们在MiddleBurry等别的数据集上表现很好,而有趣的是在KITTI2012的数据集上却表现很不好。论文总有一张表格说明这一点,这就说明了在真实自动驾驶场景,我们需要更加鲁棒的算法。

KITTI立体匹配数据集解析_第12张图片

比如,OpenCV里面实现的SGBM算法的典型表现如下(上:参考图像; 中:错误图; 下:计算出的视差图),我们通过视差图和错误图肉眼就可以看到有很多区域都是匹配失败了的。

KITTI立体匹配数据集解析_第13张图片

正如作者在论文的总结中所说,新的数据集的提出,弥补了之前像MiddleBurry这样的数据集的缺陷,给立体匹配领域带来了新的挑战,这将使得这些算法不能再过拟合到有限的数据集上。而且,由于作者采集的原始数据非常多,而上述Benchmark只挑选了很少一部分,作者在当时就计划逐渐增加数据集的难度,这也就为几年后的KITTI 2015数据集打下了伏笔。

我们用论文中一张图表结束这一小部分,这个图表展示了KITTI 2012立体匹配数据集和其他已有数据集之间的差异(不过记住这是2012年的情况,MiddleBurry数据集在2014和2021都更新了,尺寸和数量都有提升)

KITTI立体匹配数据集解析_第14张图片

二. KITTI 2015

正如前一节我讲的,作者当时采集了大量的数据,第一批只选择了一小部分静态场景作为2012年的数据,相对来说比较简单——下一步,就是继续增加难度了。

于是在2015年,作者为了研究稠密的运动场估计,而升级了数据集。稠密的3D运动场估计在移动机器人、自动驾驶中有重要的作用,而之前的数据集都比较简单,只包括静态场景。这就是作者创建新数据集的关键原因。

作者并没有重新采集数据,而是从之前获取的3TB数据中抽取了具有大量运动元素的400组数据,,其中。由于我们只关心立体匹配这一部分,所以我跳过其他类别数据的讲解。现在场景中有大量运动物体,甚至采集系统本身也在运动,而我们的激光雷达采用的是卷帘快门,而且帧率很低(10fps),从其中很难准确恢复运动物体的3D点云。所以作者将3D点云的获取分成了两步。

第一步是获取场景的静态物体的点云。这里首先需要同时利用GPU/IMU惯导系统和激光雷达系统来联合优化,得到了多个帧高精度对齐后的点云信息,其中只包括了静态目标。而运动目标的信息则被移除掉,留待下一步填补。

第二步则是处理动态物体。由于动态物体的3D点云无法仅通过激光雷达得到,所以作者采用了用AutoCAD制作的标准3D模型抽样映射的方式,来恢复动态物体的3D点云。这就涉及到需要把原始点云与AutoCAD 3D模型相匹配的过程——这本来要求场景中每个车都有对应的3D模型,这显然是不可能的。所以作者采用的是用最接近场景目标的3D模型来代替的方案(这里选用了16种3D车模),可以看下面的示意图。其中左列里面,绿色点是CAD的模型点(每种模型抽取了约3000个点),红色十字架是手工标注的需要和CAD模型对齐的点。通过类似ICP算法,可以把CAD模型和上述红色十字点对齐到一起,这样点云就变成了右列的样子,对应的视差图(右下)也就相应得到了优化。

KITTI立体匹配数据集解析_第15张图片

这个过程中还有一些细节,但由于篇幅原因,我就略过不讲了。感兴趣的读者可以自行参考作者在CVPR2015中发表的论文。

KITTI立体匹配数据集解析_第16张图片

我个人觉得,由于KITTI2015的数据中一些关于动态物体的信息是用上述方法合成的,因此用于评价立体匹配算法的优劣时可能会出现偏差,因此在KITTI2012的静态场景表现好的方法到了KITTI2015中可能表现不够好。而如果在KITTI2015中表现好的算法,则和理想的结果很可能有差距。

总之,KITTI数据集发布后,吸引了大量学术界、工业界的专家提交结果,验证自己算法的优劣。

我目前查到的KITTI Stereo Evaluation 2012页面上共有206个算法,而KITTI Stereo Evalutation 2015页面上则有302个算法,而之前介绍的MiddleBurry立体匹配数据集的评价页面(vision.middlebury.edu/s)上则只有170个算法。

三. KITTI-360

技术永远是在不断前进的,KITTI数据集出现后确实改变了整个自动驾驶的研究状态,但毕竟其数据集有限,且精度也有待进一步提升。于是,作者们也没有止步不前。从2020年开始,他们释放了一个更新、更庞大、更精确的数据集:KITTI-360,介绍页面在这里(cvlibs.net/datasets/kit)

从立体采集设备上讲,这次仅有1对彩色摄像头,基距60cm。

KITTI立体匹配数据集解析_第17张图片

但第1个最大的不同是增加了一对鱼眼镜头,位于车身的左右两侧:

KITTI立体匹配数据集解析_第18张图片

另外一个很大的变化是增加了一个激光扫描仪SICK LMS 200在车顶,它被配置为Pushroom模式,所以可以同时获取360度的3D信息。这就使得这套系统能比之前KITTI的采集系统获得更加准确的3D点云数据

KITTI立体匹配数据集解析_第19张图片 KITTI立体匹配数据集解析_第20张图片

KITTI-360目前并未设置立体匹配的评价榜单,而主要集中于自动驾驶的其他关键问题上,所以我就略过不展开了。但我相信,这个数据集一定能再次提升人们对自动驾驶技术的认识,所以这里搬运作者的视频,打开声音看这个视频,能让你非常激动:

四. 总结

今天我介绍了KITTI数据集,包括2012年的初始静态数据集,2015年的动态场景数据集,还有最新的KITTI-360数据集。因为专栏的这一部分重点在关注立体匹配,所以我也仅仅介绍了跟立体匹配相关的信息。实际上,KITTI数据集对自动驾驶的很多关键技术的研究都有重要的作用,包括分割、3D目标检测、跟踪、光流等等,读者感兴趣还可以进一步查阅资料研究之。

我们要特别注意的是,在别的评价数据集(如MiddleBurry Stereo)上表现良好的算法,在KITTI数据集上表现不一定好,有的甚至很差,相反亦然——这就说明现在很多算法都对特定数据集是过拟合的。这也说明我们还有很大空间去提升算法的泛化性和总体性能。

五. 参考资料

1、KITTI数据集介绍:cvlibs.net/datasets/kit

2、Andreas Geiger and Philip Lenz and Raquel Urtasun, Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite, CVPR 2012

3、Moritz Menze and Andreas Geiger, Object Scene Flow for Autonomous Vehicles, CVPR2015

4、KITTI-360数据集介绍:cvlibs.net/datasets/kit

本文仅做学术分享,如有侵权,请联系删文。

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

计算机视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

KITTI立体匹配数据集解析_第21张图片

▲长按加微信群或投稿

KITTI立体匹配数据集解析_第22张图片

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

KITTI立体匹配数据集解析_第23张图片

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

你可能感兴趣的:(算法,传感器,大数据,编程语言,计算机视觉)