自动驾驶意味着智能系统逐步取代人类操纵汽车行驶,该理念早在20世纪20年代就被提及,并于20世纪80年代开始逐步发展[1].近年来,汽车数量迅速增加,据国家统计局统计(1) http://data.stats.gov.cn/easyquery.htm?cn=C01&zb=A0G0I&sj=2018,2018年底我国民用汽车保有量就已突破2.3亿,汽车交通事故发生次数达到166 906起.城市道路日渐拥堵,人们“被困”在道路上的时间越来越多.而自动驾驶是最有可能解决以上问题的技术.学术界和工业界对于自动驾驶技术的研究也正是如火如荼.麻省理工大学的TOYOTA-CSAIL、斯坦福大学的SISL等研究机构纷纷入场;为自动驾驶服务的各类数据集[2-4]开始涌现;自动驾驶物体3D检测、目标跟踪等各子任务的挑战榜单(2) https://motchallenge.net/results/CVPR_2019_Tracking_Challenge/;https://www.nuscenes.org/;http://www.cvlibs.net/datasets/kitti/不断刷新;Uber、Tesla、百度等国内外公司都成立特定部门进行自动驾驶技术研发.这一系列表现足见自动驾驶领域的重要性.
用于自动驾驶的智能车与传统车辆最大的不同之处在于,智能车搭载了众多用于感知环境、计算决策的设备,用来代替人类在驾驶汽车时做出感知和决策.其中,激光雷达、摄像头、GPS、毫米波雷达是常见的感知设备.在汽车行驶的过程中,通过处理以上传感器的数据进行对环境的感知、对物体的识别与跟踪、对自身的实时定位等工作,以确保汽车行驶的安全性.
在过去的几年中,L2级别自动驾驶已经成为比较成熟的技术,高级驾驶辅助系统(advanced driving assistance system, ADAS)被集成到越来越多的新款车辆中.ADAS提供包括车道线偏移预警系统、自适应巡航、自主泊车等在内的可以优化人类驾驶体验的众多功能.但是,ADAS仍然只能提供简单的辅助功能,在处理突发情况或遇到罕见环境时不能保证安全,所以驾驶员仍然是交通中不可缺少的,与真正意义上的自动驾驶相去甚远.随着人工智能领域的蓬勃发展,越来越多的研究者不止满足于L2级别,而是着眼于L3甚至L4级别的自动驾驶.在这种级别的自动驾驶中,对环境的感知成为重中之重,例如对道路情况的感知、行人与车辆的识别、交通标志的识别等.如果没有对环境的正确认识,那控制车辆将无从谈起.如何才能让智能车精确认识环境、理解环境成为自动驾驶的一大挑战.
没有一种单一传感器的数据能提供足够的感知精度.真实的驾驶环境变换多样,雾、雨、雪、晴会影响激光雷达的感知,白天、黑夜等光照条件不同的情况将影响摄像头的感知.因此,一个有效的自动驾驶系统必然是架构复杂、任务繁多,不同任务依赖的感知数据不尽相同:检测、追踪主要依赖图像和点云数据,即时定位则需要GPS和IMU等.为了确保不同条件准确感知、系统正常运行,自动驾驶汽车不得不搭载多种感知硬件,从不同的感知器中接收海量的、异构的感知数据.自动驾驶要求对车道线、交通标识、可能的障碍物等驾驶环境有全面的认识,就不得不接收大量感知数据并执行多种感知任务.但这同时造成了感知任务种类多、任务量大的问题.此外,为了提升感知精度,用于感知任务的各种深度学习模型不断加深、网络结构愈发复杂,导致计算量也逐渐庞大.
然而,在感知数据海量、感知任务多样、计算量巨大的情况下,车载计算资源却极为受限.首先,自动驾驶汽车分配给计算硬件的能源是有限的,这便极大地限制了车端计算硬件的选择.再者,相较于系统所需的计算量,车载计算设备存在发展缓慢、算力不足等问题,在不做计算优化的情况下,根本无法满足自动驾驶实时性的要求.如何进行计算优化才能满足系统实时性是自动驾驶的另一大挑战.
接下来,本文将针对自动驾驶的环境感知和实时计算两大挑战,从自动驾驶系统的整体架构、智能感知、计算优化3个方面对自动驾驶进行介绍和分析.之后将详细介绍中国科学技术大学LINKE实验室的智能小车系统Sonic及其感知融合算法ImageFusion和计算优化框架MPInfer.
本文主要贡献包括3个方面:
1) 重点回顾了自动驾驶系统的历史和现状,分析自动驾驶系统在感知和计算这2部分的重难点(第1节),之后详细介绍了中国科学技术大学的Sonic智能小车自动驾驶系统(4.1节);
2) 详细剖析了自动驾驶系统中的感知模块,并对其中的代表性算法进行了系统性的分析和比较(第2节),之后对Sonic系统的融合感知算法ImageFusion进行详细介绍(4.2节);
3) 针对自动驾驶系统的实时性问题,对感知相关的深度学习模型的计算优化的研究进展进行了详细的阐述和讨论(第3节),并详细介绍了Sonic系统中的计算优化框架MPInfer(4.3节).
自动驾驶本身的历史可以追溯到1920年代及1930年代间,但真正具有自动驾驶能力的汽车出现于1980年代.1984年,卡内基美隆大学推动Navlab计划与ALV计划;1987年,梅赛德斯-奔驰与德国慕尼黑联邦国防大学共同推行尤里卡普罗米修斯计划.自此许多大型公司、机构开始将目光转向这个领域.在2005年的DARPA挑战赛中,从Stanford,CMU,UC-Berkeley等高校为代表的15个团队中诞生了5辆完成142英里自动驾驶挑战的无人车[5].由此开始,世界各地的学术界和工业界对于自动驾驶技术的研究都在不断加速.其中学术界有诸如斯坦福大学、卡内基梅隆大学、麻省理工学院等研究机构.工业界著名的参与者有Uber、Aurora、Momenta、Waymo、百度、Tesla、Nvidia、Mobileye、Pony.ai等公司.根据美国DMV公布的《2019年自动驾驶接管报告》,目前在美国道路上具有运行自动驾驶车辆资格且已经在实际环境中进行测试的公司已经有36家以上.
从系统结构上看,自动驾驶系统分为端到端的系统以及模块化的系统,其中端到端的自动驾驶系统缺少可靠的安全措施和可解释性,因此还没有实现开放环境中的城市自动驾驶[6].模块化的系统在各个子系统中有相应的领域知识[7],可以在子系统中利用相应的领域知识,从而使整个自动驾驶系统变得可解释[5],此外也可以通过各个子领域的发展来提高整体系统的性能.
下面将具体介绍模块化的自动驾驶系统.
一个自动驾驶系统的硬件主要由各类传感器以及计算设备组成.图1展示了典型的自动驾驶系统的硬件组成,主要由激光雷达、摄像头、毫米波雷达、IMU(惯性测量单元)、高精度GPS、高性能PC等组成.其中激光雷达、摄像头、毫米波雷达属于感知子系统,用于车辆感知周围环境,为无人驾驶车辆建立一个准确、稳定的周围环境的模型.摄像头能获取包括物体颜色、外形、材质等丰富的环境信息,并且2D计算机视觉已取得很多进展,该领域有许多先进的算法用于信号灯检测[8]、物体分类[9]等.但由于获取的是二维信息,因此难以得到可靠精准的距离信息,并且由于摄像头获取的数据对环境光照、天气较为敏感,在环境变换时(如穿过昏暗的隧道)难以得到可靠的数据.而雷达对距离感知精度较高,可获得高精度的距离信息;但由于激光雷达的物理特性,获取到的环境信息较为稀疏.此外,激光雷达对天气的变化十分敏感,在雾霾、雨雪天气性能下降十分明显.无论是激光雷达、摄像头,都会产生大量的观测数据,这往往是整个系统实时运行的瓶颈[9-10].毫米波雷达能够获取精准的距离信息,穿透能力强,能够抵抗天气和环境变化的影响,可实现远距离感知探测[11];但毫米波雷达易受金属物品干扰.IMU、高精度GPS则用于定位子系统,用来在环境中获得车辆的准确位置信息.高精度GPS能够获得车辆的全球定位信息,通常定位精度为厘米级.而在诸如隧道、地底等场景下不能获得GPS信号时使用IMU能够获得车辆运动时在x,y,z三个方向的加速度信息,再加上感知子系统对周围环境的感知,能够在无法获取GPS信号也能得到准确的定位.

