【智驾深谈】深度学习驱动的自动驾驶新主流框架盘点(附3篇论文)

本文主要是介绍【智驾深谈】深度学习驱动的自动驾驶新主流框架盘点(附3篇论文),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大背景


基于深度学习架构的人工智能如今已被广泛应用于计算机视觉、自然语言处理、传感器融合、目标识别、自动驾驶等汽车行业的各个领域,从自动驾驶初创企业、互联网公司到各大OEM厂商,都正在积极探索通过利用GPU构建神经网络实现最终的自动驾驶。

 

高阶ADAS系统的开发以至自动驾驶系统的开发都有赖于一套能够完整支持开发、模拟测试、原型制作和量产的开放式解决方案。本文将介绍基于深度学习架构的自动驾驶平台,这一架构将成为未来实现自动驾驶的集成平台中的重要一环。

 

深度学习是什么

 

深度学习是目前人工智能领域最流行的技术。深度神经网络由一些列简单可训练的神经元组成,这些单元相互协作可以学习完成甚至像驾驶这样的复杂任务。

 

深度学习可以说是计算机从数据中提取决策依据的一个过程。与传统的基于算法的系统相比,其最大的不同在于给定模型之后,深度学习系统可以自动地学习如何完成给定的任务,这些任务不仅可以是识别图像和语音,甚至可以是控制无人机执行任务或是让汽车自动行驶。深度学习(译者:在一定程度上)模拟了人脑从外界环境中学习、理解甚至解决模糊歧义的过程。

 

ImageNet

 

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

ImageNet近年来准确率的提升


近年来深度学习进展的一个直观的体现就是ImageNet竞赛。在这个竞赛中参赛算法在数千图像和视频的大规模数据上测试检测和分类的正确率。2012年之前,竞赛中物体的识别率一直提升得非常缓慢(低于70%)。在2012年引入深度学习之后,识别率一跃升至80%,现在已超过95%。深度学习已经取代了传统视觉方法在这一竞赛中的地位。


高科技公司的深度学习研究

 

Facebook是最早使用GPU加速DNN训练的公司之一。深度网络和GPU在Facebook人工智能研究院(FAIR)推出的专门用于深度学习训练的计算平台中扮演着重要的作用。Facebook寄希望以此推动机器智能的发展并帮助人们更好的交流。

 

Google也在深度学习领域投入了大量力量。Tensorflow是Google的第二代机器学习系统,用来理解学习大规模数据和模型。这一系统非常灵活可适用于图像、语音、文字理解等不同应用。Google使用了上千块GPU并在性能上较同等CPU极大的提升。

 

据Google的计算机视觉科学家AneliaAngelova透露,Google同时在尝试使用级联的深度网络解决自动驾驶问题。

 

老套路和深度智驾

 

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


上图展示了典型的自动驾驶的工作流程。通过相机、激光、雷达和声纳,车辆可以对周围的静态和动态环境进行360度的精确鲁邦感知。在障碍物的检测识别中使用深度网络可以使得传感器融合数据的精准程度得到显著的提升,为后续的感知、定位、规划和决策提供依据。其中的第一项“感知”,包括了传感器融合(整合多传感器的数据),物体检测(发现障碍物),物体分类(“障碍物是行人”),物体分割(“行人位于道路右侧”)和障碍物跟踪(“行人在向左移动”)。

 

第二项“定位”包括了地图融合(整合多来源地图数据),基于地标或GPS的三角测距。精确的定位是自动驾驶车辆在路上安全形势的重要前提,整合例如HERE等高精度图数据的能力是对车辆进行精确定位的必要条件。

 

最后的“路线规划”制定了车辆的运动轨迹和行为。自动驾驶汽车需要保证在动态环境中的任何可能的危险状况下都安全行驶。找出可行驶区域或是预测环境的变化都需要复杂的算法设计予以支撑。此外,还需要保证车辆可以平顺的行驶以免影响乘坐体验或其他车辆带来干扰。复杂的路径规划算法需要综合考虑上述所有因素以保证最终理想的乘坐体验。

 

