机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 ·...

10
SIGAI 人工智能平台 www.sigai.cn 机器学习在自动驾驶中的应用-以百度阿波罗平台为例【上】 作者:SIGAI 导言 自动驾驶是人工智能当前最热门的方向之一,也是未来将对人类生活会产生重大影响的 方向。机器学习在自动驾驶中有举足轻重的地位,从环境感知到策略控制,都有它的身影。 在本文中,SIGAI 将以百度阿波罗平台为例,介绍机器学习在自动驾驶系统中的应用,揭开 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以 来追求的目标。飞机的自动驾驶在多年前已经实现,空中的障碍物、交通情况比地面简单很 多,而且有雷达等手段精确定位。现阶段的重点是车辆的自动驾驶,目前,Google、百度、 特斯拉等公司都投入大量资源在这个领域进行研发,也取得了一些重要进展。 目前的自动驾驶系统由摄像机,激光雷达等传感器,控制器, GPS 定位系统,数字地图, 算法等多个部件构成,在这里我们重点介绍算法部分,尤其是机器学习技术在其中的应用情 况。 无人驾驶为什么需要机器学习? 很多人可能不理解为什么自动驾驶需要机器学习技术,让我们首先来看人是怎么驾驶车 辆的。现在要开车从清华大学东门去北京首都机场 T3 航站楼,你作为司机要完成这一次驾 驶任务。接下来你会怎么做? 1.首先,你要知道本次行驶的起始地和目的地。如果是老司机,你会知道按照什么样的 路线开到机场去;如果不是,则需要借助导航软件,它将为你计算出一条最优的行驶路径。 下面是搜狗地图为我们计算出来的路径:

Upload: others

Post on 17-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

机器学习在自动驾驶中的应用-以百度阿波罗平台为例【上】

作者:SIGAI

导言自动驾驶是人工智能当前最热门的方向之一,也是未来将对人类生活会产生重大影响的

方向。机器学习在自动驾驶中有举足轻重的地位,从环境感知到策略控制,都有它的身影。

在本文中,SIGAI 将以百度阿波罗平台为例,介绍机器学习在自动驾驶系统中的应用,揭开自动驾驶算法的神秘面纱。

自动驾驶简介

自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

来追求的目标。飞机的自动驾驶在多年前已经实现,空中的障碍物、交通情况比地面简单很

多,而且有雷达等手段精确定位。现阶段的重点是车辆的自动驾驶,目前,Google、百度、特斯拉等公司都投入大量资源在这个领域进行研发,也取得了一些重要进展。

目前的自动驾驶系统由摄像机,激光雷达等传感器,控制器,GPS定位系统,数字地图,算法等多个部件构成,在这里我们重点介绍算法部分,尤其是机器学习技术在其中的应用情

况。

无人驾驶为什么需要机器学习?很多人可能不理解为什么自动驾驶需要机器学习技术,让我们首先来看人是怎么驾驶车

辆的。现在要开车从清华大学东门去北京首都机场 T3航站楼,你作为司机要完成这一次驾驶任务。接下来你会怎么做?

1.首先,你要知道本次行驶的起始地和目的地。如果是老司机,你会知道按照什么样的路线开到机场去;如果不是,则需要借助导航软件,它将为你计算出一条最优的行驶路径。

下面是搜狗地图为我们计算出来的路径:

Page 2: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

这里涉及到定位,路径规划的问题。前者可以通过 GPS 或其他技术手段来实现,后者也有成熟的算法,如 Dijkstra或者 A*搜索算法,学过数据结构和算法的同学对 Dijkstra算法都不会陌生,它给出了计算图的两个节点之间最短距离的方案。目前,这一问题已经很好的

解决了,而且计算机比人要强。2.接下来,你就要启动汽车开始行驶了。首先你要知道的是:路在什么地方?应该上哪

个车道?

这就是机器学习登场的时候了,它要解决路面和车道线检测问题。目前主流的自动驾驶

系统一般都采用了激光雷达+摄像机+其他传感器相结合的方案。无论是激光雷达扫描得到的3D距离数据,还是摄像机成像的 2D数据,我们都要对它们进行分析,以准确的确定路面的位置,车道线和每个车道的范围。