Fig. 1 A self-driving autonomous car with sensors
图1 装载各种传感器的半程自动驾驶小车
一个模块化的自动驾驶系统的软件部分主要由感知、决策规划、控制等子模块组成.
图2是典型的模块化自动驾驶系统的软件结构.单独的车辆可以通过高精度GPS的定位数据进行定位,在GPS受到干扰时通过IMU以及激光和视觉的辅助进行定位.但是,在室内环境中,随着时间的增长,IMU的惯性导航精度会下降[12],此时需要基于激光、视觉的定位,并需要离线地图获取当前环境特征来进行定位[13].由于获得了车辆的定位信息,并且事先也有环境的静态信息,当进行导航规划时,根据车辆当前定位信息,便可以在静态地图上获得全局的路径规划.之后,在全局路径的基础上,随着车辆运动,不断获得周围环境的信息,再进一步地进行局部路径规划,即可获得一个能够避开环境动态物体的路径.以上从建立全局路径到产生局部路径的过程通常由导航子模块负责.根据全局路径以及局部路径加上定位子系统,可以获得车辆的位置以及位姿.获知车辆的下一步运动,并且随着车辆的运动、周围环境的变化更新局部路径,再产生再下一步的运动.如此不断地循环,车辆就具有了从初始位置到达目标位置的自动驾驶能力.而根据路径进行下一步运动由车辆的运动控制子系统负责.

Fig. 2 Overview of the autonomous driving software system
图2 自动驾驶软件系统总览
由于自动驾驶系统由各个复杂的模块组成,其中感知模块需要对大量数据进行实时处理,因此如何处理自动驾驶任务中的感知数据是目前自动驾驶遇到的诸多挑战之一.
一个成功的自动驾驶系统不仅需要准确可靠的算法,更需要有对系统中产生的大量数据进行实时处理的能力.比如,一个64线的激光雷达产生的点云数据量高达3 000 KB
s.作为基于激光点云的3D目标检测网络中实时性最好的PointPillars,其在算力较充足的1080tiGPU上能达到60 Hz的执行频率[10].同时,视觉感知也是自动驾驶系统中不可或缺的一部分.基于视觉数据的目标识别需要YOLOv3[14],Fast R-CNN[15]等基于视觉的神经网络.该类神经网络的计算量更大,现在能达到的处理频率在10~60 Hz.上面的点云和视觉感知都是自动驾驶感知子系统的主要任务,即通过处理感知数据来对车自身和周围环境进行感知.相比于自动驾驶中的其他子系统比如说物体追踪和路径规划,感知子系统对计算资源的需求要远大于其他.
然而,实际车辆能够提供给计算设备的能源是非常有限的,这要求自动驾驶系统不能依靠强大的计算设备来达到满足运行要求的感知频率,而需要在面对大量计算任务下对任务进行合理的分配,对单个任务在不影响精度的情况下进行计算优化.
一个自动驾驶系统的计算瓶颈集中在感知层面,无论是仅仅使用3D激光雷达还是摄像头,又或者两者同时使用,都引入了大量的数据.对于RGB摄像头的物体识别网络,如果识别的图片分辨率为320×320,摄像头产生数据的频率在50 Hz,这个情况下的数据量为14 MB
s.对于一个64线的激光雷达每秒产生的点云数据量高达3 000 KB.目标检测神经网络的实时性要求为处理频率大于50 Hz,但目前还没有计算设备能够在无优化、无调度的情况下满足此计算需求.而且,无论是1080ti还是Titan X的INT8性能都超过了专门用于车辆计算的Jetson AGX Xavier,如表1所示.由此看来,为满足实时性要求,车载计算的优化是不可或缺的.
因此,目前自动驾驶实时性的挑战主要集中在:在计算资源有限的情况下,如何在不影响各类算法精度的前提下,提升自动驾驶系统感知模块的运行频率.为了解决这个问题,我们的思路是一个以深度融合(deepfusion)为主的框架:在高层进行感知数据、模型和计算方法、调度方法的融合,以提高感知的计算时效;在感知层对不同感知模态的数据进行融合(本文中以融合摄像头和激光雷达数据为主),以提高感知的精度.
Table 1 Performance of Devices
表1 计算设备性能

Platform1080tiTitan XJetson AGX XavierINT8 OP∕s(TOPS)45.24422FP16 OP∕s(GFLOPS)16615911Bandwidth∕(GB∕s)484480137
在自动驾驶领域,对环境的感知将用于后续的路线规划、障碍物规避等关键性操作,是确保行驶安全的前提.基于图像的2D感知输出2维结果,缺少深度信息,无法直接用于构建立体环境,不满足自动驾驶的要求.因此能够获取三维信息的3D感知成为自动驾驶感知任务中的焦点,近几年对3D感知的研究可谓是百花齐放、百家争鸣.其中3D目标检测是感知的基础和重点,由于篇幅限制,本节仅对近年来基于激光雷达、摄像头及二者融合的3D目标检测算法进行介绍.
ResNet[16]和PointNet[17]作为图像处理和点云处理中最经典的网络,本身及其变种经常作为网络的一部分出现在感知处理模块中.由于二者在感知处理中的重要性和奠基性,本节将率先介绍PointNet和ResNet.
ResNet一面世就在当年(2015年)的ILSVRC & COCO中斩获包括检测在内的多项挑战的桂冠,之后在改进的同时,不断被其他感知处理网络借鉴使用,影响深远.ResNet针对网络“退化”问题,即随着模型层次加深,学习效果反而变差,提出了残差结构:增加如图3所示的恒等映射(identity mapping),将直接学习变为更容易的残差加恒等映射学习.该结构由shortcut connection实现,即用一条近路将一个块的输入和输出联结,该方法降低了优化难度,提高了训练速度,解决了退化问题,在图像处理中被广泛使用.

Fig. 3 Identity mapping[16]
图3 恒等映射示意图[16]
PointNet是直接对点云数据进行处理的深度学习模型,可以运用在点云分割、分类等任务.为了克服点云数据的无序性问题,该网络利用max-pooling作为对称函数,达到数据排列不同、结果仍保持一致的效果;此外,数据处理过程中不受空间变化的影响,为了确保这一点,PointNet在点云处理前使用空间变换网络(spatial transformer network)进行对齐.最终,虽然网络的基础结构简单,但运行速度快、效果好,成为处理点云数据的基础网络.
激光雷达数据包含目标物体的距离信息以及丰富的结构信息,相较于图像数据能构建出更加接近真实环境的感知结果,在目标检测方面有得天独厚的优势.近年来,利用激光雷达数据进行3D检测的精度相较单纯利用图像数据的方式提高不少,逐渐成为自动驾驶中的新趋势.本节从众多优秀的算法中挑选PointPillars[10],PointRCNN[18],TANet[19]进行介绍.PointPillars是用体素化方法解决点云数据稀疏、无序问题的代表,同时也是典型的一阶段实现方法,这种方式使得PointPillars检测时间短、实时性能好;PointRCNN是两阶段操作的代表,检测时间较长,但实现了更高的精度;而TANet提出多层次的特征提取,克服了点云数据应用在行人检测上的检测难、误检多的问题.
1) PointPillars
PointPillars在检测精度和时间上都表现得不错,在时间上尤为突出.其网络结构如图4所示,其创新点在于3D点云体素化编码.作为一阶段检测方法的代表,其具体的处理流程大致如下:按照3D点云的x,y,z轴划分成小块,再将点云中的点按照其坐标进行特征编码,经过PointNet特征提取之后形成伪图像,该伪图像被输入到RPN中进行进一步的特征提取;最后将其放入2D检测网络,该网络输出关于3D标注框的相关参数,由此得到感知结果.其新颖的编码方式,是其快速性、准确性的重要保障,可以以62 Hz的频率进行识别工作,在KITTI 3D检测数据集上运行时间仅16 ms,是目前KITTI 3D检测排行榜上最快的算法.
2) PointRCNN
PointRCNN网络结构如图5所示,在检测精度上比PointPillars更胜一筹.其主要创新在于:在如何选择候选区域这一问题上抛弃以往使用的待选框多、计算量大的anchor方法,创造了一种基于前景点的方法.该算法是典型的两阶段检测方法,其具体处理流程大致如下:在第1阶段,将所有原始点云分割成前景点和背景点,利用从下到上的网络生成高质量的3D候选区域;接着在第2阶段,对候选区域的点进行池化并加上部分特征,通过全连接层学习空间信息,然后与全局特征相结合来进行边框精度优化以及置信度的预测.其在候选区域选取方法的创新,使得第一阶段具有高召回率.该算法当时在所有以点云输入的KITTI 3D检测排行榜(3)KITTI 3D检测排行榜用检测指标:3D Bbox AP中的moderate进行排名,具体计算依照PASCAL criteria.中名列第1.

