特斯拉Autopilot如何单挑全世界?

“你会开车是因为你的眼睛看到了路况,而不是你的眼睛发射出激光。”不得不说特斯拉是一家特别的车企,坚持走纯视觉识别路线。

作者 / 毓肥 出品 / 公众号“电动星球News” (ID:glxsl2017)

特斯拉是一家很开放的车企。 

所谓开放,指的是马斯克年初那一句「特斯拉愿意开放并共享自己的所有专利」,还有在 GitHub 上公开了自家车机操作系统的底层代码,以及在全球最大的软件 BUG 讨论社区 Bugcrowd 里面发下英雄帖,广邀全球黑客黑自家系统。 

近日,特斯拉再一次将自家 Autopilot 的秘密向世界公开。特斯拉AI部门高级主管 Andrej Karpathy 近日出席了一个有关深度学习的会议——PyTorch Developer Conference 2019,并且进行了一段时长 11 分钟的演讲,主题就是 Autopilot 如何在计算机视觉深度学习中应用 PyTorch。 

众所周知,特斯拉坚决不支持汽车界普遍力撑的激光雷达方案,而是坚持走纯视觉识别路线,Andrej Karpathy 这次演讲,等于用一种硬核的方式,再一次向世界宣战。 

我们将这次演讲的精华部分摘录下来,并以尽量简练的语言解释,于是就有了今天的文章。 

  • 什么是 PyTorch?

要讨论 Andrej Karpathy 在这个视频里面说了什么,我们先来搞清楚一个概念——PyTorch。 

PyTorch 的「祖先」叫做 Torch(意思为火炬),Torch 是一个基于 BSD License 的开源机器学习框架,最早的 Torch 版本于 2002 年发布,主要应用于图像和视频类的深度学习,目前谷歌、Facebook、Twitter 都应用了 Torch 的分支版本。 

电动星球注:BSD License 最早在1988 年由加州大学伯克利分校起草,是目前给予使用者最高自由的开源协议,使用者基本上可以「为所欲为」地修改源代码,并且将代码打包成专有软件。

至于 PyTorch,则是 Torch 使用 Python 语言编写的版本。 

Torch 的底层是由 C 语言和 Lua 语言编写的,C 语言作为底层,而 Lua 语言作为深度学习库,两种语言都非常优秀,实际上目前仍然有很多大型企业采用 Torch 进行深度学习,比如上文提到的几家。 

2017 年 1 月, PyTorch 正式在 GitHub 上发布,号称拥有更高的编译和运行效率,而实际上它也做到了——靠的就是 Python 语言。 

一句话总结一下 1989 年出生的 Python:常被戏称为「胶水语言」,因为 Python 能够基于其他语言的各种模块结合到一起。根据权威数据挖掘网站 KDnuggets 的调查,Python 已经成为最受 AI 从业者欢迎的语言。 

基于 Python 语言的 PyTorch 框架,也同样获得了众多企业和研究者的青睐。单说自动驾驶方面,除了特斯拉,Uber 也和斯坦福大学基于 PyTorch 研发出开源概率编程语言 Pyro。除此以外,Facebook、英伟达、美国艾伦人工智能研究所也都走在了 PyTorch 应用的前头。

  • 特斯拉如何利用 PyTorch?

Andrej Karpathy 在演讲的开场这样说:「由于我们没有采用激光雷达,也没有采用高精度地图,所以 Autopilot 的一切功能,都依赖于来自车身四周 8 个摄像头提供原始图像之后,再进行的计算机视觉运算。」 

他随后给出了一张流程图,里面是 Autopilot 工作的所有流程,有趣的是,Andrej Karpathy将这一套流程称为「Operation Vacation(操作假期)」,他说「因为现阶段我的团队已经可以在椅子上葛优瘫,然后数据就会从特斯拉的车子上传过来,在神经网络模型上自己不断循环运行」: 

特斯拉AI部门令人艳羡的「假期」里面,「PyTorch Distributed Training」占了单独的一个部分——但凭什么呢? 

先上结论:特斯拉利用 PyTorch 框架效率更高的特点,不断将 Autopilot 软件的并行学习性能进一步提升。

以上图为例,在以上的典型场景内,Autopilot 需要同时处理 10 个不同类别的任务——而道路场景是极其复杂的,也就是说,Autopilot 时刻面临着数十个任务并行处理的挑战。Andrej Karpathy 的原话是「almost 100 tasks(几乎同时处理 100 个任务)」。

为了有效处理将近 100 个并行任务,特斯拉采用了「类 ResNet-50」的骨干网络。那什么是 ResNet-50? 

随着深度学习研究的不断发展,深度学习神经网络也在不断加深,而随着网络深度的上升,训练准确度也会随之下降,ResNet 就是因此而生,它的中文名叫做深度残差网络。ResNet 有多个不同版本,包括 ResNet30/50/101 等,主要区分度在于 Layer 卷积层和 Block 区块数量上,这里就不展开了(毕竟是个汽车公众号…)。 

然而,即使采用了更高效的网络,Andrej Karpathy 依然表示「我们无法让每一个任务都享有单独的神经网络运算,因为同时处理的任务数实在太多,我们只能把一些运算分摊到共享骨干网络上」。 

Andrej Karpathy将分摊到共享骨干网络上的任务称作「Hydra Nets(Hydra 意为九头蛇)」,中二之余又不失准确。比如说下图高速公路上行驶时的物体识别: 

还有 Smart Summon 模式下道路边缘的识别与确定:

Andrej Karpathy 将这种类型的计算称为「在图像中进行预测,以空间和时间为维度将这些图像有选择性地部分删除,同时通过图像拼接和变换,以此让车辆明白现在所处的位置」:

另一个依赖 PyTorch 提升运行效率的,叫做 Recurrent Tasks。 

Recurrent Tasks 是来自于 RNN 的运算任务,中文名有两个,有的翻译成循环神经网络,更主流的译法是递归神经网络,因为 RNN 有两个算法变体——一种是时间递归神经网络(recurrent neural network),另一种是结构递归神经网络(recursive neural network),两者的缩写都是 RNN。 

RNN 听起来虽然很阳春白雪,但它已经在实际应用中为我们默默服务了很久——机器翻译、语音识别、生物研究中的 DNA 序列分析,都应用了 RNN 运算。而在自动驾驶中,RNN 通常被应用在前方道路预测中。 

Andrej Karpathy 举了以上的场景做例子,解释 Recurrent Tasks 提升效率之后,对 Road Layout Prediction(道路层预测)的重要性: 

「我们给每台摄像头都配备了相应的 Hydra Nets,但很多时候你需要同时采集多个摄像头的数据,然后再进行运算。比如说在过一个三岔路口的时候,我们有三个摄像头同时为这个场景的深度学习运算输入图像数据。此时的神经网络预测就不再只是单纯的图像识别,而是基于总-分结构的复合运算。」 

谈到这个场景的时候,Andrej Karpathy 顺便以此为例子,对Hydra Nets给出了进一步的解释: 

「我们为所有的计算任务准备了 8 个 HydraNets,当然所有 Hydra Nets 的运算任务都可以进一步进入 RNN 做递归运算。然后我们可以按照这样的总-分结构做输出。也就是说,Autopilot 软件里面有一个大型的单一计算网络,然后每一个任务都可以分采样这个计算网络(接收到的图像)的一小部分,然后训练那一小部分的神经网络。」 

「比如说,我们可以单独训练摄像头的障碍物探测功能,或者是色彩深度网络,又或者是道路布局网络。所有单一任务都分采样了图像数据的一小部分,然后单独训练那一部分(的神经网络)」。 

接下来,Andrej Karpathy 用了一张图展示了 Autopilot 软件需要处理的图像数据量: 

乍眼一看,这张图里面只有两个数字是可以望文生义的:代表原因的8个摄像头和代表结果的 4096 幅图像。而其中的过程则相当复杂。 

Time steps 和 Batch size 需要一起讲,没有写中文是因为现在的深度学习界依然没有给它们一个比较信达雅的官方翻译。其中 Batch size 代表了在深度学习网络中单一批次的数据数量,比如我们往一个 RNN 里面输入 100 条数据,分成 10 个 Batch,那 Batch size 就是 10。 

至于 Time steps 则是预测最终值需要的最大「步数」,比如说 Autopilot 软件的 Time steps 是 16,也就是说每次会生成 x0-x15,一共 16 组数据,最终预测结果——每次,指的就是图中每一个「Forward pass」。 

目前深度学习最热门的硬件是 GPU,Andrej Karpathy 则用了一张图来描述 Autopilot 神经网络对于 GPU 运算的要求有多高: 

在图中显示的 70000 GPU Hours,表示Autopilot深度计算网络如果用单一GPU运算需要用到 7 万小时——Andrej Karpathy 的原话是「如果你用一组 8 个 GPU 去训练 Autopilot 的深度运算网络,你得花一年」——当然他没说用作对比的是什么 GPU。 

最后,Andrej Karpathy 例牌吹了一波自家的 FSD 芯片,特斯拉的 11 分钟炫技至此全部结束——但这一次的 PPT 和 4 月份发布时有所不同,硬件 3.0 的工作功耗不再用250W/英里这样的单位定义,而是换算过来更低的「Sub 100W(低于 100W)」——至于是不是特斯拉式神优化,我们只能等 FSD 芯片大规模装机之后才能知道了。

  • 结语

今天 Andrej Karpathy 的演讲,虽然不太准确,但我们可以尝试用一句话概括——特斯拉很希望把你的车变成一个人。 

今年 4 月份 FSD 芯片发布的时候,Andrej Karpathy 说过一句话,宣布了特斯拉与激光雷达彻底绝缘:「你会开车是因为你的眼睛看到了路况,而不是你的眼睛发射出激光」。今天,Andrej Karpathy 也说了「我们不用高精度地图」。 

于是,一辆逐步走向自动驾驶的特斯拉,在行为模式上会变得越来越像人——用眼睛收集图像数据,然后用大脑判断自身所处环境,指挥四肢做出行动。 

特斯拉的逻辑似乎更接近人类本能,但却是汽车界实打实的少数派。传统汽车界,包括造车新势力,都对激光雷达和高精度地图抱有更高的信心。 

蟹老板上周体验小鹏 P7(详见《武装到牙齿的小鹏 P7,能打赢特斯拉Model 3?》)的时候说过这么一段话: 

「超视距+实时在线,这是我们认为小鹏 P7 在自动驾驶方案上与特斯拉最大的不同。某种程度上,你可以将特斯拉看成桌面端或者单机的,将小鹏 P7 看成是移动端或者联网的。」 

特斯拉已经在纯视觉方案这条路上越走越远,但马斯克真的是对的吗?他能以一己之力对抗全世界吗?你们的意见又是什么?

本文已注明来源和出处,版权归作者所有,如有侵权,您可以告知我们(点击此处)

参与评论

请输入你的评论!
请在这里输入你的名字