码迷,mamicode.com
首页 > 其他好文 > 详细

长篇自动驾驶技术综述论文(上)

时间:2020-05-21 10:22:44      阅读:823      评论:0      收藏:0      [点我收藏+]

标签:操作   eth   参考文献   校正   end   一个   匹配   不同的   内容   

长篇自动驾驶技术综述论文(上)

A Survey of Autonomous Driving: Common Practices and Emerging Technologies

Ekim Yurtsever, Jacob Lambert, Alexander Carballo, Kazuya Takeda

论文链接:https://arxiv.org/abs/1906.05113

摘要             

自动驾驶系统(ADSs)承诺提供安全、舒适和高效的驾驶体验。然而,涉及配备ADS的车辆的死亡人数正在上升。只有进一步提高ADSs的稳健性,才能充分发挥ADSs的潜力。本文讨论了尚未解决的问题,并综述了自动驾驶的技术方面。对当前挑战、高级系统架构、新兴方法和核心功能(包括定位、映射、感知、规划和人机界面)的研究进行了全面回顾。此外,在我们自己的平台上,在真实的驾驶环境中实现并比较了许多最先进的算法。本文最后概述了ADS开发中可用的数据集和工具。             

索引项             

自主车辆、控制、机器人、自动化、智能车辆、智能交通系统

目录

摘要

引言
前景与挑战
系统构成和框架

 系统框架传感器和硬件

定位与建图

 GPS-IMU融合SLAM基于先验地图定位

感知

 检测

 基于图像的目标检测语义分割三维目标检测目标跟踪道路和车道线检测

评估( ASSESSMENT)

 总体风险和不确定性评估

周围驾驶行为评估

驾驶风格识别
规划与决策

 全局规划

局部规划
人机交互

 数据集和开源工具

数据集和标准

开源框架和模拟器
总结

 参考文献

 

引言

 主要介绍了一些背景,提到了两个著名的自动驾驶研究项目

1、Eureka Project PROMETHEUS[^1]:1987-1995年间在欧洲开展,是最早的主要自动化驾驶研究之一,戴姆勒-奔驰公司的VITA II也基于此而来。

2、DARPA Grand Challenge[^2]:美国国防部主办的业内最负盛名的挑战赛,许多经典的文章都来自于这里。
在传统的自动驾驶方案系统架构中,一般将任务划分为多个模块,并在各个模块上使用一系列传感器和算法。但是随着深度学习[^3]的发展,逐渐出现了一些端到端的系统。ADS高级系统架构分类如下,主要是按连通性和算法实现逻辑划分,具体介绍在后面。
前景与挑战

 前景就不提了,自动驾驶不缺故事。按照美国汽车工程师学会(SAE)的定义,汽车的自动化水平如下:

 

L0无自动化。
L1原始驾驶员辅助系统(Primitive driver assistance systems),包括自适应巡航控制、防抱死制动等。
L2部分自动化,先进的辅助系统(Advanced assistance systems),例如紧急制动或避免碰撞。
L3有条件的全自动化(Conditional automation),在正常操作期间,驾驶员可以专注于除驾驶以外的其他任务,但是紧急情况下必须能快速响应并接管车辆。
L4在天气条件许可,基础设施(信号地图等)完善的情况下,完全不需要驾驶员。
L5无论在任何场景下,都不需要驾驶员,目前尚无完全实现L4级别及以上的自动驾驶车辆。
系统构成和框架

 像引言中显示的那样,一般从系统框架上可以分为单车辆系统(Ego-only systems)和互联车辆系统(Connected multi-agent systems);从算法实现上,可以分为两大类,一类是通过将各个部分模块化来实现,另一类是直接通过端到端的实现。

 