Fig. 4 The structure of PointPillars[10]
图4 PointPillars网络结构图[10]

Fig. 5 The structure of PointRCNN[18]
图5 PointRCNN网络结构图[18]
3) TANet
TANet在行人检测中表现十分突出,目前在KITTI行人3D检测排行榜上排名第4,同时在KITTI测试中算法的运行时间仅为0.035 s.该算法网络结构如图6所示,主要的创新点在于,关注多个层次的特征提取.从浅层次的语义信息到深层次的融合信息,该算法都给予充分关注.从稀疏的点云数据中挖掘出足够多的信息,使其在行人检测更具分辨力,实现高精度检测.具体的处理流程如下:原始点云数据经过体素化,之后通过2个相同的逐点、逐通道和逐体素的3点关注网络模块学习得到关键特征,并经过全连接层和池化层调整,输出至从简到精的回归模块,多次使用上采样和降采样以及整合的方式得到信息丰富的特征地图;再进行分类和位置估计,最终得到检测结果.多层次多关注点的特征提取方法是其在行人检测取得成功的重要保障,是实现强鲁棒性的重要原因,同时由简到精的回归模块确保了算法的快速性.

Fig. 6 The structure of TANet[19]
图6 TANet网络结构图[19]

Fig. 7 The structure of Pseudo-LiDAR++[20]
图7 Pseudo-LiDAR++网络结构图[20]
相机在可以获取稠密丰富的信息的同时,仍然可以保持着低廉的价格.凭借着同时实现低成本与高性能的特点,计算机视觉在无人驾驶中扮演着举足轻重的角色.从目标检测到目标跟踪,从路面识别到视觉里程计,相机几乎可以完成所有在无人驾驶中所需要的感知任务.但是,相机并非是完美无缺的选择,相较于雷达而言,由于其缺少所获取画面的深度信息,所以在3D目标检测等任务上有着天生的缺陷,如何弥补这一缺陷成为该领域的重点与热点.这里我们在近期取得的研究进展中选择了3项思路不同的工作进行简单介绍.Pseudo-LiDAR++[20]为双目视觉的代表工作;D4LCN[21]从深度图学习知识,以改进基础的2D全卷积;SMOKE[22]通过结合单一特征点的估计值与回归3D变量的思路来预测目标物体的3D边框.
1) Pseudo-LiDAR++
基于双目图像的伪激光雷达(Pseudo-LiDAR)是一种有前途的替代雷达进行检测的方案,但是在性能方面仍然存在着很大差距.传统的方法首先估计像素在左右两摄像头中的视差,从而间接估计像素的深度,这种方法在近距离表现良好,但在远距离效果不佳.而Pseudo-LiDAR++的创新点在于:其首先使用立体深度网络(stereo depth network, SDN)从左右图像中构建costvolumn,该操作使3D卷积在正确的比例上进行深度估计,对相邻的深度产生相同的影响.此外本文还提出一种使用廉价的4线激光雷达来弥补伪激光雷达中不足的方法,称为基于图的深度矫正算法(graph-based depth correction, GDC).将雷达产生的点云少量与图片中的像素进行匹配,以获取图像中几个节点的精确深度,最后使用标签扩散机制将准确的深度信息传播到整张图片,其网络结构如图7所示.这种方法以极其低廉的价格而取得与64线激光雷达类似的效果.
2) D4LCN
一种比较流行的3D目标检测方法是估计2D图像的深度图,将2D图像转化为点云进行表示,以模仿雷达的信号,但是这种方法的性能取决于2D图像深度图估计的准确度.D4LCN提出一种称之为Depth-guided Dynamic-Depthwise-Dilated Local Convolutional Network的卷积神经网络.其创新点在于:不仅解决了2D卷积尺度敏感的问题,还充分利用了RGB的语义信息.如图8所示,卷积核由深度图生成,局部地运用于各个图像的像素和通道(而不是使用全局卷积核应用于整个图像)来区分物体与背景.整体的网络结构由3个关键组件组成:网络主干、深度引导的滤波模块、2D-3D的检测头,依次完成RGB特征提取与卷积核生成,桥接2D卷积与3D点云,输出3D标注框的工作.D4LCN不仅解决了2D卷积尺度不敏感和局部结构无意义的问题,还利用了RGB图像中的语义信息,最终经过KITTI数据集的比对也取得了良好的效果.

Fig. 8 The structure of D4LCN[21]
图8 D4LCN网络结构图[21]

Fig. 9 The structure of SMOKE[22]
图9 SMOKE网络结构图[22]
3) SMOKE
SMOKE从另一个角度实现了新的创意.其创新点在于:提出一种单步的3D对象检测方法;将每个对象与关键点配对,预测图像上的3D投影点,并且并行地进行3D边框参数的回归,以此消除2D检测带来的噪声,实现端到端3D边框的预测.在网络结构上,如图9所示,SMOKE采用DLA-34作为backbone,从下采样过后的图像中提取特征.再由2个单独的分支进行关键点分类和3D边框的回归,综合2个分支的信息,获取3D边框值.其中提取关键点的分支将每个对象由一个特定的关键点表示,这个关键点代表着对象在图像平面上的投影3D中心.回归分支将3D边框表示为8个参数,依次推出3D边框的位姿.SMOKE舍弃了常规方法的各种步骤,采用简单的网络结构,提高了3D对象检测的准确度与速度,并在相应的KITTI排行榜中名列前茅.
上述3种方法的测试结果在表2中得到展示,可以看到其效果距基于雷达数据的方法仍有较大差距,说明基于视觉的3D检测仍然有着很大的进步空间.
Table 2 Comparison of Performance for 3D Car Category on KITTI Dataset
表2 KITTI数据集上3D检测车的性能比较

Network ModelAverage Precision∕%ModerateEasyHardLatency∕sPointPillars74.3182.5868.990.016*PointRCNN75.6486.9670.700.1**TANet75.9484.3968.820.035**Pseudo-LiDAR++42.4361.1136.990.4**D4LCN11.7216.659.510.2**SMOKE9.7614.037.840.03**PointFusion63.0077.9253.27
Notes:“*” means 1080ti GPU+Intel i7 CPU;“** ” means GPU 2.5 GHz.

Fig. 10 The structure of PointFusion[23]
图10 PointFusion网络结构图[23]
图像数据拥有丰富稠密的物体信息,但是缺少画面的深度信息;而雷达数据恰好可以弥补此缺陷,给出精确的深度信息和物体的结构信息.在3D目标检测的过程中,将2类数据中的信息相融合在理论上应该可以达到更高的精度.但是在哪些或者哪个阶段,以何种方式将2种不同的数据进行融合才能获得更好的效果,这是以融合的方式解决3D检测问题的重点和难点.依据在什么阶段执行融合步骤被分为前融合和后融合2种,前者先将数据进行融合之后再执行感知任务,后者则是先进行感知,之后对结果进行融合.本文我们选取其中最具代表性的工作Pointfusion[23]进行简单的介绍.
Pointfusion是典型的前融合模型,执行特征级别的数据融合.它使用简单的网络结构(如图10所示)实现通用的融合模型,不需要进行特定数据集的模型调优,在KITTI和SUN-RGBD相应的排行榜上都取得不错的成绩用不同的网络分别从图像和点云数据中学习特征,再将特征进行融合用来预测3D边框.鉴于3D点云数据转换成图像格式或者体素化都会导致信息的丢失,Pointfusion将利用PointNet的变种直接从原始激光雷达点云数据中学习特征,同时利用ResNet学习图像的特征;之后密集融合子网络会结合2类不同特征进行融合,再将融合特征传入MLP,估计3D边框的偏移和置信度,最终实现3D边框的预测.
第2节提到的7种网络模型在KITTI 3D检测数据集的测试结果如表2,3所示:
Table 3 Comparison of Performance for 3D Pedestian Category on KITTI Dataset
表3 KITTI数据集上3D检测行人的性能比较

