原文地址:https://zhuanlan.zhihu.com/p/60182892
KITTI是目前自动驾驶领域最重要的测试集之一,之前大概浏览了一遍,还存在很多疑问,这里对其做了进一步的学习,基本上了解了每个测试集的作用,KITTI主要是针对自动驾驶领域的图像处理技术,主要应用在自动驾驶感知和预测方面,其中也涉及定位和SLAM技术。
KITTI的起因可以参考"Are we ready for Autonomous Driving? The KITTI Vision Benchmark Suite"。他们认为自动驾驶当前最重要的一个挑战是没有一个强大的benchmark,现有的数据集都不够大,并且不完整或是实验室环境,所以很多算法在数据集上表现良好,但是在真实环境中却不行。KITTI的目标是提供大量的真实场景的数据集,用来更好的度量和测试算法的表现。
那么提供这样大规模并且是真实场景的数据集会遇到哪些挑战呢?
这部分涉及较多,主要是校准和benchmark设定指标部分比较复杂,可以直接参考论文获取答案。
下面我们分别介绍下KITTI的几项benchmark。
Stereo
Stereo Evaluation(立体评估)
基于图像的立体视觉和3维重建,从一个图像中恢复结构本质上是模糊的,一般是从不同角度的多张图片来恢复3维结构。这在自动驾驶的场景中是非常有帮助的,比如得到汽车的形状,周围环境的形状等。
那么stereo和depth有什么区别呢?stereo侧重于场景中的立体对象,而depth则侧重于场景中距离的远近。而深度信息可能还需要依赖stereo信息,比如房子的立体效果,不然整个图像就只能得到平面的深度信息,而不是三维的深度信息。下面是stereo的一个例子,图片来自middlebury。
那么stereo和depth的成像是如何做的呢,有立体相机,也有深度相机。其中的原理是什么呢?
立体相机的时间相当悠久,在早期立体相机是一种具有两个或者更多镜头的相机,每个镜头具有单独的图像传感器或胶片框架。这种相机模拟人类双目视觉,用于制作电影的立体视图和3D图像。在20世纪50年代,立体相机在立体现实主义和使用135胶卷制作立体幻灯片的类似相机中获得了一定的普及。2009年,3D技术经历了复兴,包括立体相机,光场相机的不断发展,以及立体数码相机产品的出现,如Fujifilm FinePix Real 3D系列和Minoru 3D网络摄像头。自2014年以来,计算机视觉发展和不断增加的嵌入式GPU计算能力为立体相机开辟了新的应用。这些可用于通过高级图像处理技术计算深度图。2015年4月,英特尔发布了一款适用于智能手机的相机,可以应用于各种深度应用,例如拍照后更改照片焦点,3D扫描和手势控制。
可以看到立体相机实际上是借助于深度信息,来还原物体的3D外观。1950年左右就开始有基于双目视觉技术的相机了。后面沉寂了一段时间,直到2009年,更多的技术场景出现。深度相机用来获取环境的深度(3D)信息,不仅仅是用来制作立体视图,还应用在深度检测,手势识别等。可以说深度相机比立体相机的用途更加广泛,是扩展了立体相机的应用范围之后的叫法。
下面再介绍下目前主流的几种测量深度的原理:
1.双目视觉(Triangulation)
2.光飞行时间法(Time-of-flight)
3.结构光(structured light)
Optical Flow Evaluation //光流
光流是关于视域中的物体运动检测中的概念。用来描述相对于观察者的运动所造成的观测目标、表面或边缘的运动。应用领域包括:运动检测,对象分割,接触时间信息,扩展计算焦点,亮度,运动补偿编码和立体视差测量。
光流法实际是通过检测图像像素点的强度随时间的变化进而推断出物体移动速度及方向的方法。一些求光流的方法:
1.相位相关
2.基于块的方法
3.微分估计光流的方法
Lucas–Kanade method
Horn–Schunck method
Buxton–Buxton method
Black–Jepson method
General variational methods
4.离散优化方法
关于光流,下面有更通俗的介绍。
little-rocket:Optical Flow介绍与代码实现
光流Optical Flow介绍与OpenCV实现
林天威:[CVPR 2018论文笔记] 光流与行为识别的结合研究
Scene Flow Evaluation //场景流
场景流是什么?
场景流是场景的密集或半密集3D运动场,其相对于相机完全部分地移动。场景流的潜在应用很多。在机器人技术中,它可以用于需要预测周围物体运动的动态环境中的自主导航和/或操纵。此外,它可以补充和改进最先进的视觉测距和SLAM算法,这些算法通常假设在刚性或准刚性环境中工作。另一方面,它可以用于机器人或人机交互,以及虚拟和增强现实。
场景流相对光流的区别是?
光流是平面物体运动的二维信息,场景流则包括了空间中物体运动的三维信息。
场景流目前并没有太多中文资料,多是一些论文。stereo 2015/flow 2015/scene flow 2015都采用的是同一个数据集,根据错误像素的数量对所有方法进行排名。
Depth Evaluation //深度
视觉深度估计。视觉深度在视觉SLAM和里程计方面应用广泛,深度信息的获取可以参考前面Stereo的方法。其中如果是基于视觉的odometry,那么就需要用到视觉depth evaluation技术。其中包括2项benchmark,深度补全和深度预测(The depth completion and depth prediction)。
Visual Odometry / SLAM Evaluation 2012 //里程计
视觉里程计,需要用到depth evaluation技术。
用到了下面几种方法:
Stereo: 使用左右(立体)图像的方法
Laser Points: 使用来自Velodyne激光雷达点云的方法
Loop Closure Detection: 一种检测循环闭包的SLAM方法
Additional training data: 使用其他数据源进行训练
可以看到这项benchmark有视觉和Lidar的传感器方案,并且引入SLAM方法中的闭环检测。
Object Detection Evaluation //物体识别
包括2D,3D和鸟瞰视角3种方式的benchmark,其中2D场景不仅要能正确标注2D的坐标,还要能够标注鸟瞰视图中的位置。
2D场景增加了除了汽车,行人,自行车的分类,还有目标检测与方向估计。
3D场景主要是激光雷达点云的标注。分类有汽车,行人,自行车。
Object Tracking Evaluation 2012 //物体追踪
3D物体追踪,主要是针对汽车和行人的目标追踪。由于没有单一的评估标准,没有对方法做排名。上面介绍的光流和场景流广泛应用在物体追踪上面。
Road/Lane Detection Evaluation 2013 //车道线识别
车道线识别,车道线识别是无人驾驶很基础的功能,而且是ADAS中车道线保持等功能的前提,所以车道线的benchmark就至关重要了。这里唯一的疑问就是车道线不完整的情况如何处理?还有下雨反光或者夜间的时候如何处理?(不知道数据集是否有覆盖?)。下面是例子
引用Robust Lane Detection from Continuous DrivingScenes Using Deep Neural Networks
它包含三种不同类别的道路场景:
Uu - 城市无标记 (98/100)
Um - 城市标记 (95/96)
Umm - 城市多重标记车道 (96/94)
Urban - 上述三者的结合
Semantic and Instance Segmentation Evaluation //场景分割
语义和实例分割评估,语义分割对无人驾驶的处理很关键,比如人会根据语义处理,区分车道,周围的环境以及汽车,然后针对不同的场景做处理。如果没有语义处理,所有的像素将会同等对待,对处理和识别都会引入干扰。
任务侧重于检测,分割和分类对象实例。其中有像素级的分割和实例级别的分割。
上述大部分的专业词汇都没有找到很好的中文翻译,直接翻译起来感觉很别扭,所以很大一部分介绍的很生硬。另外由于涉及的计算机视觉方面的领域很繁杂,个人也无法完全领悟掌握,并且一一介绍,这只是一篇初稿,后面会逐步完善。关于每一项的指标和排名靠前的方法也没有介绍,这一部分也很花时间,暂时放在todolist里。
最后,通过对KITTI的数据集的学习,基本上了解了数据集的分类,知道了如何攻克自动驾驶感知和预测的方向,为站在巨人的肩膀上做了一些准备。同时推荐一个[网站](Browse the State-of-the-Art in Machine Learning),可以同时搜索每个领域的论文和代码实现。