系统构成
单车辆系统,顾名思义就是始终在一辆车自身执行所有必要的自动驾驶操作,而互联车辆系统可能需要依赖于其他车辆和一些基础设施来完成一些操作,比如现在比较火热的车辆网,V2X等。就目前来说,当然还是单车辆系统更为常见。
模块化系统(Modular systems),指将传感器输入到执行器输出的中间过程分别构造成一个个独立的模块,比如定位、建图、感知、评估、规划与决策、车辆控制、预测、人机交互等。模块化的基本逻辑就是分而治之,把一个复杂的任务分成若干个较为简单的子任务。除此之外,模块化还有一些隐藏的优势,比如说对一些约束(如紧急制动,超速等),多模块意味着可以从不同角度施加约束,可以保证在其中部分传感器出现偏差的时候仍能提供较为可靠的输出。反过来说,多模块也意外着出错的概率大大增加,某个模块的错误可能会沿着进程传播扩散,如前段时间的特斯拉事故,感知模块误将白色拖车分类为天空,即使后续模块完全正确执行,错误也无法避免。
端到端系统(End-to-end systems,指的是直接从感知输入产生输出,常见的端到端系统有三种主要方法:直接监督的深度学习( Direct supervised deep learning)[5]、神经进化(Neuroevolution)[6]和深度强化学习(Deep reinforcement learning)[7]。一般端到端系统的流程图如下图所示
技术图片

 

 最早的端到端系统可以追溯到ALVINN[5],他训练了一个三层全连接的网络来输出车辆的前进方向。文[74]提出了一种输入图像输出转向的深度卷积神经网络。[75]提出了一种时空网络结构,即FCN-LSTM,可以预测车辆的运动。[4]介绍了另一种卷积模型DeepDriving,可以从输入图像中学习一组离散的感知指标。实际上这种方法并不是严格端到端的,因为如何从一系列感知指标中得到正确的驾驶动作还需要另外的模块。

上述的方法都是有监督的训练,也就是说需要一个专家的行为序列。那么就引入了另一个问题,自动驾驶系统是否应该像人一样开车?基于上面那个问题,出现了一种新的深度强化学习模型Deep Q Networks(DQN),将强化学习与深度学习相结合。强化学习的目标是选择一组能最大化奖励的行动,深度卷积神经网络在这里的作用是用来逼近最优奖励函数。简单来说,基于DQN的系统不再是去模仿专家的行为,而是去学习一种“最佳”的驾驶方式[^7] 最后一种神经进化是指利用进化算法来训练人工神经网络,但就实际而言,经进化的端到端驾驶不像DQN和直接监督学习那样受欢迎。
神经网络的出发点是去除了反向传播,从逻辑上来说,更接近生物的神经网络。在[63]中,作者使用驾驶模拟器对RNN进行神经进化训练。上述三种端到端自动驾驶的方法相比,直接监督学习的方法可以利用标记数据离线训练,而DQN和神经进化都需要在线交互。从理论上讲,端到端自动驾驶是可行的,但是还没有在真实的城市场景中实现(demo不算),最大的缺点是缺乏可解释性和硬编码安全措施(Hard coded safety measures)。 互联系统(Connected systems):有一些研究人员认为,靠在单车辆系统上叠传感器是局限的,自动驾驶的未来应该是侧重在多车辆之间的信息共享。随着车辆自组织网络(VANETs)的使用,无论是行人信息,传感器信息,亦或者是交通信号等,利用V2XVehicle to everything),车辆可以轻松访问其他车辆的数据,来消除单车的感知范围,盲点,算力的限制。
车辆自组织网络可以通过两种不同的方式实现:传统的基于IP的网络和以信息为中心的网络( Information-Centric networking,ICN)[8]。由于车辆的高度流动性和在道路网络上的分散性,因此传统的基于IP主机的网络协议不是很适用,事实上,信息源的身份有时候不是那么重要的一件事,ICN显然是更合理的方式。在这种情况下,车辆将查询信息汇聚到某个区域而不是某个地址,同时,它们开源接收来自任何发送方的响应。
上面我们提到可以利用车辆间的共享信息来完成一些驾驶任务,但是这里还有一个待解决的问题。想象一下一个城市有几十万辆车,每辆车可能有若干个摄像头,雷达,各种各样的传感器,每时每刻产生的数据量是十分庞大的,更关键的是,大多数情况下,这些数据是雷同的,即使不考虑传输和计算的负担,对算力来说也是极大的浪费。为了减少待处理的数据规模,[9]引入了一个符号学框架,该框架集成了不同的信息源,并将原始传感器数据转换为有意义的描述。除此之外,车辆云计算(Vehicular Cloud Computing,VCC)[10]与传统的云计算不同,它将传感器信息保存在车辆上,只有当本地其他车辆查询时才会被共享,节省了将恒定的传感器数据流上载/下载到web的成本。
传感器和硬件

 为了保证系统的鲁棒性和可靠性,大多数任务都需要较高的传感器冗余度,因此ADS一般都采用多种车载传感器。硬件模块大致可以分为五类,外部感知传感器(Exteroceptive sensors),监测车辆自身状态的本体感知传感器(Proprioceptive sensors),通信单元,执行器和计算单元。常见的外部传感器比较如下表:

技术图片

技术图片

 

单目相机(Monocular Cameras):最常见最廉价的传感器之一,除此之外,二维的计算机视觉算是一个比较成熟的研究领域,虽然理论上无法获得深度,但是现在也有一些基于单目深度的结果,缺点主要还是在精度和容易受环境因素影响上。现在还有一些针对特殊场景而开发的相机,如全景相机(Omnidirection Camera),闪光相机(Flash Camera),热敏相机(Thermal Cameras),事件相机(Event Camera)[11]等。所谓的全景相机就是理论上拥有360度视角的相机,事实上,这一类相机的难点并不在捕捉图像而是在图像拼接上,因为球面图像是高度失真的,所以校准的难度很大。
事件相机是一种比较新颖的概念,传统相机是按时间采用,而事件相机是事件触发型,它对场景中移动造成的变换比较敏感,因此可以用在检测动态目标上。事件相机的简单示例如图3和图4所示。
雷达(Radar)和激光雷达(Lidar):一般来说,现在都是采用多传感器的形式,用雷达或者激光雷达来弥补相机(包括深度相机)在深度信息上的缺陷。激光雷达和雷达的工作原理其实差不多,只不过激光雷达发射的是红外线而不是无线电波,在200米以内的精度是很高的,但是相对雷达来说,更容易受到天气的影响。雷达的精度虽然不如激光雷达高,但是由于测距长,成本低,对天气鲁棒性强,目前已经广泛应用于辅助驾驶(ADAS)中,比如接近警告和自适应巡航。(原文中没有提到这两种雷达的干扰问题,实际上金属对电磁波的干扰,生物对红外的干扰,相同频段的(激光)雷达互相干扰是十分关键的问题)。 本体传感器:一般指车辆自身携带的传感器,如里程计,IMU,转速计等。一些研究机构及公司的整车配置如下表所示: 

 

 技术图片

 

  定位与建图

定位指的是在环境中找到相对于参考系的位置,对于任何移动机器人来说这个任务都是最基本的。下文会详细介绍到三种最常见的方法:GPS-IMU融合,SLAM,基于先验地图定位。几种定位方法的比较如下表所示

技术图片

 

 GPS-IMU融合 

GPS-IMU融合的主要原理是用绝对位置数据修正航位推算(dead reckoning)的累积误差[12]。在GPS-IMU系统中,IMU测量机器人位置和方向的变化,并对这些信息进行处理,以便用航位推算法对机器人进行定位。但是IMU有一个显著的缺点,就是我们常说的累积误差。因此引入GPS的绝对位置信息(相当于一个反馈),可以有效地对IMU误差进行校正。
GPS-IMU融合的方法的精度比较低,实际上并不能直接用在车辆定位上。在2004年的DARPA挑战赛中,卡内基梅隆大学(Carnegie Mellon University)的红队就因为GPS错误而未能通过比赛。除此之外,在密集的城市环境中,像隧道,高层建筑等都会影响GPS的精度。尽管GPS-IMU系统本身无法满足自动驾驶的性能要求,但是可以和激光雷达等传感器相结合进行位姿估计。
SLAM

 顾名思义,SLAM是一种在线地图绘制同时定位的行为(理论上的同时)。理论上SLAM不需要关于环境的先验信息,就目前而言,更多是应用在室内环境(室外更多还是基于预先构建的地图进行定位)。关于自动驾驶领域的SLAM可以参见[13]。