Network ModelAverage Precision∕%ModerateEasyHardLatency∕sPointPillars41.9251.4538.890.016*PointRCNN39.3747.9836.010.1**TANet44.3453.7240.490.035**D4LCN3.424.552.830.2**PointFusion28.0433.3623.38
Notes: “*” means 1080ti GPU+Intel i7 CPU;“** ” means GPU 2.5 GHz.
自动驾驶依赖各种传感器感知环境信息.为了提升感知精度,感知模型的深度不断增加、模块间依赖关系也愈发复杂,模块内计算量不断攀升.同时,感知任务的响应时延能否达到自动驾驶系统的实时性要求关乎道路安全,必须严格限制.但与此矛盾的是车端计算设备的算力发展相对缓慢,主要关注感知精度的实验室研究成果直接部署很难满足系统的实时性要求.自动驾驶普遍要求从数据采集传输、数据感知到控制决策的端到端时延在100 ms以内[2,24-26],其中留给感知任务的时间在几十毫秒量级,相应的基于图像的感知任务要达到30FPS的速度[27].表4分别展示了视觉模型和点云模型常用的骨干网络ResNet50和PointNet的参数量和计算量.因此,需要通过各种计算优化手段,削减模型中潜在的无效计算,仔细调度计算资源占用,实现感知任务的实时响应.
Table 4 Performance of ResNet50 and PointNet
表4 ResNet50和PointNet的参数量和计算量

Network ModelNumber of WeightsFLOPsResNet5025.6×1063.8×109PointNet3.5×106440×106