实现这些,光凭一个所谓的智能相机是不够的。物体的检测分类、地标的识别、驾驶行为的适配已经车辆的行为决策,上述所提到的每一步都需要深度网络的参与。另外深度网络本身构成了一个平台,不同的OEM或Tier1供应商都可以在其基础上进行扩展并构建自己专有的解决方案。

 

深度学习的套路

 

深度网络包含了多层神经元。在物体识别任务中,底层的神经元通常学得了对边缘的检测,而第二层的神经元可能学得识别例如三角形或矩形等复杂的形状,第三层或再往上则识别更复杂的形状。对于给定的任务,则需要根据这些特性选择合适的网络层数和配置,也称作网络模型。

 

自动驾驶问题的难点在于城市环境下的驾驶场景是十分复杂和难以预测的。所以需要通过融合多种传感器的数据来实现感知、定位、决策和规划。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

 

这一场景十分适用于使用深度学习技术。例如Caffe等深度学习框架可以方便地用来进行深度学习训练。Caffe由Berkeley Vision and Learning Center和开源社区参与者共同开发。其设计兼顾了简明、速度和模块化,很适合用于解决自动驾驶等任务。

 

紧接着是在这个框架下针对一个任务比如物体检测和识别进行设计和训练。和体育训练需要教练一样,深度网络训练也需要监督指导。评价函数定义了网络期望输出和实际数据的差别,称作预测误差。误差用于调节各神经元之间的权重和偏移。训练将使得网络对于同一输入的预测误差越来越小。这中变化由外部数据自动计算得出,不需要人为介入。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

 

进行训练需要首先收集驾驶场景并进行标注物体类别或驾驶决策,建立训练数据的数据库,用以对模型进行训练。

 

接下来,训练好的网络在录播数据或者模拟器中进行离线测试。测试通过之后,则可以将模型载入ECU进行实际路测。对于自动驾驶系统的其他深度网络模块使用同样的方法训练,最终实现端到端的驾驶系统的训练。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

图5展示了一个现实中的驾驶场景,图像来自真实的美国高速公路场景。数据将被输入基于深度网络的自动驾驶系统,并在下方显示了预测结果。中间白色的是行驶车辆,在左侧识别出了两辆车(灰色),右后方识别出了一辆汽车。基于这些车辆的位置和速度,路径规划系统计算出可能的行驶路径(绿色),并最终选择合适的路径。

 

三家代表性深度学习自动驾驶解决方案

 

英伟达的DRIVE解决方案


英伟达论文下载https://pan.baidu.com/s/1bo4jTvx


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy
 

如图6,NVIDIA提供了用于训练、测试和应用的集成的自动驾驶解决方案。NVIDIA DRIVE解决方案为车厂、Tier1供应商和自动驾驶研究机构提供了强大灵活的解决方案让车辆可以感知、决策和学习。解决方案平台包含了训练平台NVIDIA DGX-1和用于车载计算的PX2。链接两者之间的是用于开发、模拟测试的的NVIDIA DriveWorks软件开发工具。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

DriveWorks支持在PX2上实现传感器同步、标定、数据采集和记录等一系列复杂过程。

 

Mobileye的自动驾驶布局


Mobileye论文下载:https://pan.baidu.com/s/1pK9ldrH


Mobileye在自动驾驶的布局分为三个部分,可以认为是三个阶段:感知、高精地图和驾驶决策。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


当前比较成熟的,是它的感知技术,已经大量运用在已有产品中,主要提供一个环境模型(Environmental Model),包括运动和静止的物体、车道线、可行驶区域和交通标志等。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


多年的积累,让Mobileye在环境模型方面能够提供的内容远超竞争对手,在别人还在尝试提高单一车道线的检测精度时,Mobileye已经可以提供道路的语义级特征描述,例如当前行驶车道的左右车道线、左右车道的左右线以及道路分叉等等,均通过深度神经网络识别。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


