前言
前言
目前汽车发展的趋势是智能化、电动化以及共享化。随着对自动驾驶汽车的需求不断增加,越来越多的大型企业以及一些创业公司,投入了大量的人力和资源到自动驾驶这个产业中。作为未来自动驾驶的心脏,自动驾驶芯片的设计必须作为其核心技术,得到充分的投入和发展。我从2012年开始接触汽车辅助驾驶项目,主要从事辅助驾驶、影像、计算机视觉算法和芯片设计的相关工作,对这个行业的发展有一定的理解。这些年来的芯片行业经验告诉我们,芯片的设计涉及对算法的深入理解、严格的硬件开发流程、相对成熟的软件架构设计,以及对工程流程的严格执行和管理。
本书共13章。第1章主要介绍自动驾驶目前遇到的挑战和研究方向。第2~6章主要介绍自动驾驶的算法设计部分。要开发一款自动驾驶芯片,首先应该对自动驾驶的算法,如物体检测、多传感器融合等进行充分的调研,做大量的仿真实验,用来覆盖更多的场景。其中第2~4章主要介绍自动驾驶方面的几个算法。当然,涉及自动驾驶的算法有很多,远远不止这些,本书只能起到抛砖引玉的作用,希望读者能阅读大量的最新技术文章,做大量的实验,用来确保自己开发的算法具有一定的鲁棒性和准确性。第5章主要介绍高清地图的开发,目前很多创业公司的业务主要集中在高清地图的生成上。自动驾驶的技术水平还处于“按图索骥”的状态,如何快速、准确地生成高清地图也是目前的一个商机。开发出了自动驾驶算法,那么如何测试这些算法呢?第6章主要介绍一些开源的仿真器,用来测试、评估自动驾驶算法。
第7~10章是关于芯片的内容。有了成熟、相对稳定的算法,如何将其部署到汽车里面?一种方法是利用现成的商用芯片。目前一些大型半导体芯片企业,比如德州仪器、英伟达以及高通等公司,都提供了商业级别的SoC芯片,用来支撑汽车辅助驾驶或者自动驾驶的应用。其中第7章重点介绍一些商用芯片如何支撑自动驾驶的算法实现。目前很多自动驾驶算法都是基于深度学习开发的,因此模型优化是一个非常重要的课题。第8章介绍目前存在的一些模型压缩算法。第9章和第10章重点介绍如何开发深度学习的专用加速芯片,以及如何开发SoC的自动驾驶芯片。同时,我认为,适用于自动驾驶的图像传感器处理芯片和自动驾驶专用的深度学习加速器芯片,是目前存在的机会。本书也将介绍一些硬件的开源代码,比如NVDLA,有兴趣的读者可以参考。
第11章和第12章是关于自动驾驶软件架构设计的内容。要开发一款芯片,必须配备成熟的软件架构以及一些开发工具,以使开发人员更好地使用芯片。其中第11章主要介绍目前在自动驾驶领域涌现出来的一些操作系统。第12章主要介绍一些基于安全功能的软件开发架构和流程。
第13章简要介绍如何将5G用于车联网来提高自动驾驶的体验。
对于每个部分,有兴趣的读者也可以从本书中挖掘潜在的科研项目和产品。比如,对算法感兴趣的读者,可以开发多传感器的融合算法(第2章和第3章);对高清地图感兴趣的读者,可以了解高清地图是如何建立的(第5章),目前硅谷很多创业公司都在开发定制高清地图;如果有了很好的自动驾驶算法,则也可以利用模型压缩的软件方法(第8章),直接在英伟达、高通、德州仪器的自动驾驶平台上实现其产品的原型(第7章)。对硬件开发感兴趣的读者,可以参考深度学习芯片的设计(第9章)以及自动驾驶SoC芯片的设计(第10章)。特别是开源的NVDLA,做硬件设计的读者,可以参考此开源代码来设计定制的ASIC芯片。关于自动驾驶芯片的ASIC,我认为开发数字影像处理芯片以及自动驾驶专有的深度学习芯片是一个不错的方向。特别是数字影像处理芯片的设计,如何满足HDR以及快速运动的物体是一个很大的挑战,但也是一个机遇。对软件开发有兴趣的读者,可以参考软件架构设计(第12章),如何在开源代码的基础上开发属于自己的自动驾驶软件产品,这和以前的软件开发不同,需要考虑安全性能。当然,本书参考了大量的开源代码和文献,历时半年完成,其中耗费了作者大量的时间和精力。后续希望有兴趣的投资人给予一些赞助,利用作者多年的半导体开发管理经验,招聘几个工程师,把这些开源代码串起来,形成一本更具实战性的教科书,或者开发出一些更具适用性的产品。
本书的一个重要特点是结合最新发表的学术论文和开源代码,详细论述了自动驾驶芯片设计的大致过程。不但有理论基础,还有很多开源代码,为读者提供大量的实战经验,锻炼动手能力。另外,芯片设计涉及多个不同部门、不同领域的人才的合作和交流,因此,严格的流程管理、规范的代码管理、合格的文档输出,还有有效的部门沟通,在项目实施过程中都非常重要。但是,比较遗憾的是,我没有办法把这些多年的半导体开发经验写到本书里。
编写本书,旨在期望大学本科生、研究生甚至博士生能够从本书中获得一点启发,能够以严谨的学术态度充分论证每一个算法,脚踏实地地设计自动驾驶芯片,为中国的自动驾驶芯片的开发做出一点贡献。
编写本书,要感谢我的老师,西北工业大学计算机学院的蒋立源教授,没有他的鼓励和审稿,这本书是不可能写出来的。我利用工作之余,历时很长时间才完成本书的初稿,其中蒋老师也花费了大量的精力帮我通篇修改。他现在虽是耄耋老人,比我年长四十多岁,但这并不妨碍我们之间的友谊,从2002年上了蒋老师的一门“计算的数学理论”课后,我们就成了“忘年交”。从西北工业大学校园长凳上的长谈,到西北工业大学巴国布衣的餐厅,我们亦师亦友,讨论生活、学业,蒋老师鼓励我留学美国。自从我来美国后,我们中断了十四年的联系,这里要向蒋老师说声对不起,恳请您原谅。自从2019年恢复联系以来,我们就成了无话不说的知心朋友,蒋老师一直鼓励我为母校做些贡献,但我自知愚笨,才疏学浅,只能期望和老师合作编写一本书,见证我们的师生情谊。如果本书对读者有一点帮助,我将颇感欣慰。
由于水平有限,书中谬误及不当之处在所难免,希望大家给予批评指正。
导语摘要
目前自动驾驶的一个发展趋势就是智能化。随着人工智能的飞速发展以及各种新型传感器的涌现,汽车智能化形成趋势,辅助驾驶功能的渗透率越来越高。这些功能的实现需要借助于摄像头、雷达、激光雷达等新增的传感器数据,其中视频处理需要大量并行计算。然而,传统CPU算力不足,而DSP擅长图像处理,对于深度学习却缺乏足够的性能。尽管GPU擅长训练,但它过于耗电,影响汽车的性能。因此,本书着眼于未来,认为定制化的ASIC必将成为主流。本书以自动驾驶的芯片设计为最终目标,来论述设计一个面向未来的自动驾驶SoC芯片的学术支撑和工程实践。本书共13章。其中第1章主要介绍自动驾驶目前遇到的挑战和研究方向。第2~6章重点讲述环境感知以及规划控制方面的算法设计;第7~10章重点讲述深度学习模型的优化和深度学习芯片的设计;第11章和第12章重点讲述具有安全功能的自动驾驶软件架构设计;第13章介绍5G车联网。
作者简介
任建峰,博士,目前就职于谷歌公司,分别于2005年和2009 年获得西北工业大学模式识别与智能系统博士学位和美国得州大学达拉斯分校电子工程博士学位,从事计算影像学、自动驾驶方面芯片算法研发工作,在高通、华为海思工作多年,发表论文40多篇,拥有30多项美国专利。
目录
第1章 自动驾驶芯片的挑战1
1.1 自动驾驶科技界现状1
1.2 自动驾驶设计的挑战2
1.2.1 功能约束3
1.2.2 可预测性约束3
1.2.3 存储限制4
1.2.4 热量约束4
1.2.5 功率约束5
1.3 自动驾驶系统算法设计5
1.3.1 感知6
1.3.2 决策7
1.3.3 控制8
1.3.4 安全验证与测试9
1.4 自动驾驶系统计算平台10
1.4.1 GPU11
1.4.2 DSP11
1.4.3 FPGA11
1.4.4 ASIC12
参考文献12
第2章 3D物体检测14
2.1 传感器15
2.1.1 摄像机15
2.1.2 激光雷达15
2.2 数据集16
2.3 3D物体检测方法17
2.3.1 基于单目图像的检测方法18
2.3.2 基于点云的检测方法19
2.3.3 基于融合的检测方法22
2.4 实战项目:3D物体检测24
2.4.1 算法概述25
2.4.2 点云预处理26
2.4.3 网络结构28
2.4.4 欧拉区域提议28
2.4.5 锚盒设计29
2.4.6 复角度回归30
2.4.7 损失函数的构建30
2.4.8 实验结果31
2.4.9 训练细节31
2.4.10 鸟瞰检测32
2.4.11 3D对象检测32
2.5 未来研究展望33
参考文献33
第3章 车道检测37
3.1 传统图像处理38
3.2 实例:基于霍夫变换的车道检测39
3.2.1 霍夫变换40
3.2.2 OpenCV车道检测41
3.3 实例:RANSAC算法及直线拟合42
3.3.1 算法思路43
3.3.2 用Python实现直线拟合43
3.4 基于深度学习45
3.5 多传感器集成方案47
3.6 车道检测系统评估标准49
3.6.1 车道检测系统性能的影响因素49
3.6.2 离线评估50
3.6.3 在线评估51
3.6.4 评估指标52
3.7 实战项目:车道检测53
3.7.1 概述53
3.7.2 车道点实例网络53
3.7.3 调整大小层54
3.7.4 相同瓶颈层55
3.7.5 下采样瓶颈层和上采样瓶颈层56
3.7.6 损失函数58
3.7.7 后处理方法61
3.7.8 实验结果62
3.7.9 测试部分62
参考文献63
第4章 运动规划和控制68
4.1 概述68
4.2 传统自动驾驶的规划和决策层69
4.2.1 路径规划70
4.2.2 实例:路径规划Dijkstra算法71
4.2.3 实例:路径规划A*算法75
4.2.4 行为决策77
4.2.5 运动规划77
4.2.6 实例:运动规划78
4.2.7 车辆控制84
4.2.8 实例:模型预测控制84
4.2.9 实例:PID控制89
4.3 集成感知和规划90
实战项目:NVIDIA的端到端自动驾驶92
4.4 交互行为感知和规划94
4.4.1 合作与互动95
4.4.2 博弈论方法95
4.4.3 概率方法96
4.4.4 部分可观察的马尔可夫决策过程96
4.4.5 基于学习的方法97
参考文献98
第5章 定位与建图102
5.1 SLAM问题103
5.1.1 基于滤波器的SLAM方法104
5.1.2 基于优化的SLAM方法108
5.2 自主驾驶的局限性109
5.2.1 问题的提出109
5.2.2 避免或减少漂移的影响109
5.2.3 自动驾驶SLAM的评估标准110
5.3 自动驾驶中的SLAM111
5.3.1 重新定位和回环检测111
5.3.2 先前构建的地图中的定位113
5.3.3 建立和使用未来地图115
5.3.4 利用当前地图资源116
5.4 自动驾驶中的地图表示117
5.4.1 公制地图模型117
5.4.2 语义地图模型120
参考文献122
第6章 自动驾驶仿真器128
6.1 最新的仿真器129
6.1.1 AirSim129
6.1.2 Apollo129
6.1.3 CARLA130
6.1.4 Udacity AV Simulator131
6.1.5 Deep Traf?c132
6.2 仿真器实战:CARLA132
6.2.1 仿真引擎132
6.2.2 使用CARLA评估自动驾驶方法133
参考文献135
第7章 自动驾驶芯片136
7.1 Mobileye EyeQ137
7.2 NVIDIA138
7.2.1 NVIDIA DRIVE AGX开发者套件138
7.2.2 NVIDIA DRIVE软件138
7.3 TI Jacinto TDAx141
7.4 实战项目:360°环景系统与自动停车系统142
7.4.1 自动停车与停车辅助系统143
7.4.2 使用Jacinto TDA4VM处理器系列应对环视和自动停车的挑战144
7.4.3 Jacinto TDA4VM SoC145
7.5 Qualcomm147
7.6 NXP148
7.7 Xilinx Zynq-7000148
7.8 Synopsys149
第8章 深度学习模型优化151
8.1 模型压缩和加速152
8.1.1 参数修剪和共享153
8.1.2 低秩分解155
8.1.3 转移/紧凑卷积滤波器156
8.1.4 知识蒸馏159
8.2 AI模型效率工具包159
8.2.1 大规模节能AI160
8.2.2 通过合作推进AI模型效率的研究161
8.3 未来研究展望161
参考文献162
第9章 深度学习芯片设计166
9.1 概述167
9.2 在CPU和GPU平台上加速内核计算167
9.3 中科院计算所的深度学习芯片系列168
9.3.1 卷积神经网络简介168
9.3.2 DaDianNao170
9.3.3 ShiDianNao171
9.3.4 寒武纪Cambricon-X172
9.4 麻省理工学院的Eyeriss系列172
9.4.1 卷积神经网络基本知识172
9.4.2 Eyeriss173
9.4.3 Eyeriss v2174
9.5 谷歌的TPU芯片177
9.5.1 TPU v1177
9.5.2 TPU指令集178
9.5.3 TPU的心脏:脉动阵列179
9.5.4 TPU v2/v3180
9.5.5 软件架构180
9.6 近内存计算181
9.6.1 DRAM181
9.6.2 SRAM182
9.6.3 非易失性电阻存储器182
9.6.4 传感器183
9.7 DNN硬件的指标183
参考文献184
第10章 自动驾驶SoC设计186
10.1 自动驾驶SoC设计流程186
10.2 TI的Jacinto SoC平台187
10.3 Jacinto 7处理器的功能安全特性190
10.3.1 功能安全190
10.3.2 软件功能安全191
10.3.3 安全应用部署192
10.4 具有DNN和ISP的符合安全标准的多核SoC设计194
10.4.1 ADAS图像识别SoC194
10.4.2 DNN加速器195
10.4.3 具有安全BIST控制器的ISP196
10.5 实例:NVIDIA深度学习加速器197
10.5.1 NVDLA介绍198
10.5.2 FireSim199
10.5.3 NVDLA集成199
10.5.4 性能分析200
参考文献200
第11章 自动驾驶操作系统202
11.1 概述202
11.2 开源自动驾驶操作系统204
11.2.1 Linux RTOS204
11.2.2 ROS中间件205
11.3 使用开源软件开发自动驾驶技术的公司206
11.3.1 百度206
11.3.2 宝马207
11.3.3 Voyage208
11.3.4 Tier IV208
11.3.5 PolySync209
11.3.6 Perrone Robotics210
11.4 汽车硬实时操作系统和框架211
11.4.1 BlackBerry QNX211
11.4.2 EB robinos和EB corbos212
11.4.3 Integrity RTOS213
11.4.4 NVIDIA DriveWorks SDK213
11.5 总结214
第12章 自动驾驶软件架构215
12.1 概述215
12.2 基于ISO 26262的软件开发216
12.2.1 ISO 26262简介216
12.2.2 Synopsys软件产品组合216
12.2.3 ASIL218
12.2.4 软件架构设计218
12.2.5 软件单元设计与实现219
12.2.6 软件单元测试219
12.3 基于SAE J3016的组件架构设计220
12.3.1 功能组件221
12.3.2 AUTOSAR224
12.4 自动驾驶汽车的架构设计与实现225
12.4.1 硬件框架226
12.4.2 软件系统架构227
12.4.3 数据传输模块229
12.4.4 自动驾驶测试报告229
参考文献229
第13章 5G C-V2X简介230
13.1 移动车联网230
13.2 C-V2X如何改变驾驶231
13.2.1 避免碰撞231
13.2.2 车队行驶232
13.2.3 协作驾驶232
13.2.4 队列警告232
13.2.5 保护弱势道路使用者232
13.2.6 支持应急服务233
13.2.7 危险提前警告233
13.2.8 越来越多的自动驾驶233
13.3 C-V2X的优势233
13.4 C-V2X的工作原理235
13.4.1 直接通信235
13.4.2 网络通信235
13.4.3 5G如何改变C-V2X236
13.5 C-V2X部署计划236
13.5.1 中国引领潮流236
13.5.2 澳大利亚——改善道路安全237
13.5.3 美国——增长势头237
13.5.4 欧洲——广泛支持238
13.6 总结238
内容摘要
目前自动驾驶的一个发展趋势就是智能化。随着人工智能的飞速发展以及各种新型传感器的涌现,汽车智能化形成趋势,辅助驾驶功能的渗透率越来越高。这些功能的实现需要借助于摄像头、雷达、激光雷达等新增的传感器数据,其中视频处理需要大量并行计算。然而,传统CPU算力不足,而DSP擅长图像处理,对于深度学习却缺乏足够的性能。尽管GPU擅长训练,但它过于耗电,影响汽车的性能。因此,本书着眼于未来,认为定制化的ASIC必将成为主流。本书以自动驾驶的芯片设计为最终目标,来论述设计一个面向未来的自动驾驶SoC芯片的学术支撑和工程实践。本书共13章。其中第1章主要介绍自动驾驶目前遇到的挑战和研究方向。第2~6章重点讲述环境感知以及规划控制方面的算法设计;第7~10章重点讲述深度学习模型的优化和深度学习芯片的设计;第11章和第12章重点讲述具有安全功能的自动驾驶软件架构设计;第13章介绍5G车联网。
主编推荐
任建峰,博士,目前就职于谷歌公司,从事计算影像学、自动驾驶方面芯片算法研发工作,在高通、华为海思工作多年,发表论文40多篇,拥有30多项美国专利。
以下为对购买帮助不大的评价