3.在找到了道路和车道之后,我们就要开始行驶了,你要控制油门,刹车,方向盘。现在问题又来了,怎么开?

Page 3: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

你得知道路上有没有车,有没有人,有多少车,有多少人,以及其他障碍物,它们在路

面的什么地方。这又是机器学习和机器视觉要解决的问题,同样是检测问题。我们需要对激

光雷达或者摄像机的图像进行分析,得到这些障碍物的准确位置。4.行驶过程中,你遇到的这些行人,车辆都是移动的,因此你必须要对他们的运动趋势

做出预判。你前面的车辆、后面的车辆的行驶速度和轨迹都会影响你要采取的动作。如果有

人要过马路,距离你还有 30米,你是停下来等他过去,还是慢速行驶过去?

这是机器视觉中的目标跟踪问题,我们要准确的跟踪出人,车辆,动物等移动目标的运

动轨迹,估计出他们的运动速度与方向,以便于做出决策。5.行驶一会儿之后,你遇到了第一个十字路口,这里有红绿灯,当前是红灯,因此你需

要停下来等待,而不是硬闯过去,这又涉及到一个问题,你怎么知道这些交通灯?

Page 4: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

这依然是机器视觉要解决的问题,即准确的检测出图像中的交通灯,并知道它们当前的

状态。除了红绿灯之外,还有其他交通标志需要我们识别,比如速度限制、是否允许调头等。6.还有一个问题没有解决,在知道这些环境参数之后,我们该怎么行驶?即根据环境参

数得到要执行的动作,在这里是车辆行驶的速度(速度是一个矢量,具有大小和方向)。最

简单的做法是用规则来做决策,我们总结出人驾驶车辆的经验,前面没有车,后面没有车的

时候该怎么行驶;前面有 2 辆车,后面有 3 辆车的时候该怎么行驶.....。问题是:各种情况实在是太多了,我们无法穷举出所有的情况。

对于这个问题的一个解决方案是深度强化学习,和 AlphaGo类似的一种技术,这也是一种机器学习算法。它的思路是根据环境的参数预测出要执行的动作,我们用一些数据进行训

练,得到这样一个模型,也就是人开车时的经验,然后用它来做决策。但是这种方法有一个

严重的问题,神经网络的预测结果不具有可解释性,有时候会出现莫名其妙的结果,这会严

重影响安全性。关注过 AlphaGo的同学都知道,在一次对战中,它下出了一个完全无法理解的棋,对于自动驾驶来说,这可能是一个灾难。

在列出了自动驾驶中所需要用机器学习解决的问题之后,接下来我们将以百度阿波罗平

台为例,看看这些问题是怎么解决的。

百度阿波罗平台简介阿波罗(Apollo)是百度的无人驾驶开放平台,和当年的阿波罗登月计划同名,对于这

一计划,时任美国总统约翰肯尼迪有一句经典的名言:我们选择在这个 10年登上月球并完成其他计划,并不是因为它容易完成,而是因为它

充满挑战,因为(登月)这一目标可以整合并检验我们最出色的能力和技能在 2017年百度已经宣布阿波罗开源,目前有大量的厂商已经接该平台进行合作。我们

可以通过阅读它的源代码和文档来了解其所采用的技术。阿波罗的官网地址是:http://apollo.auto/源代码,文档与数据下载地址为:https://github.com/apolloauto

Page 5: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

在这里需要申明的是,SIGAI 的作者与百度以及阿波罗平台没有任何商业和其他关系,我们纯粹是站在技术和产品角度,以第三方的视角来分析他们的技术。

先看看阿波罗官方对目前状态的整体介绍:阿波罗 2.5版本的目标是用低成本的传感器实现自动驾驶。它能让车辆保持在某一车道

上,并与前面最近的车辆保持距离,这通过一个前视摄像头,以及前视雷达来实现。对摄像

头图像的分析采用了深度神经网络,随着样本数据的累积,神经网络的预测将越来越准。官

方说明,目前不支持在高度弯曲,没有车道线标志的道路上行驶。首先来看它软件部分的整体结构(下图截取自阿波罗官网):