谈到深度学习,就需要提一下现在很火的End-to-End方法。智驾深谈第一期的时候,我们曾经介绍了独行侠GeoHot和他的Comma.ai,Shashua对于端到端方法也有自己的看法,简单来说是不看好的。他认为端到端不考虑专家经验,不考虑领域知识,不考虑人工监督,对极端情况(Corner Cases)的应变能力比较差。相比来讲,Mobileye将感知任务划分成多个模块,每个对应一个人工监督的神经网络,所得出的效果已经可以产品化。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


第二个方面,是高精度地图技术(称作REM,Road Experience Management),该技术是自动驾驶不可或缺的支撑,区别是是否使用复杂的3D激光雷达来采集和制作地图,Shashua认为并不需要,而是通过图像中丰富的纹理和色彩特征来生成地图。Mobileye采取的策略是三维上稀疏,地面一维稠密的结构,三维元素不会包括原始图像数据,而是经过识别后的语义信息。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


地面一维的信息则包括的比较多,建立了一个道路模型,包括车道线的精确位置、连接关系等。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


值得一提的是,当前高精度地图供应商,在生产和维护地图方面成本很高,而Mobileye则采取群体智能的方式来解决这个问题,通过大量装配在量产车上的Mobileye现有产品来分布式收集和更新数据。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


第三个方面,也是自动驾驶技术公认的难点,即决策与规划技术。目前Mobileye也在利用深度学习进行初步的尝试,跟DeepMind采用的DQN网络不同,他们还考虑了驾驶过程中的时序性。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


Comma.ai 的方法


Comma.ai正在采用的办法,叫做End-to-End(端到端方法),指以摄像头的原始图像作为输入,直接输出车辆的速度和方向,中间用某种数学模型来拟合逼近最优驾驶策略,目前常用的就是深度学习模型。


新智元【智驾深谈】曾在8月6日报道,comma.ai的创始人GeoHot把公司的自动驾驶技术和代码开源,代码采用Python语言编写,涉及tensorflow,anaconda,cv2等多个常用深度学习常用开发框架。


comma.ai 论文下载:https://pan.baidu.com/s/1pLPawVh


深度学习端到端:数据准备

                       640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

驾驶数据是本次开源的重要组成部分,不但包括前视摄像头裁剪的数据,共计7.25小时,分为11个视频,160*320大小,并且还包括了GeoHot那辆讴歌采集的转向、制动、速度以及惯导数据,以及图像输入和控制输出的同步时间戳数据。本次发布的论文主要聚焦在通过图像输入来学习控制转向和速度,GeoHot将图像缩小为80*160并将像素值归一化。


深度学习端到端:模型介绍


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

目前深度学习用于自动驾驶可以大概分为两类,一类是收集驾驶数据,离线训练模型,不断逼近人类驾驶员;另一类是在模拟器中,利用Q函数,不断自我决策和试错来提高驾驶技术。由于真正图片的复杂以及输出命令的连续性,使得现实世界中能够得到好结果比较困难,所以我们目前见到的很多都是在模拟器中尝试。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


本次GeoHot开源的是第一种方法,且是在真实道路上经过实测的。其基本原理是,将摄像头获得的图像数据,利用Autoencoder编码(如上图锁匙,期间还用到最近很火的GAN),然后用一个RNN深度网络来从人类驾驶数据中学习,最终预测下一步操作。


结语


自动驾驶产业不断推进,对技术的要求也日益增加,深度学习方法利用大量数据,自动学习感知决策,可极大加速产品研发,给出惊人的效果,或将成为自动驾驶领域的黑科技。


文章转自新智元公众号,原文链接

这篇关于【智驾深谈】深度学习驱动的自动驾驶新主流框架盘点(附3篇论文)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483566

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动