Fig. 11 Computational optimization method diagram
图11 计算优化方法的脉络图
本节剩余部分按照图11所示的脉络详细介绍近年来涌现的计算优化方法.模型层次上,轻量网络设计(lightweight model design)、模型蒸馏(model distillation)和时空连续性优化(temporal-spatial persistence optimization)等方法利用应用领域知识将计算复杂度降低.在深度学习框架层次上,模型调度(model scheduling)、模型量化(model quantiza-tion)和算子融合(operator fusion)与调优(operator tuning)等方法仅从系统层次上降低无效计算,提升计算硬件利用率,降低运行时开销.由于不改变应用的高层逻辑,这些方法拥有广泛的适用性.
模型调度是指对智能车系统上的各类感知任务进行调度,从而使得有限的计算资源得到充分利用,达到系统要求的吞吐率和延迟,可分为多任务、多实时帧流的感知计算、同一帧流的计算复用等.
多任务是指多个模型在CPU和GPU上并行执行.NVIDIA的CUDA编程模型[28]提供了多种GPU并行模式:1)同一CUDA context下多CUDA stream并行模式,不同的CUDA stream上的GPU操作可以并行执行,这种方式对于GPU的利用率较高,但模型的推理延迟波动较大.2)多CUDA context并行模式,这种模式以时间片的方式共享GPU资源,不同CUDA context的资源相互独立,但GPU的利用率较低.在Multi-Process Service(MPS)服务的支持下,多CUDA context模式以类似于多CUDA stream的方式运行.
多实时帧流的感知计算往往采用相同的模型处理多个实时输入帧流,例如同时对多个摄像头的视频流进行模型推理.动态批量化方式[29]将在一段时间内到达的或者达到一定阈值数量的输入数据进行批量(batch)化,产生一个多维向量,交由模型统一处理,这种方式有利于提高吞吐率,但对于每一帧图片有额外的等待延迟开销,而且在较小的批量化数目下处理延迟会随着批量化数目的增加近似线性增长.流水线方式[30]将包含数据前处理在内的模型推理切分为一个个阶段,对输入的数据进行流水处理,这种方式使得CPU和GPU并发执行,在CPU的计算延迟低于GPU延迟的情况下,可以掩盖CPU端的计算延迟,提高系统整体的吞吐率.由于单个模型对于GPU的利用率不能达到100%,在每个流水阶段使用多线程的话,还会有一定的GPU并行收益.
模型量化是将模型中的32位单精度浮点数(FP32)替换为低精度整型数(如INT8),来改变存储与计算的一种模型压缩技术.目前主流量化方案是INT8[29],此外,根据使用位宽的不同还有二值量化[31-32]与三值量化[33]等.量化后的模型对存储和带宽的需求降低,在大多数处理器上整型计算速度更快,从而实现网络模型的加速计算.使用整型数替换浮点数意味着计算精度丢失,不过网络模型对精度丢失引入的噪声足够鲁棒,合理控制量化位宽并调整量化参数,可以在带来计算加速的同时避免严重的精度损失.以ResNet50网络为例,采用8 b量化可以带来3倍左右的性能提升[34],而ImageNet目标分类任务Top1精度降低小于2%.
考虑INT8量化,FP32浮点数x和INT8整型数y满足关系y=S(x-Z),其中参数S为量化缩放系数(FP32表示),参数Z为量化后零值(INT8表示).这2个参数需要根据x的取值分布仔细设置以保证网络模型精度.
根据参数设置时机的不同,量化可以分为训练后量化和训练时量化.训练后量化指网络模型使用FP32表示完成训练后再量化到INT8表示.TensorRT[29]在calibration数据集上应用训练好的FP32模型统计各层激活值的直方图,通过尝试不同x的值域边界来评估量化前后的KL散度.HAQ[35]则直接将这个问题抽象为强化学习问题,反复在实际设备上运行量化模型得到精度与时延作为反馈来调整参数.训练时量化指在训练网络模型的同时调整量化参数.典型工作[34]在网络模型的计算图中插入量化模拟结点来模拟量化的影响,但是所有计算仍旧使用FP32完成.
根据量化粒度大小的不同,量化分为逐层量化(layer-wise)和逐通道量化(channel-wise)两种.逐层量化把参数张量作为一个整体来选择量化参数,而逐通道量化把参数张量视为多个通道参数的集合,为每个通道选择独立的量化参数.文献[36]表明量化粒度越小,量化对精度的影响越小.考虑到逐通道量化的实现复杂化,各主流框架优先支持逐层量化.
知识蒸馏(knowledge distillation)将复杂的教师网络(teacher network)的知识迁移到一个较小的学生网络(student network)来实现网络的压缩,能够几乎不损失精度地减少模型计算量.具体来说,学生网络在训练时学习2个目标:1)硬目标(hard target)为数据标签;2)软目标(soft target)为教师网络预测的概率分布.因为软目标蕴含了数据上更多的相似性结构的信息,使学生网络学到教师网络在更大数据集上习得的潜在内部结构,避免学生网络过拟合,使其有更好的泛化能力.但是如何选择一个简单又不至于欠拟合的学生网络仍是一个问题.
Hinton等人[37]在2015年提出知识蒸馏时,教师网络使用的是学生网络的集成模型,即多个模型的平均,并指出可以通过分布式地训练集成模型,然后蒸馏到单个模型的方式加速模型训练.后来的研究者又基于知识蒸馏的思想提出了一些衍生工作,比如设计其他的训练函数以提取教师网络的更多信息,将教师网络中间层的结果也用于对学生网络的监督训练[38-40]或者使用更小的学生网络以提高模型压缩的效果,如量化蒸馏中用量化模型作为蒸馏学习的学生网络[36].
深度学习框架提供各种算子来组合表达模型的计算逻辑,这些算子每个都对应独立的GPU核函数实现,通常由第三方的GPU计算库提供,如人们熟知的cuDNN[41]计算库.模型训练或推理过程中,这些算子对应的核函数被分别地发射到GPU端运行.因此一个算子完整的执行开销包括发射核函数的CPU端的运行时开销(算子调度开销与GPU驱动开销)和GPU端的实际计算开销.
算子融合是指将多个算子的核函数融合为一个核函数一并发射到GPU端运行.算子融合可以减少算子发射的运行时开销,同时如果融合的算子间存在数据依赖关系,通过在GPU的高层存储(如GPU上的共享内存或寄存器)上精心排布不同核函数的输入输出可以大幅提升算子间的数据传输效率,进一步提升计算性能.以LSTM单元为例,文献[42]声称算子融合操作可以将LSTM单元的运行时间从27 ms降至8.3 ms左右,性能提升3.25倍.
各种深度学习框架编译器对自动算子融合支持已经逐步完善,如XLA[43],Torch Script[44],Relay[45]和TensorRT[29]等.模型会检测计算图中是否存在子图符合预置的算子融合模式,如连续多个逐点操作、复杂操作紧接逐点操作和矩阵乘法批量化等,根据模型预估性能收益决策是否执行融合[46].融合后算子的计算逻辑可能没有第三方计算库函数能够直接支持,需要编译器后端自动生成对应的GPU核函数代码.
面向深度学习领域,支持自动生成高效的GPU核函数的后端编译器典型代表是TVM[47].它将张量计算中硬件无关的计算逻辑与硬件相关的调度逻辑解耦,并将常用的调度手段抽象为一组原语.开发人员使用原语为融合后的算子描述参数化的调度模板,搭配基于深度学习的自动调优器AutoTVM[48]对模板参数进行调优得到最优调度策略,最终由代码生成器综合计算逻辑与调度策略生成最终高效的GPU核函数代码.Tensor Comprehensions[49]和Tiramisu[50]则采用多面体模型来进行自动调度,进一步减少调度策略搜索中人工的介入.
不同于模型压缩方法在训练好的网络中进行压缩,轻量网络设计的思路是直接构建一个轻量、高效的网络结构.这些设计可大致分为2种:1)直接人工构建一个轻量网络;2)使用NAS(neural architecture search)自动搜索轻量网络结构.
由于深度学习网络之中卷积层占据着大多数的计算量,人工设计轻量网络主要关注于降低卷积操作的计算复杂度.一种方法是修改常规卷积的基本参数,如将一些卷积核大小为3×3的卷积替换为1×1的卷积[51],3×3的卷积是1×1的卷积参数量的1
9.另一种是对常规卷积的分解,以达到降低计算量的目的.深度可分离卷积将卷积操作分解为Depthwise卷积和Pointwise卷积.常规卷积将卷积核应用到输入特征图的每个通道,而Depthwise卷积只将卷积核应用到输入特征图的单个通道.Pointwise卷积则是卷积核大小为1×1的常规卷积.MobileNets[52]使用的3×3深度可分离卷积是常规卷积的1
9~1
8的计算量.还有一种方法是从卷积的原理和产生的作用上研究如何减低计算复杂度.GhostNets[53]发现了卷积所生成的不同特征图之间的冗余信息(部分特征图比较相似),在保留部分常规卷积生成的特征图之后,使用计算复杂度较低的线性操作(如Depthwise卷积)来生成冗余信息,这样在降低计算复杂度的同时,保持了模型的精度.卷积计算可以看做是计算卷积核与输入的相似度操作,常规卷积用点积计算互相关,AdderNet[54]将其换成L1距离,可以实现只使用加法进行CNN网络的构建.
由于人工设计网络难以很好地平衡在受限资源下网络的性能和精度,NAS的方法自动搜索轻量网络结构,使得网络的性能和精度能够更好地取得平衡.NAS的基本流程是:1)定义一个搜索空间;2)使用一个包含搜索参数的模型生成器从搜索空间中取样一个或几个模型;3)评估这些模型的性能,取其中最好的一个模型;4)使用评估结果调整搜索参数;5)重复2)~4)直到取得结果.其中比较关键的问题就是搜索空间的定义、搜索算法的设计以及模型的评估方法.MnasNet[55]定义了一个较为全面的模型搜索空间(对整个网络结构进行搜索),使用强化学习的方法搜索整个网络结构,并在搜索过程中使用实际设备进行模型推理延迟的测试.DARTS[56]定义了一个连续的可微分的搜索空间(搜索的是cell,网络由cell堆砌而成),使得可以使用梯度下降的方法进行参数更新.不同于强化学习或可微分的方法,AmoebaNet-A[57]使用了演化(evolution)算法进行模型搜索.
自动驾驶场景下,车辆周围环境是连续变化的,传感器感知周围环境的相邻两帧数据在时间和空间2个维度上也会呈现出连续且规律的变化.以检测任务为例,目标的空间位置、运动特征和外观特征在间隔足够短的两帧感知数据中可能会有微小变化,但不会出现突变的情况.对于需要高频连续感知的任务,这种时空连续性使得模型利用历史感知数据提升感知精度、优化计算性能成为可能.
当前,感知数据的时空连续性更多地被编码为上下文信息输入感知网络来提升感知任务的精度,而从计算优化角度出发,讨论利用时空连续性来减少无效计算的工作比较少,主要集中在离线视频流的目标检测任务上,方法特征可以分为2类:1)基于关键帧的信息传播.文献[58]对视频流采样关键帧并对其应用较为复杂目标检测模型得到目标位置,将相邻2个关键帧图像的相关特征和检测结果输入较为简单的模型预测中间帧目标位置.PaD[59]同样采样关键帧并应用复杂的目标检测网络,对于中间帧,直接基于关键帧目标位置划定ROI大致范围,从而跳过两阶段目标检测模型中的Region Proposal阶段.2)直接学习相邻帧数据相关性,如光流或者残差.文献[60]将关键帧特征图与光流信息卷曲(warp)降低非关键帧特征图计算开销.除了图像光流,Flownet3D[61]针对点云数据提出flow embedding层学习连续两帧数据的相关性、编码点云的运动规律,并提出upconv层传播特征来预测下一帧点云数据.文献[62]将相邻帧相减得到稀疏输入并交由稀疏感知硬件实现计算加速.
上述工作应用局限在离线处理场景,要求全局数据已知,而自动驾驶的感知任务都需要在线处理.在线处理场景下,时空连续性只能对历史感知数据已经捕捉到的目标应用,而对新出现的目标无能为力,需要特殊处理.
Sonic智能小车系统使用16线3D激光、四路高清摄像头作为环境感知传感器,厘米级精度的RTK GPS以及IMU用于辅助车辆定位.在车辆控制方面,通过高速CAN总线与车辆进行通信,包括接受车辆当前运动状态、车辆当前运行状态、控制车辆速递和转向等功能.
整个Sonic系统由底层硬件向上观察,首先激光雷达不断对周围的环境进行扫描获得3D激光点云数据,摄像头获取周围环境的RGB数据,并且由四路摄像头组成环视.RTK GPS在环境良好的情况下能够获取高精度定位信息,车辆通过CAN总线发送当前车辆的速度、转向角、异常信息等数据.得到硬件感知、控制数据之后,感知部分持续接收激光雷达、摄像头的感知数据、GPS的定位信息,再结合预先对环境建立的离线地图通过cartography等定位算法得到在该地图中精确的定位数据.之后将定位数据、车辆运动数据、激光点云、摄像头RGB数据通过感知神经网络以车辆作为中心进行物体的识别、定位、对周围物体建立运动模型.之后导航模块接收感知结果,结合静态地图建立局部实时的动态地图,并根据该动态地图使用Hybird A*,teb local planner等导航算法进行路径规划,生成一个车辆可执行动态避障的路径.根据该路径计算车辆的加速度、转角等控制数据,并将控制数据发送CAN总线控制车辆.整个系统的每个部分都需要巨大算力的支持,这里我们利用模块MPinfer来实现计算优化以满足系统运行实时性要求.
4.1.1 感知模块
本系统在感知部分使用感知融合技术,而感知融合根据结构可以分为2类:前融合、后融合.前融合直接以3D激光、摄像头、IMU作为数据来源并结合车辆当前运动状态通过神经网络直接给出对环境周围物体的识别、追踪.而后融合则在得到识别、追踪等感知结果后再进行融合.本系统包含这2种融合方式.
通常感知模块这部分的结果表现为一个对周围环境物体的列表,表中不仅包含物体的坐标还有物体的运动速度、方向等运动信息.为了满足车辆行驶的需求通常该模块工作频率在50 Hz左右,根据车辆自身的运动性能可以对该频率进行下调,目前本系统部署的车辆最高速度为1.5 m
s左右,该模块工作频率可略微下调.
感知模块除了对周围环境进行物体识别并建立模型之外,还负责车辆在当前环境中的定位工作.定位则不仅仅需要3D激光、摄像头的感知数据,还有RTK GPS的高精度定位信息以及预先建立的离线地图,通过3D激光和摄像头的感知数据在离线地图内进行识别,匹配得到车辆在地图中的坐标,再结合RTK GPS的定位数据得到更加准确的定位坐标.
此外在真实的交通环境中,该模块还负责对交通灯的识别,以及道路车道线、可行驶区域的识别,并将这类感知结果输出给规划
导航模块.
4.1.2 规划、导航、控制模块
Sonic自动驾驶系统的规划模块接收感知模块输出,获取对周围环境感知的结果以及定位信息.首先进行全局路径规划:根据输入到当前系统中的目标位置、车辆当前位置,结合静态地图,通过Dijkstra,A*等算法得出粗糙的路径,这部分的规划涉及到了当前车辆未观察到的地图,并且使用的算法没有考虑到车辆的运动学限制,因此得到的路径不能直接用于车辆的行驶,而为了使得这一部分的执行速度加快,通常全局路径规划使用进行网格化后的地图.
得到了导航路径后,在局部路径的基础上利用pure pursuit等算法保证车辆能够成功地沿着路径平滑行驶,同时确保驾驶的舒适度.之后根据路径特点对车辆的行驶线速度、加速度进行规划,使车辆行驶过程速度变化平缓,保证驾驶的舒适度,防止突然变化的速度造成交通事故.
控制模块的重点在于车辆如何精准迅速地执行指定指令.给车辆发送一个控制信息(线速度、转角)到车辆接受该控制信息、执行相应的控制信息最后车辆输出每个步进电机、舵机的控制信号,达到给定的状态,这个过程由于模块间的延迟、以及控制信号达到给定数值直接的延迟,导致从当前状态到给定状态直接有较大的延迟.为了使车辆能够尽量以理想状态运行,控制模块需要PID、模糊控制等自动控制方面的算法,以实现给车辆相应的线速度、角速度等控制信息后,车辆迅速且稳定地达到给定的控制状态.
在Sonic系统中控制模块集成在车辆底盘中,直接将目标状态通过CAN总线发送给底盘即可.
在本系统的感知模块,我们通过挖掘3D点云和2D图像之间的隐式相似性,提出了一种新颖的深度融合模型——ImageFusion.图像和点云都包含不同的局部结构,并能在旋转和平移中表现出不变性.即使点云是无序的数据结构,我们也可以通过在体素中对点云进行组织,并将每个垂直列中的点云编码为固定长度的特征作为伪图像.这些伪图像包含具有特定结构的空间信息.因此,当我们将伪图像与相机图像结合在一起,并用2DCNN与多层感知机等目标检测器进行处理,即可得到3D检测的结果.由于我们的方法将相机图像与LiDAR伪图像融合在一起,所以起名为ImageFusion.
ImageFusion将3D点云与相机图像作为输入,预测对象的3D边框,充分利用图像与激光雷达的共同优势.在KITTI数据集的测试结果表明,Image-Fusion明显地优于只基于激光雷达和只基于摄像头数据的检测模型.ImageFusion主要由4个部分组成:伪图像转换(将点云数据转换为2D伪图像)、相机图像预处理、图像拼接融合、目标检测.图12是ImageFusion的网络图.下面逐一介绍这4个步骤.