在这里,我们重点关注的是感知模块,其他模块以后有机会的话会写文章分别介绍。

感知模块首先来看感知模块,它为我们提供了类似人类眼睛所提供的视觉功能,即理解我们所处

的驾驶环境。首先来看阿波罗官方对感知模块的介绍(以下两段话引用了他们的原文):“Apollo 2.0感知模块包括障碍物检测识别和红绿灯检测识别两部分。障碍物检测识别

模块通过输入激光雷达点云数据和毫米波雷达数据,输出基于两种传感器的障碍物融合结

果,包括障碍物的位置、形状、类别、速度、朝向等信息。红绿灯检测识别模块通过输入两

种焦距下的相机图像数据,输出红绿灯的位置、颜色状态等信息。上述两大感知功能,使无

人车具备在简单城市道路自动驾驶的能力,希望能够对无人驾驶社区有帮助。如果对算法细

节有兴趣,请查阅 github上的技术文档。”“通过安装在车身的各类传感器如激光雷达、摄像头和毫米波雷达等获取车辆周边的环

境数据。利用多传感器融合技术,车端感知算法能够实时计算出环境中交通参与者的位置、

类别和速度朝向等信息。背后支持这套自动驾驶感知系统的是多年积累的大数据和深度学习

技术,海量的真实路测数据经过专业人员的标注变成机器能够理解的学习样本,大规模深度

学习平台和 GPU 集群将离线学习大量数据所耗费的时间大幅缩短,训练好的最新模型通过在线更新的方式从云端更新到车载大脑。人工智能+数据驱动的解决方案使百度无人车感知系统能够持续不断的提升检测识别能力,为自动驾驶的决策规划控制模块提供准确、稳定、

可靠的输入。”从这里可以看到,他们采用了摄像机,激光雷达,毫米波雷达等多种传感器,用深度学

习技术对这些传感器采集的数据进行分析,以确定车辆当前所处环境中的交通参与者,这里

的参与者是指人,车等重要目标。整个感知模块的结构如下图所(该图来自阿波罗在 github上的公开文档):

Page 6: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

从上图可以看出,核心的算法包括:车道检测目标检测车道线检测目标跟踪轨迹管理相机标定预测算法规划算法在这里我们重点介绍前面 4个算法。

道路和车道线识别车道线属于静态目标,不会移动。准确的确定车道线,不仅对车辆的纵向控制有用,还

对横向控制有用。车道线由一系列的线段集合来表示。首先,用卷积神经网络对摄像机采集

的图像进行处理,预测出车道线的概率图,即每一点处是车道线的概率。然后,对这种图进

行二值化,得到分割后的二值图像。接下来计算二值图像的联通分量,检测出所有的内轮廓,

然后根据轮廓边缘点得到车道的标志点。从他们的描述文档看,核心的一步是用卷积神经网

络预测出图像每一点是车道线的概率。

障碍物检测识别下面来看官方对障碍物检测模块的描述:“障碍物模块包括基于激光雷达点云数据的障碍物检测识别、基于毫米波雷达数据的障

碍物检测识别以及基于两种传感器的障碍物结果融合。基于激光雷达点云数据的障碍物检测

识别,通过线下训练的卷积神经网络模型,学习点云特征并预测障碍物的相关属性(比如前

景物体概率、相对于物体中心的偏移量、物体高度等),并根据这些属性进行障碍物分割。

基于毫米波雷达数据的障碍物检测识别,主要用来对毫米波雷达原始数据进行处理而得到障

碍物结果。该算法主要进行了 ID 扩展、噪点去除、检测结果构建以及 ROI 过滤。多传感器障碍物结果融合算法,用于将上述两种传感器的障碍物结果进行有效融合。该算法主要进行

Page 7: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

了单传感器结果和融合结果的管理、匹配以及基于卡尔曼滤波的障碍物速度融合。具体算法

请参阅 github技术文档。”从这里可以看出,对障碍物的检测与车道线检测不同,这里采用的是基于激光雷达和毫

