专家介绍
王冠是蔚来汽车首位机器学习工程师,参与设计了蔚来汽车目前所有机器学习项目,开发了其中主要部件。曾任LinkedIn资深数据科学家,最早把机器学习引入LinkedIn商业分析部,并帮助团队从3人扩展至70人。王冠博士毕业于UIC,师从Philip Yu进行数据挖掘和机器学习的研究工作,并在KDD,ICDM,WWW,ICDE,CIKM等会议上发表十余篇论文。
汽车的体系结构
汽车的体系结构主要包括了车载电脑、传感器、控制器和车载网络。
1.车载电脑
车载电脑主要有CPU,随着深度学习更多参与到车内计算,还会有GPU,以及FPGA、ASIC等专属的电子单元和芯片,满足计算需求的同时照顾到汽车自身特性。不同于我们使用的电脑硬件,汽车的CPU、GPU对散热和功耗有更为严格的需求,需经过额外的测试,以符合车规标准。然后还有data BUS(数据总线)在车内传送数据信息。另外,车载电脑的存储器在下一代汽车的性能将更高,据估计,汽车全部传感器运作收集数据一小时的话能达到1~2TB的数据量。
下图展示的Udacity的自动驾驶试验车的改装造价达到二三十万美元或者更多,不过这里面的软硬件未达到车规标准,还需要把后备箱的很多设备缩减在一个电路板上,这样的试验车距离量产还有很远距离。NVIDIA正在做一些集成电路板的工作,比如此前发布的DRIVE CX的车载娱乐系统和DRIVE PX2的自动驾驶系统,不过这样的芯片仍未达到车规,还在不断地迭代中。
当前芯片硬件的发展需要和深度学习方面的进展相匹配,适应和优化计算需求,使其固化在芯片上。然后科研人员再利用这样的开发板进行测试,这样的方式要比Udacity的试验车进一大步。
车厂也要和芯片公司形成协同开发的流程:汽车搭载芯片上路获取数据,再反馈给芯片或算法公司,有利于技术更有效地实现升级更迭,这将是个较长的过程。
2.传感器
下图是Uber的试验车。顶上转的那个是激光雷达,顶上盒子里应该装的是高精度GPS。这两个东西都很贵,应该都比车本身还贵。摄像头一般装在车轮上沿的车身四周,有的有三个,有的有八个,覆盖360度。和摄像头类似位置的还有声纳等传感器。这里主要谈一下摄像机。
汽车搭载的摄像机并不是封装集成好的,只是镜头和一些光学器件,需要自己在芯片内存里写程序。摄像机会有各种各样的性能要求,比如在白天光线很强的时候摄像头曝光不能过高,晚上则需要夜视功能,有些时候还要有视角很广的鱼眼相机。如此一来就需要有好几个摄像头,每个摄像头还来自不同的供应商,功能不同,车厂需要自己去组装安排,接入车载电脑实时处理,工程量很大,对软件开发要求也很高。当然也有供应商提供整套解决方案,不过那样的话定制化周期就会很长。
3.车内网络
当前无论是奔驰这样的高端车,还是丰田、本田这种中低端汽车的网络结构都非常简单,相当于六七十年代网络的水平。首先是不安全:现在车载网络的数据还没有加密,任何一个指令发出(比如升降车窗的指令),其他的控制器都能收到;其次是网络慢、带宽低,当前的车载网络根本无法满足自动驾驶数据流的需求;然后是容错性(可靠性),某个通信节点的损坏不应影响整体。因此自动驾驶需要有更安全、满足高数据流、与云端可靠连接的网络结构。
控制器的话比较成熟,比如设定汽车转向多少度,通过数字模拟信号已经能较好地实现汽车控制。
此外需要谈一下汽车的冗余性,Waymo非常注重这一点,会将子系统设计两套,一旦发生损坏汽车也能够安全地实现自我抢救。分享嘉宾曾经在Waymo的一次demo上,看过工程师在汽车自动驾驶过程中剪断了一条供电的线路,车子判断系统异常,启动应急机制,并且自动安全地停在了路边。未来更智能的车里,这个冗余性非常重要。
自动驾驶的基本组成
自动驾驶主要分为四个部分:Localization(定位)、Perception(感知)、Planning(规划)以及Control(控制),以下主要对前三者进行解读。
1.定位
定位简单讲就是解决“在哪里”的问题,需要借助激光雷达、摄像头等传感器反复上路收集数据构建高精地图。当然其中也有一些问题:激光雷达价格当前还是居高不下,发射的点云比较稀疏,很难去区分和识别目标物体。点云的弥补办法就是同一条道路反复跑很多遍,直到覆盖的点云数据足够密集;或者与摄像头结合,利用摄像头的目标识别能力选择性地向物体发射和收集点云数据。
摄像头的校准也是大问题。一般摄像头有内部校准和外部校准,其中内部校准一般在摄像头出厂时已设定好,比如说焦距,外部校准则是指通过照相来精确定位摄像头在汽车的安装位置,实现较难。汽车摄像头在安装过程很难避免误差产生,导致其所在位置和设定好的坐标轴不匹配,汽车感知系统因而出现偏差。现在有自动校准技术来使摄像头一定程度上实现自我矫正,比如利用Visual Odometry技术和几种滤波器(kalmanfilter,particle filter等等),但仍不太能满足要求。实际量产中多数为半自动程序纠正,影响了量产效率。
假设在有高精地图,和校准了的传感器的前提下,定位是可以很好的解决的。还可以通过自身定位和历史数据来生成所走路线的地图。这就是SLAM技术要做的事。不过其算法还未达到自动驾驶的需求,对GPS的精度要求也很高。
所以“做地图”和“用地图来自动驾驶”是两个不同的工程,但是它们又相辅相成。而机器学习特别是下面要谈的感知技术又是这两个工程都不可或缺的重要组成部分。
2.感知
感知部分深度学习使用较多,进行目标识别和检测。但当前感知仍是浅层的,实际的检测准确率也只有70~80%。比如多数系统只能识别目标是车,但是不理解不同的车型会影响我们的驾驶判断。比如消防车、医护车还是警车在旁边的时候,或者它们信号灯开闪的时候,我们的驾驶行为是要做出改变的,而自动驾驶算法还未做到这点。
另外,有些物体是可以忽略的,比如小的纸箱子,有些不能忽略,比如石头,现在的物体识别还没做到可以理解这些含义的地步。再举个例子,镜子里的车也会被认为是真车。所以,理解这些物体的“物理意义”将是深度学习需要解决的难题,这属于另一个范畴,这里不展开谈了。
此外,重要的tracking(目标跟踪)技术当前也发展不足。传统使用的卡尔曼滤波器能够根据周边汽车在1~2秒短时间内近乎匀速的运动大概估计其速度信息,基于深度学习的tracking依靠以往的训练数据跟踪和预判汽车轨迹,但效果比前者还是差一些,不够成熟。
3.规划
汽车实现定位、感知,需要进一步规划接下来的驾驶行为。规划(planning)主要分为以下几类:
Route planning(路径规划)是指宏观层面为汽车设定驾驶路线,类似于我们手机里的地图,输入起点终点,规划一条路径,该技术当下已经非常成熟,并实现了毫秒级的响应;微观的behavior planning(行为规划)则根据对周边态势的感知预测来决定是否进行转向、加减速的动作;Motion planning(运动规划)粒度更细,规划汽车短时间内的转向角度、加速度变化等。
行为规划是难点。而行为规划又分成1~2秒的规划,和30秒左右的规划。
1~2秒内汽车的路径规划可以利用RRT(快速搜索随机树)或CC-RRT(可理解为概率计算+RRT算法)技术,通过机器学习系统感知周围物体并预测其未来分布位置的概率,为了降低撞到其他物体的几率,汽车会通过树状搜索规划出一条即时路径。做CC-RRT最好的是MIT的一个实验室。CC-RRT的作者在其MIT博士毕业之后去了Google做自动驾驶的path planning的负责人。所以今天Waymo的系统很可能就是那样做的。不过以上只针对1~2秒的行为判断,30秒的提前预判目前还未解决,处于萌芽状态。
当前很多车厂在路径规划上的做法仍是基于人工的规则系统进行的,事先设定上千条可预期的驾驶规则,避免常见事故,但交通场景千变万化,基于规则设定是无法覆盖全部场景的。
自动驾驶中的机器学习
机器学习在自动驾驶中覆盖到很多方面,包括定位,感知,决策的很多细节。这里就其中决策规划的重要部分进行分享,很多科研工作取得了很好的进展,但是还没有到人工智能能够独立控制开车的地步。
大家都知道开车积累的图像数据要为机器学习所用,需要对每帧图像中的目标物体、可驾驶区域和驾驶路径的变化都需要进行标注,帮助机器学习后期在感知、预测、行为规划的训练,使算法能够在以后自主对未处理图像进行标注判断。
训练机器学习系统当前有几类模型,比如Behavior cloning(行为复制),是利用CNN(卷积神经网络)和LSTM(长短期记忆网络),学习以往的驾驶数据来应对以后发生的类似场景。但面对没遇到的场景时该模型将难以应对。
另一方案是将人类的驾驶数据输入GAN(生成式对抗网络)进行训练,自我生成可比拟人类驾驶的行为数据,放入LSTM中,根据历史行为输出未来可能的驾驶行为,使系统具备预测能力。这方面目前斯坦福有个实验室做了很多工作,但该研究仍处于萌芽状态,离应用到量产车上仍有很大距离。
结合之前讨论的内容,如果以机器学习系统来指导汽车自动驾驶,现在还处于非常初级的阶段。相对较好的还是通过机器学习进行目标识别、感知、预测,再使用机器人技术(CC-RRT)搜索和规划路径。