Fig. 12 The structure of ImageFusion
图12 ImageFusion网络结构图
第1步,在应用深度融合之前,我们需要先将不同感器的数据转换为通用格式.我们使用PointPillar的特征网络将3D点云转换为2D伪图像,其将点云分割为若干柱体,对柱体中的点进行编码,创建大小为(C,H,W)的伪图像.在具体的试验中,C=64,H=432,W=496.PointPillars的整个网络在Intel i7 CPU和1080ti GPU的台式机上可以在20 ms内进行完整的运行,可以满足自动驾驶对于推理速度的要求,达到实时运行的目的.
第2步,为了正确地将相机图像与LiDAR伪图像结合在一起,我们对相机图像进行了适当的预处理,将其缩放到(3,H,W)的尺寸,以在H与W两个维度匹配2个图像.其次我们对图像执行标准化操作.这里我们通过减去图像中所有像素的平均值并除以标准差来进行标准化的步骤.这一步骤可以将图像中像素的分布调整为正态分布,极大地平滑每个单独图像中的分布偏移,并更好地帮助深度神经网络更好的学习特征.
第3步,为了利用各个传感器的优势,传感器的融合非常重要.点云包含准确的空间信息,但是很稀疏.图像有足够的密度,但会受到许多环境因素的干扰,如天气照明等.因此,我们认为将二者结合起来,可以尽可能地实现准确可靠的3D对象检测.在第3步中,我们将LiDAR伪图像与预处理后的相机图像进行串联拼接,获得大小为(C′,H,W)的伪图像,其中C′=C+3.
第4步,我们使用了RPN(region proposal net-work)进行目标物体3D边框的生成.在Image-Fusion中,RPN输入第3步中融合产生的伪图像.RPN由3个卷积块、3个反卷积块和1个最后的卷积层组成.每个卷积块执行卷积运算以缩小图像尺寸,同时使通道数增加1倍.之后加上BatchNorm层和Relu层,随后反卷积块对相应卷积块的输出进行反卷积操作.最后将3个反卷积块的输出按顺序串联成形状为[6C′,H
2,W
2]的向量,由卷积层进行最终的边框预测.
在实验部分,我们首先比较ImageFusion和其他几个融合网络的3D目标识别效果.我们关注汽车对象的检测,将KITTI数据集分为3 712个训练样本和3 769个测试样本.ImageFusion的准确率较仅使用雷达的方法(PointPillars)提高了7.64%,较之前的深度融合方法(MV3D,PointFusion)提高了8.77%.具体结果如表5所示.
最后对测试结果进行定性分析,如图13所示,图13(a)~(f)展示了ImageFusion的预测结果.其中图13(a),(c),(e)为人类居住场景,图13(b),(d),(f)为高速公路场景.不同场景的难度由若干因素决定:待检测对象的大小(较小的对象较难检测)、待检测对象的数量(对象较多的场景较难检测)等.我们可以观察到,在这6个代表性的场景中,代表检测结果的红色框与代表真实情况的绿色框有着很高的重叠率,这代表着我们的模型可以在复杂的场景中准确地预测对象的3D边框.

Fig. 13 Qualitative results on the KITTI dataset
across 6 different scenarios
图13 在KITTI数据集中对6个不同场景的定性分析
Table 5 Comparison of Average Precision for the Car Category on KITTI Dataset
表5 KITTI数据集上3D检测车的平均精度 %

Network ModelEasyModerateHard3DOP12.639.497.59VeloFCN15.2013.6615.98MV3D71.2962.6856.56PointFusion77.9263.0053.27PointPillars79.0574.9968.30ImageFusion86.6976.8370.25
Note: Bold values represent the best performance.
在Sonic系统中,需要使用卷积神经网络CNN处理来自多个摄像头的图像,进行一系列的感知任务.虽然CNN网络有着较高的准确率,但是它在车载设备上面的推理延迟较高,导致吞吐率较低,难以支持多路摄像头均达到每秒30帧的实时性要求.为此,我们设计了MPInfer(multi-tenant parallel CNN inference framework)这一框架来进行多路摄像头数据下多个CNN网络实例的调度优化.
图14是MPInfer设计的结构图.在离线时,MPInfer的输入是高层次的CNN模型表示(包括模型定义文件和权重文件)和可调参数(如批量大小和数据类型).CNN EngineBuilder利用输入生成一组优化的CNN模型.我们将CNN EngineBuilder设计为用于处理大量的CNN推理模型(如YOLOv3[14])的模块,从而适应硬件资源限制和模型精度要求.在运行时,MPInfer使用来自多个摄像头的视频流,并将输入的图像插入优先级队列.优先级队列根据启发式方法对图像进行排序,并在输入图像数目大于队列大小时进行丢弃,然后将它们分派到后续的CNNApplication.CNNApplication使用线程池来执行用户指定的CNN模型推理以及预处理和后处理,并可以根据配置启用不同的并行策略.最后,MPInfer输出结果(如图像的标注框)给自动驾驶中下一个模块(如导航模块).
可配置性和高效是MPInfer设计的两大目标.由于存在多种网络模型和结构以及各种优化策略,可配置性成为MPInfer的一个设计目标.CNNEngine-Builder的接收模型可以是任意CNN模型.此外,我们的框架还配置了摄像头数量或者视频流数目的超参数Ncam、线程数Nt以及GPU并行策略S.MPInfer旨在实现高吞吐量、低延迟.吞吐量测量固定周期内处理的图像数.30 FPS被确定为最小的实时性要求.延迟(从图像捕获到识别完成)是另一个相关的关键指标,并与自动驾驶的安全性直接相关.每帧图像从相机到识别的延迟,用于实时自主驾驶时间不得超过输入图像的间隔(例如,对于30 FPS相机为33 ms).