米波雷达的数据。这是出于安全的考虑,如果采用摄像机,在恶劣天气如雨雪,以及极端光

照条件下,图像将无法有效的分析,另外,激光雷达和毫米波雷达给出了物体准确的距离数

据,这对安全的行驶至关重要,而单纯靠图像数据分析则很难做到。接下来我们看他们对神经网络实现方案的描述:“Deep network ingests an image and provides two detection outputs, lane lines and

objectsforApollo2.5.Thereisanongoingdebateonindividualtaskandco-trainedtaskfordeeplearning. Individualnetworks suchasa lanedetectionnetworkoranobjectdetectionnetworkusually perform better than one co-trained multi-task network. However, with given limitedresources, multiple individual networks will be costly and consume more time in processing.Therefore,fortheeconomicdesign,co-trainisinevitablewithsomecompromiseinperformance.InApollo2.5,YOLO[1][2]wasusedasabasenetworkofobjectand lanedetection.Theobjecthasvehicle,truck,cyclist,andpedestriancategoriesandrepresentedbya2-Dboundingboxwithorientation information. The lane lines are detected by segmentation using the same networkwithsomemodification.”

这里他们考虑了两种方案:车道线检测和障碍物检测使用同一个神经网络,以及各自使

用一个神经网络。后者的准确率更高,但更耗费计算资源,而且处理时间可能会更长。最后

选用的是第一种方案。具体的,采用了 YOLO[1][2]作为基础网络来进行目标和车道检测。目前区分的目标有汽车,自行车,行人。这些目标都用一个 2D的矩形框表示,并且带有朝向信息。车道线用同一个网络的输出得到,使用了图像分割技术。在之前的 SIGAI公众号文章“基于深度学习的目标检测算法综述”中我们已经简单介绍了 YOLO和其他主要的算法,感兴趣的读者可以阅读,如有需要。实现时,使用了 Caffe。

阿波罗将目标分为两种类型,静态的和动态的,下面来看他们的描述:“Inatrafficscene,therearetwokindsofobjects:stationaryobjectsanddynamicobjects.

Stationary objects include lane lines, traffic lights, and thousands of traffic signs written indifferent languages. Other than driving, there are multiple landmarks on the road mostly forvisual localization including streetlamp, barrier, bridge on top of the road, or any skyline. Forstationaryobject,wewilldetectonlylanelinesinApollo2.5.”

静态的目标包括车道线,交通灯,其他各种写有文字的交通标志。除此之外,路上还有

一些标志可用于视觉定位,包括路灯,栅栏,天桥,地平线等。下面来看对动态目标的描述:“Amongdynamicobjects,wecarepassengervehicles,trucks,cyclists,pedestrians,orany

otherobjectincludinganimalorbodypartsontheroad.Wecanalsocategorizeobjectbasedonwhichlanetheobjectis in.ThemostimportantobjectisCIPV(closestobjectinourpath).Nextimportantobjectswouldbetheoneinneighborlanes.”

动态目标目前关注的是车辆,自行车,行人,动物等。在这些目标中,最重要的是道路

上离我们最近的物体,其次是相邻车道上的物体。“Givena2Dbox,withits3Dsizeandorientationincamera,thismodulesearchesthe3D

position inacameracoordinatesystemandestimatesanaccurate3Ddistanceusingeither thewidth, theheight,or the2Dareaof that2Dbox.Themoduleworkswithoutaccurateextrinsiccameraparameters.”

Page 8: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

目标跟踪

在检测出各个运动目标之后,接下来需要准确的跟踪这些目标,得到他们的运动参数和

轨迹。目标跟踪是一个状态估计问题,这里的状态就是目标的位置,速度,加速度等参数。

跟踪算法可以分为单目标跟踪和多目标跟踪两类,前者只跟踪单个目标,后者可以同时跟踪

多个目标。跟踪算法的数据来源是目标检测的输出结果,即在每一个时刻先检测出路上的移动目

标,得到他们的位置,大小等信息,然后对不同时刻的这些数据进行分析,得到目标的状态

和运动轨迹。单目标跟踪算法的核心是估计出单个目标的位置,速度,加速度等状态信息,典型的算

