深度解构自动驾驶核心技术
一、定义
按照美国汽车工程师学会(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)的使用,无论是行人信息,传感器信息,亦或者是交通信号等,利用V2X(Vehicle 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度视角的相机,事实上,这一类相机的难点并不在捕捉图像而是在图像拼接上,因为球面图像是高度失真的,所以校准的难度很大。