Fig. 14 Overview architecture of MPInfer
图14 MPInfer结构图
MPInfer在网络构建和模型运行时进行优化.在网络构建时,CNNEngineBuilder获取的输入使用高效的深度学习框架TensorRT[29]进行模型构建和优化.通过使用TensorRT,可以利用TensorRT支持的计算图优化、算子自动调优和INT8量化.模型运行时,MPInfer使用了3.1节提到的3种GPU并行模式,分别是同一CUDA context下多CUDA stream并行模式、多CUDA context并行模式、multi-process service(MPS)支持下的多CUDA context并行模式.
MPInfer作为一个支持自动驾驶多视频流CNN模型推理的框架,达到了低延迟和高吞吐率的设计目标.在实验中,我们使用的模型是YOLOv3[14],测试平台是GTX 1660和Jetson AGX Xavier.我们使用一个简易程序模拟摄像头的图片流,每个摄像头30FPS,则多个摄像头的图片流吞吐率为30FPS的倍数.
表6给出了输入为4个摄像头120FPS情况下MPInfer和其他框架在GTX 1660上的性能对比.MPInfer在使用MPS支持下的多CUDA context并行模式(线程数为3)时性能最好,吞吐率为117.62 FPS,延迟为21.31 ms.相比串行的LibTorch吞吐率提高3.97x,相比串行的TensorRT吞吐率提高1.41x.
Table 6 Comparison of MPInfer with Other Frameworks on GTX 1660
表6 MPInfer和其他框架在GTX 1660上的性能对比

FrameworkStrategyLatency∕msThroughput∕FPSLibTorchserial35.9729.69TensorRTserial16.1583.21MPInfer3 CUDA Streams29.61106.51MPInfer3 CUDA Contexts31.92102.69MPInfer3 MPS21.31117.62
Notes:MPS stands for CUDA contexts enhanced by MPS.
表7给出了输入为2个摄像头60FPS情况下MPInfer和其他框架在Jetson AGX Xavier上的性能对比.MPInfer在使用同一CUDA context下多CUDA stream并行模式(线程数为2)时性能最好,吞吐率为45.84FPS,延迟为56.55 ms.相比串行的Darknet吞吐率提高4.48x,相比串行的TensorRT吞吐率提高1.14x.
Table 7 Comparison of MPInfer with Other Frameworks on Jetson AGX Xavier
表7 MPInfer和其他框架在Jetson AGX Xavier上的性能对比