法有卡尔曼滤波,粒子滤波等。和单个目标跟踪不同,多目标跟踪需要解决数据关联问题,即上一帧的每个目标和下一

帧的哪个目标对应,还要解决新目标出现,老目标消失问题。多目标的跟踪的一般流程为每

一时刻进行目标检测,然后进行数据关联,为已有目标找到当前时刻的新位置,在这里,目

标可能会消失,也可能会有新目标出现,另外目标检测结果可能会存在虚警和漏检测。联合

概率滤波,多假设跟踪,线性规划,全局数据关联,MCMC马尔可夫链蒙特卡洛算法先后被用于解决数据关联问题来完成多个目标的跟踪。

首先我们定义多目标跟踪的中的基本概念,目标是我们跟踪的对象,每个目标有自己的

状态,如大小、位置、速度。观测是指目标检测算法在当前帧检测出的目标,同样的,它也

有大小、位置、速度等状态值。在这里,我们要建立目标与观测之间的对应关系。下面是一

个数据关联示意图:

在上图中,第一列圆形为跟踪的目标,即之前已经存在的目标;第二列圆为观测值,即

当前帧检测出来的目标。在这里,第 1个目标与第 2个观察值匹配,第 3个目标与第 1个观测值匹配,第 4个目标与第 3个观测值匹配。第 2个和第 5个目标没有观测值与之匹配,这意味着它们在当前帧可能消失了,或者是当前帧没漏检,没有检测到这两个目标。类似的,

第 4个观测值没有目标与之匹配,这意味着它是新目标,或者虚警。下面我们看对阿波罗官方对跟踪的描述:“Theobjecttrackingmoduleutilizesmultiplecuessuchas3Dposition,2Dimagepatches,

2D boxes, or deep learning ROI features. The tracking problem is formulated ase multiplehypothesis data association by combining the cues efficiently to provide the most correctassociationbetween tracks anddetectedobject, thusobtaining correct ID association for each

Page 9: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn

object.”这里采用了多种线索来跟住目标,包括 3D 坐标,2D 图像块,2D 包围盒,以及通过深

度学习得到的 ROI 特征。对于多目标跟踪,这里采用了多假设跟踪算法[3],这种算法最早用于雷达数据的跟踪,如果对它感兴趣,可以阅读参考文献。

红绿灯检测识别

下面来看对红绿灯检测算法的描述:“红绿灯模块根据自身的位置查找地图,可以获得前方红绿灯的坐标位置。通过标定参

数,可以将红绿灯从世界坐标系投影到图像坐标系,从而完成相机的自适应选择切换。选定

相机后,在投影区域外选取一个较大的感兴趣区域,在其中运行红绿灯检测来获得精确的红

绿灯框位置,并根据此红绿灯框的位置进行红绿灯的颜色识别,得到红绿灯当前的状态。得

到单帧的红绿灯状态后,通过时序的滤波矫正算法进一步确认红绿灯的最终状态。我们提出

的基于 CNN 的红绿灯的检测和识别算法具有极高的召回率和准确率,可以支持白天和夜晚的红绿灯检测识别。具体算法请参阅 github技术文档。”

模型数据

下图是感知模块中的一些模型和参数:

cnn_segmentation目录下是用于车道线分割的模型。traffic_light目录下有交通灯检测模

型。yolo_camera_detector 目录下有 YOLO 检测器的配置文件。感兴趣的读者可以进一步阅读。

参考文献[1] J Redmon, S Divvala, R Girshick, A Farhadi, "You only look once: Unified, real-time objectdetection,"CVPR2016.[2]JRedmon,AFarhadi,"YOLO9000:Better,Faster,Stronger,"arXivpreprint.[3] Donald B Reid. An algorithm for tracking multiple targets. 1979, IEEE Transactions onAutomaticControl.

Page 10: 机器学习在自动驾驶中的应用 以百度阿波罗平台为例【上】 · 自动驾驶算法的神秘面纱。 自动驾驶简介 自动驾驶的目标是让交通工具能够自主行驶,典型的是飞行器和车辆,这是人类长期以

SIGAI人工智能平台 www.sigai.cn