基于先验地图定位

 基于先验地图的定位技术的核心思想是匹配:定位是通过比较在线数据同先验地图的信息来找到最佳匹配位置[14]。也就是根据先验的地图信息来确定当前的位姿。这个方法有一个缺陷,一般需要额外的一个地图制作步骤,而且,环境的变化可能会对结果产生负面影响(比如光照变化,参照物移动等)。

这类方法大致可以分为两大类:基于路标的定位和基于点云的匹配。- 基于路标:与点云匹配相比,基于路标的定位计算成本要低得多。理论上来说,只要路标的数量足够多,这种定位就是鲁棒的。[15]中采用了激光雷达和蒙特卡罗结合的方法,通过匹配路标和路缘(road markers and curbs)来定位车辆的位置。[16]介绍了一种基于视觉的道路标记(road marking)检测方法,事先保存了一份低容量的全局数字标记地图(a low-volume digital marker map with global coordinates),然后与前置相机的采集数据进行比较。最后根据检测结果和GPS-IMU输出利用粒子滤波器进行位置和方向的更新。
该方法的主要缺点在于地标的依赖性。基于点云:点云匹配一般是指局部的在线扫描点云通过平移和旋转同先验的全局点云进行匹配,根据最佳匹配的位置来推测机器人相对地图的局部位置。对于初始位姿的估计,一般是结合GPS利用航位推算。下图展示了利用Autoware进行的地图制作结果:

技术图片

 

 文献[17]中使用了一种带有概率图的多模态方法,在城市环境中实现了均方误差小于10cm的定位。与一般逐点进行点云匹配并舍弃不匹配部分相比,该方法中所有观测数据的方差都会被建模并应用于匹配任务。后续几种常见的匹配方法包括基于高斯混合模型(Gaussian Mixture Maps ,GMM)),迭代最近点匹配(Iterative Closest Point ,ICP),正态分布变换(Normal Distribution Transform ,NDT)等。关于ICP和NDT,[18]进行了详细的比较(我之前也写过一篇博客)。ICP和NDT算法都有相应的一些改进和变式,比如[19]提出了一种基于NDT的蒙特卡罗定位方法,该方法利用同时利用了离线的静态地图和不断进行更新的短期地图,当静态地图失效时,基于NDT的栅格来更新短期地图。

基于先验地图方法最大的缺陷就在于先验地图的获取上,实际上制作和维护一个可靠的高精度地图是相当费时又费力的一件事。除此之外,还有一些其他情况,比如跨维度的匹配(二维到三维,三维到二维等)。[20]就提到一种利用单目相机在点云中进行定位的方法。在初始姿态估计的基础上,利用离线的三维点云地图生成二维图像,并同相机捕捉到的图像进行在线归一化比较。这种方法相当于简化了感知的工作,但是增大了计算的复杂度。
感知

感知周围环境并提取可供安全导航的信息是自动驾驶的核心之一。而且随着近年来计算机视觉研究的发展,相机包括三维视觉逐渐成为感知中最常用的传感器。本节主要讨论基于图像的目标检测,语义分割,三维目标检测,道路和车道线检测,目标跟踪等。

 

基于图像的目标检测

 一般目标检测指的是识别感兴趣目标的位置和大小(确定图像中是否存在特定类的对象,然后通过矩形边界框确定其位置和大小),比如交通灯,交通标志,其他车辆,行人,动物等。目标检测是计算机视觉的核心问题,更重要的是,它还是其他许多任务的基础,比如说目标跟踪,语义分割等。