FrameworkStrategyLatency∕msThroughput∕FPSDarknetserial106.1610.23TensorRTserial37.8940.26MPInfer2 CUDA Streams56.5545.84MPInfer2 CUDA Contexts66.8933.81
Notes:Jetson AGX Xavier doesn’t support MPS.
从表6和表7的结果看,GPU并行相比串行能更好地发挥出GPU的性能,提升系统的吞吐率.在GTX 1660上,我们推荐在多线程环境下使用MPS支持的多CUDA context并行模式.在MPS不支持的Jetson AGX Xavier设备上,我们推荐在多线程环境下使用多CUDA stream并行模式.
自动驾驶能如何为驾驶员提供更加舒适的驾驶环境,如何为交通参与者带来比人为驾驶更高的安全性,如何更高地提高未来城市的运行效率,涉及的技术仍然值得更多的关注.本文着眼于自动驾驶技术链中感知与计算部分,首先回顾了自动驾驶的历史背景,综合评述了关于自动驾驶的系统分类、硬件结构、软件组成等方面,并指出了其中仍然存在的感知与计算挑战;其次,基于激光雷达、摄像头及二者融合3个方面调研了近年来感知领域关于3D检测的国内外最新成果;随后针对自动驾驶的实时计算的问题,分析了计算优化中有关模型调度、模型量化、模型蒸馏等关键技术手段;最后详细介绍中国科学技术大学LINKE实验室在自动驾驶领域的最新进展——智能小车系统Sonic,感知融合算法Image-Fusion,以及计算优化框架MPInfer.智能小车系统Sonic仍然在持续设计和开发中.在未来的工作中,我们计划在现有成果的基础上进一步扩展和优化,实现包括目标检测、目标跟踪、建图与定位、规划与导航以及对应模块计算优化的全栈自动驾驶技术,完成一套麻雀虽小五脏俱全的,真正可靠、可用的无人小车系统.
[1] Kröger F. Automated Driving in Its Social, Historical and Cultural Contexts[M]. BerLin: Springer, 2016
[2] Geiger A, Lenz P, Stiller C, et al. Vision meets robotics: The KITTI dataset[J]. International Journal of Robotics Research, 2013, 32(11): 1231-1237
[3] Caesar H, Bankiti V, Lang A H, et al. nuScenes: A multimodal dataset for autonomous driving[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1903.11027
[4] Chang Mingfang, Lambert J, Sangkloy P, et al. Argoverse: 3D tracking and forecasting with rich maps[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 8740-8749
[5] Yurtsever E, Lambert J, Carballo A, et al. A survey of autonomous driving: Common practices and emerging technologies[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1906.05113
[6] Chi Lu, Mu Yadong. Learning end-to-end autonomous steering model from spatial and temporal visual cues[C] //Proc of the Workshop on Visual Analysis in Smart and Connected Communities, co-located with MM 2017( VSCC 2017). New York: ACM, 2017: 9-16
[7] Behere S, Törngren M. A functional architecture for autonomous driving[C] //Proc of the 2015 ACM Workshop on Automotive Software Architecture, Part of CompArch 2015( WASA 2015). New York: ACM, 2015: 3-10
[8] Weber M, Wolf P, Zollner J M. DeepTLR: A single deep convolutional network for detection and classification of traffic lights[C] //Proc of IEEE Intelligent Vehicles Symp. Piscataway, NJ: IEEE, 2016: 342-348
[9] Ranft B, Stiller C. The role of machine vision for intelligent vehicles[J]. IEEE Transactions on Intelligent Vehicles, 2016, 1(1): 8-19
[10] Lang A H, Vora S, Caesar H, et al. Pointpillars: Fast encoders for object detection from point clouds[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 12689-12697
[11] Clark S, Durrant-Whyte H. Autonomous land vehicle navigation using millimeter wave radar[C] //Proc of IEEE Int Conf on Robotics and Automation. Piscataway, NJ: IEEE, 1998: 3697-3702
[12] Kamijo S, Gu Y, Hsu L T. Autonomous vehicle technologies: Localization and mapping[J]. IEICE ESS Fundamentals Review, 2015, 9(2): 131-141
[13] Hsu C M, Shiu C W. 3D LiDAR-based precision vehicle localization with movable region constraints[J]. Sensors (Switzerland), 2019, 19(4): 942-942
[14] Redmon J, Farhadi A. YOLOv3: An incremental improvement[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1804.02767
[15] Girshick R. Fast R-CNN[C] //Proc of Int Conf on Computer Vision. Piscataway, NJ: IEEE, 2015: 1440-1448
[16] He Kaiming, Zhang Xiangyu, Ren Shaoqing, et al. Deep residual learning for image recognition[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2016: 770-778
[17] Qi C R, Su Hao, Mo Kaichun, et al. PointNet: Deep learning on point sets for 3D classification and segmentation[C] //Proc of the 30th IEEE Conf on Computer Vision and Pattern Recognition(CVPR 2017). Piscataway, NJ: IEEE, 2017: 77-85
[18] Shi Shaoshuai, Wang Xiaogang, Li Hongsheng. PointRCNN: 3D object proposal generation and detection from point cloud[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 770-779
[19] Liu Zhe, Zhao Xin, Huang Tengteng, et al. TANet: Robust 3D object detection from point clouds with triple attention[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1912.05163
[20] You Yurong, Wang Yan, Chao Weilun, et al. Pseudo-LiDAR++: Accurate depth for 3D object detection in autonomous driving[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1906.06310
[21] Ding Mingyu, Huo Yuqi, Yi Hongwei, et al. Learning depth-guided convolutions for monocular 3D object detection[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1912.04799
[22] Liu Zechen, Wu Zizhang, Tóth R. SMOKE: Single-stage monocular 3D object detection via keypoint estimation[EB/OL]. [2020-04-03]. http://arxiv.org/abs/2002.10111
[23] Xu Danfei, Anguelov D, Jain A. PointFusion: Deep sensor fusion for 3D bounding box estimation[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2018: 244-253
[24] Lin S C, Zhang Yunqi, Hsu C H, et al. The architectural implications of autonomous driving: Constraints and acceleration[J]. ACM SIGPLAN Notices, 2018, 53(2): 751-766
[25] Sun Pei, Kretzschmar H, Dotiwalla X, et al. Scalability in perception for autonomous driving: Waymo open dataset[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1912.04838
[26] Apollo Team. Apollo[EB/OL]. [2020-04-03]. http://apollo.auto/robotaxi/index_cn.html
[27] Da Silva Carvalho M D, Koark F, et al. Real-time image recognition system based on an embedded heterogeneous computer and deep convolutional neural networks for deployment in constrained environments[EB/OL]. [2020-04-03]. https://www.sae.org/publications/technical-papers/content/2019-01-1045/
[28] Nvidia. Nvidia cuda C programming guide[EB/OL]. [2020-04-03]. http://developer.download.nvidia.com/compute/cuda/7_0/Prod/doc/EULA.pdf.
[29] Migacz S. 8-bit inference with TensorRT[EB/OL]. [2020-04-03]. http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf
[30] Yang Ming, Wang Shige, Bakita J, et al. Re-thinking CNN frameworks for time-sensitive autonomous-driving applications: Addressing an industrial challenge[C] //Proc of the IEEE Real-Time and Embedded Technology and Applications Symp(RTAS). Piscataway, NJ: IEEE, 2019: 305-317
[31] Courbariaux M, Hubara I, Soudry D, et al. Binarized neural networks: Training deep neural networks with weights and activations constrained to +1 or -1[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1602.02830
[32] Rastegari M, Ordonez V, Redmon J, et al. XNOR-net: Imagenet classification using binary convolutional neural networks[G] //Lecture Notes in Computer Science (Including Subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics). Berlin: Springer, 2016: 525-542
[33] Zhu Chenzhuo, Mao Huizi, Han Song, et al. Trained ternary quantization[EB/OL]. [2020-04-03]. https://arxiv.org/abs/1612.01064
[34] Jacob B, Kligys S, Chen Bo, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2018: 2704-2713
[35] Wang Kuan, Liu Zhijian, Lin Yujun, et al. HAQ: Hardware-aware automated quantization with mixed precision[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 8604-8612
[36] Polino A, Pascanu R, Alistarh D. Model compression via distillation and quantization[EB/OL]. [2020-04-03]. https://arxiv.org/abs/1802.05668
[37] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1503.02531
[38] Zagoruyko S, Komodakis N. Paying more attention to attention: Improving the performance of convolutional neural networks via attention transfer[EB/OL]. [2020-04-03]. https://arxiv.org/abs/1612.03928
[39] Yim J, Joo D, Bae J, et al. A gift from knowledge distillation: Fast optimization, network minimization and transfer learning[C] //Proc of the 30th IEEE Conf on Computer Vision and Pattern Recognition( CVPR 2017). Piscataway, NJ: IEEE, 2017: 7130-7138
[40] Chen Yuntao, Wang Naiyan, Zhang Zhaoxiang. DarkRank: Accelerating deep metric learning via cross sample similarities transfer[C] //Proc of the 32nd AAAI Conf on Artificial Intelligence( AAAI 2018). Amsterdam: ELSEVIER, 2018: 2852-2859
[41] Chetlur S, Woolley C, Vandermersch P, et al. cuDNN: Efficient primitives for deep learning[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1410.0759
[42] PyTorch Team. Optimizing CUDA recurrent neural networks with TorchScript[EB/OL]. [2020-04-03]. https://pytorch.org/blog/optimizing-cuda-rnn-with-torchscript/
[43] Abadi M, Agarwal A, Barham P, et al. TensorFlow: Large-scale machine learning on heterogeneous distributed systems[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1603.04467
[44] Paszke A, Gross S, Massa F, et al. PyTorch: An imperative style, high-performance deep learning library[C] //Advances in Neural Information Processing Systems. New York: Curran Associates, 2019: 8024-8035
[45] Roesch J J, Lyubomirsky S S, Weber L L, et al. Relay: A new IR for machine learning frameworks[C] //Proc of the 2nd ACM SIGPLAN Int Workshop on Machine Learning and Programming Languages, Co-Located with PLDI 2018 (MAPL 2018). New York: ACM, 2018: 58-68
[46] Qiao Bo, Reiche O, Hannig F, et al. From loop fusion to kernel fusion: A domain-specific approach to locality optimization[C] //Proc of the 2019 IEEE/ACM Int Symp on Code Generation and Optimization(CGO 2019). Piscataway, NJ: IEEE, 2019: 242-253
[47] Chen Tianqi, Moreau T, Jiang Ziheng, et al. TVM: An automated end-to-end optimizing compiler for deep learning[C] //Proc of the 13th USENIX Symp on Operating Systems Design and Implementation(OSDI 2018). Berkeley, CA: USENIX, 2007: 579-594
[48] Chen Tianqi, Zheng Lianmin, Yan E, et al. Learning to optimize tensor programs[C] //Advances in Neural Information Processing Systems. New York: Curran Associatie, 2018: 3389-3400
[49] Vasilache N, Zinenko O, Theodoridis T, et al. Tensor comprehensions: Framework-agnostic high-performance machine learning abstractions[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1802.04730
[50] Baghdadi R, Ray J, Romdhane M Ben, et al. Tiramisu: A polyhedral compiler for expressing fast and portable code[C] //Proc of the 2019 IEEE/ACM Int Symp on Code Generation and Optimization (CGO 2019). Piscataway, NJ: IEEE, 2019: 193-205
[51] Iandola F N, Han Song, Moskewicz M W, et al. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1602.07360
[52] Howard A G, Zhu Menglong, Chen Bo, et al. MobileNets: Efficient convolutional neural networks for mobile vision applications[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1704.04861
[53] Han Kai, Wang Yunhe, Tian Qi, et al. GhostNet: More features from cheap operations[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1911.11907
[54] Chen Hanting, Wang Yunhe, Xu Chunjing, et al. AdderNet: Do we really need multiplications in deep learning?[EB/OL]. [2020-04-03]. http://arxiv.org/abs/1912.13200
[55] Tan Mingxing, Chen Bo, Pang Ruoming, et al. MnasNet: Platform-aware neural architecture search for mobile[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 2815-2823
[56] Liu Hanxiao, Simonyan K, Yang Yiming. DARTS: Differentiable architecture search[EB/OL]. [2020-04-03]. https://arxiv.org/abs/1806.09055
[57] Real E, Aggarwal A, Huang Y, et al. Regularized evolution for image classifier architecture search[C]//Proc of the AAAI Conf on Artificial Intelligence. Amsterdam: Elsevier, 2019: 4780-4789
[58] Chen Kai, Wang Jiaqi, Yang Shuo, et al. Optimizing video object detection via a scale-time lattice[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2018: 7814-7823
[59] Kumar A R, Ravindran B, Raghunathan A. Pack and detect: Fast object detection in videos using region-of-interest packing[C] //Proc of ACM Int Conf Proceeding Series. New York: ACM, 2019: 150-156
[60] Zhu Xizhou, Xiong Yuwen, Dai Jifeng, et al. Deep feature flow for video recognition[C] //Proc of the 30th IEEE Conf on Computer Vision and Pattern Recognition(CVPR 2017). Piscataway, NJ: IEEE, 2017: 4141-4150
[61] Liu Xingyu, Qi C R, Guibas L J. Flownet3D: Learning scene flow in 3D point clouds[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2019: 529-537
[62] Pan Bowen, Lin Wuwei, Fang Xiaolin, et al. Recurrent residual module for fast inference in videos[C] //Proc of the IEEE Computer Society Conf on Computer Vision and Pattern Recognition. Piscataway, NJ: IEEE, 2018: 1536-1545
Zhang Yanyong, born in 1975. PhD, professor. Member of CCF. Her main research interests include edge computing, AIoT, and perception for autonomous systems.
Zhang Sha, born in 1998. Master candidate. Her main research interests include perception for autonomous driving.
Zhang Yu, born in 1972. PhD, associate professor. Senior member of CCF. Her main research interests include software analysis and optimization, quantum computing and edge computing.
Ji Jianmin, born in 1984. PhD, associate professor. Member of CCF. His main research interests include mobile robots, deep reinforcement learning.
Duan Yifan, born in 1998. Master candidate. His main research interests include simultaneous localization and mapping.
Huang Yitong, born in 1997. Master candidate. His main research interests include computational optimization of artificial intelligence.
Peng Jie, born in 1997. Master candidate. His main research interests include mobile robots.
Zhang Yuxiang, born in 1996. Master candidate. His main research interests include heterogeneous computing and compilation.