国内最牛的无人驾驶厂家的运算平台是这样的,一个英特尔至强E5的CPU,拥有12内核,30MB的二级缓存,运算能力为400GOPS/s,功率消耗为400瓦(应该是第一代至强E5,目前E5最高功率消耗都不超过180瓦),八个英伟达的K80 GPU,每一个K80的运算能力为8TOPS/s,通过PCI-E连接,每一个K80的功率消耗为300瓦,合计是2800瓦的功率,取得64.4 TOPS/s的运算能力。
和Waymo的车一样,需要一个备份系统,当然这个备份系统处于待机状态,功耗可能不到500瓦。但是为了有足够的冗余,同时还要考虑到传感器的功率消耗(传感器功率一般都很低,即便是Velodyne的HDL-64E,典型功耗仅60瓦),整体系统的功率设计为5000瓦,原车的电源系统当然不行,需要一个发电机,或者双电瓶设计。这一套系统价格大约3万美元。
这样的设计只能用于Demo,量产自然不能这样子了。未来量产的无人驾驶运算平台可能会是什么样的,可能是这样的:未来汽车运算平台架构是一片CPU或者说SoC,对应大部分控制和运算量不大但逻辑关联比较多的运算,一片FPGA或GPU做加速,对应运算量很大,但内部几乎没有逻辑关联的运算,例如车辆识别算法,行人识别算法,车道线识别算法;再加一片安全控制MCU,通常是英飞凌的Aurix系列MCU,使整体系统达到ASIL D级安全等级。即便是这样的系统,其功耗最少也在500瓦以上。
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458404601838105.jpg)
以英特尔的Go最为典型,如上图,Waymo用FCA大捷龙改造的无人车很有可能使用了类似的运算平台。
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458404717807245.jpg)
上图为英伟达的PX2,PX2与英特尔的Go基本上如出一辙,只不过用GPU取代了FPGA。 FPGA作为一种高性能、低功耗的可编程芯片,可以根据客户定制来做针对性的算法设计。所以在处理海量数据的时候,FPGA 相比于CPU 和GPU,优势在于:FPGA计算效率更高,FPGA更接近I/O。FPGA不采用指令和软件,是软硬件合一的器件。对FPGA进行编程要使用硬件描述语言,硬件描述语言描述的逻辑可以直接被编译为晶体管电路的组合。所以FPGA实际上直接用晶体管电路实现用户的算法,没有通过指令系统的翻译。FPGA是由查找表(LUT)和触发器来构成,LUT的物理结构就相当于一个SRAM,运行状态就像ROM,通过输入的值决定输出的值。假设在FPGA中要实现一个2输入的与门,那么该与门的输入输出对应关系为:
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458404802362380.jpg)
既然有了此对应逻辑关系,那么在SRAM对应的地址中只需存储相应的输出数值,而输入数值作为地址来查表即可得到正确的输出值即可。当输入地址为0,0时,输出0地址里存储的值0,当输入地址为0,1时,输出1地址里存储的值0,当输入地址为1,0时,输出2地址里存储的值0,当输入地址为1,1时,输出3地址里存储的值1。
某种意义上讲,FPGA是不计算的,它只是个存储器,对逻辑组合电路,先预先存储不同输入对应的输出组合,然后根据输入数据,选择对应的输出。这就决定了FPGA拥有无论伦比的速度和低功耗。但是FPGA没有CPU和GPU的取指令和指令译码能力,这就注定无法单独使用,通常会加一个ARM内核的CPU来处理比较简单的指令,这样的FPGA叫SoC FPGA。这样一来,FPGA的适用面广了,但是性能肯定要下降了,尽管如此,还是比CPU和GPU的效率要高不少。
GPU是把晶体管更多用于计算单元,而不像CPU用于数据Cache和流程控制器。这样的设计是因为并行计算时每个数据单元执行相同程序,不需要繁琐的流程控制而更需要高计算能力,因此也不需要大的cache容量。GPU中一个逻辑控制单元对应多个计算单元,同时要想计算单元充分并行起来,逻辑控制必然不会太复杂,太复杂的逻辑控制无法发挥计算单元的并行度,例如过多的if…else if…else if…分支计算就无法提高计算单元的并行度,所以在GPU中逻辑控制单元也就不需要能够快速处理复杂控制。
所以GPU适合空间域的数据处理,数据之间缺乏时间顺序上的逻辑关联,数据的独立性强,图像是最适合GPU处理的,FPGA并不占优势,而视频之间的语义关联则不适合GPU。比如行人过马路这个视频,要根据前后视频关联来分析行人是要停下来还是加速通过,这种深度学习应用,FPGA比GPU更合适。而行人识别,车道线识别,GPU更适合。同理,语音识别也是如此,要知道上下文语义关联,FPGA就比GPU更合适。
也就是说FPGA更适合RNN和LSTM,GPU更适合CNN。LSTM可以看成RNN的变种,比RNN多了memory cell和forgetgate,语音信号又是一种上下文相关的长时相关性时序信号,所以LSTM做语音识别精度最高。微软IBM阿里采用的都是LSTM。
那么LSTM和无人车又有什么联系?这就是目前最火的深度学习与无人车的结合。传统的无人车使用大量的传感器和栅格法来做环境感知和决策,这种方法成本太高了。于是就有人想出了利用深度学习来学习人类驾驶习惯的方法,只用一个不到10美元的消费级摄像头做传感器,用深度学习代替栅格法,这就是百度所说的RoadHackers。
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458404907267775.jpg)
RoadHackers是百度的自动驾驶开放平台,也是世界上首个可在真实道路上实现端到端模式的高级自动驾驶模型。Road Hackers平台首期将开放1万公里自动驾驶训练数据,并已具备提供海量中国路情驾驶数据开放,基于深度学习的自动驾驶算法演示,以及自动驾驶算法Benchmark评比等能力。CES Asia上的路测车辆采用Road Hackers平台技术,集成有基于单摄像头的端到端深度学习自动驾驶解决方案。红色的线代表方向盘转向的角度。绿色的线代表用算法预测出的司机对方向盘的转动。从红绿两条线的趋势可以看出,收敛的趋势越来越明显。以前只是用了 CNN的算法,造成对横向控制(体现在方向盘转动角度)的预测越来越好,但对纵向控制(体现在加减速)的预测做得不好。LSTM就派上用场了。
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458404991969385.jpg)
与百度类似,George Hotz及Comma.ai也使用了类似的方法,并且在2016年8月公布了源代码,人人都可以下载研究。
简单解释一下LSTM的工作原理。LSTM区别于RNN的地方,主要就在于它在算法中加入了一个判断信息有用与否的“处理器”“,这个处理器作用的结构被称为cell。LSTM,所谓长短期记忆网络,就是来区分哪些记忆要归位长期记忆,哪些记忆只需要短期储存。
![](http://www.shujubang.com/UpLoads/Special/File/2017_11/636458405085325204.png)
(LSTM的内部处理器和三重门)
一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。说起来无非就是一进二出的工作原理,却可以在反复运算下解决神经网络中长期存在的大问题。目前已经证明,LSTM是解决长序依赖问题的有效技术,并且这种技术的普适性非常高,导致带来的可能性变化非常多。各研究者根据LSTM纷纷提出了自己的变量版本,这就让LSTM可以处理千变万化的垂直问题。这就像人类的学习过程,不断地重复正确的选择,直到形成牢固的记忆。而FPGA实质上就是一种特殊的记忆体,所以LSTM更适合用FPGA来实现。
当然这种只靠一个摄像头的无人驾驶显然极不靠谱,首先光线对摄像头影响太大,光线的变化是不可控的,是随机的,永远不会完全一致,这对本来就是黑盒的深度学习来说是个灾难。其次目前大多是基于单目的深度学习,单目在目标距离判断上是靠像素大小来估测的,无法得到深度信息,距离估测的准确性很低,尤其在高低起伏的路面。例如重庆和贵阳的道路或立交桥,单目所估测的距离可能50%都是错误的。再次,摄像头的FOV与探测距离之间是矛盾的,FOV越窄,距离就越远,但是车辆周围就会出现盲区,这是很容易出事故的,FOV越宽,距离就越近,同时超过70度的广角会出现失真。即使三目摄像头也无法完全解决问题。最后,低照度情况下肯定不能用。不过这是一种低成本的尝试,仍然值得赞扬。这种方法可以做L2或L3级的无人驾驶。