对于物体识别的研究虽然始于50多年前,但是直到最近几年,算法的性能才算真正达到自动驾驶相关的水平。2012年深度卷积神经网络(DCNN) AlexNet[21]一举玩穿了ImageNet挑战赛,开启了深度学习用于目标检测的浪潮。基于图像的目标检测survey也有很多,比如[22]。尽管目前最先进的方法基本都依赖于DCNN,但它们之间也存在明显的区别:1)单级检测框架(Single stage detection frameworks)使用单个网络同时生成对象检测位置和类别预测。2)区域生成检测框架(Region proposal detection frameworks)有两个不同的阶段,首先生成感兴趣的一般区域(候选区域),然后通过单独的分类器网络进行分类。
区域生成网络是目前比较先进的检测方法,不足是对计算能力要求高,不容易实现,训练和调整。相应的,单级检测算法具有推理速度快,存储成本低等优点,非常适合实时自动驾驶场景。YOLO[23]是当前十分流行的一种单级检测算法,也有许多改进的版本。YOLO的网络利用DCNN在粗网格上提取图像特征,显著地降低了输入图像的分辨率。之后用一个全连接的神经网络预测每个网格单元的类概率和边界框参数,这种设计使得YOLO速度非常快。另一种广泛使用的方法是单点检测器(Single Shot Detector,SSD)[24],它的速度甚至比YOLO更快。SSD与YOLO都在粗网格上进行检测,但是SSD也使用在DCNN早期得到的高分辨率特征来改进对小目标的检测和定位。
对于自动驾驶任务来说,可靠的检测是至关重要的,但同时也需要平衡精度和计算成本,以便规划和控制模块能有充足的时间来对检测结果做出反应。因此,目前SSD通常是ADS的首选检测算法。当然,区域生成网络(RPN)在目标识别和定位精度方面的性能已经远胜单级检测框架算法,并且近年来随着计算能力的不断提高,也许在不久的将来,RPN或者其他两阶段检测框架就能适用于ADS任务中。
基于图像的目标检测方法的主要不足大多来源于相机的天然缺陷,比如难以处理弱光条件,对于阴影,天气,光照变化的适应性不足等,尤其是监督学习的方法。一方面可以研究一些光照不变特征的方法,另一方面的话,通常来说,采用单传感器很难能适应各种复杂的现实情况,因此采用多传感器融合的策略是大势所趋。比如利用雷达或者红外传感器来处理低光条件下的目标检测等。

 语义分割

 这里简单谈一下我理解的图像分类,目标检测和语义分割的区别。图像分类是给你一堆图,告诉我每张图主要内容的类别,最经典的就是MNIST上的手写数字识别,输出是每张图代表什么数字。目标检测是输入一系列图,把每张图里我感兴趣的目标框出来,比如上面说的用YOLO做行人检测,输出就是用矩形框把每张图里的行人框出来。语义分割的任务是把图像里的每一个像素都归到某个类别里,有点像机器学习中聚类的概念。下面两张图左边是目标检测,右边是语义分割。

技术图片

 

 为什么自动驾驶需要研究语义分割呢?因为仅仅简单用矩形框把目标框出来的效果可能很差,尤其是在道路,交通线上。甚至我们应该更进一步进行实例分割(Instance segmentation),来区分不同轨迹和行为的对象。得益于目标检测的发展,分割方法逐渐在实时应用中变得可行。Mask R-CNN[25]是Faster R-CNN[26]的推广,多任务网络可以同时实现精确的边界框估计和实例分割,该方法可以用来进行行人姿态估计等任务。Mask R-CNN的速度可以达到每秒5帧,速度接近了实时ADS的要求。

与使用CNN使用区域生成网络进行目标检测不同,分割网络通常采用卷积的组合进行特征提取,然后利用反卷积(去卷积,deconvolutions)来获得像素级标签[27]。此外,特征金字塔网络(Feature pyramid networks)也被广泛使用,比如在PSPNet[28]中,它还引入了扩散卷积(dilated convolutions)进行分割。DeepLab[29]是目前最先进的对象分割模型,主要用到了稀疏卷积(sparse convolutions)的思想。
尽管大多数分割网络仍然太慢且计算量巨大,无法在ADS中使用,但需要注意的是,许多分割网络最初都是针对不同的任务(如边界框估计)训练的,然后在推广到分割网络。而且之后证明这些网络可以学习图像的通用特征表示并推广到其他任务当中。这也许提供了另一种可能性,利用单一的广义感知网络可以解决ADS的所有不同感知任务。

 

长篇自动驾驶技术综述论文(上)

标签:操作   eth   参考文献   校正   end   一个   匹配   不同的   内容   

原文地址:https://www.cnblogs.com/wujianming-110117/p/12928218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!