特斯拉如何构建神经网络
特斯拉人工智能总监 Andrej Kaparthy 在过去 3 年多次就特斯拉如何将人工智能应用到 Autopilot 系统中进行了多次精彩的演讲,我们从演讲内容中梳理出特斯拉如何搭建神经网络架构。
特斯拉核心的感知是采用摄像头,没有采用激光雷达,也没有采用高精度地图,近期把毫米波雷达也摘下,所以 Autopilot 的一切功能都依赖于来自车身四周8个摄像头提供原始图像之后,再进行的计算机视觉运算。实现了包括自动驾驶、主动安全(例如在自动驾驶模式关闭时自动检测行人)、自动泊车(自动搜索停车场)等强大功能。

特斯拉使用8个摄像头来感知周边信息,可以覆盖车辆周围的所有区域,从而没有盲点。

8个摄像头融合在一起可以有效地定位并识别障碍物,但是按照16 个时间步长(循环架构),batch size 为 32 计算,意味着对于每一次前向传递,都会处理 4096 张图像,对于 MacBook Pro 永远无法支持这么庞大的图片处理,事实上,2 个 GPU 也同样做不到。
虽然通过神经网络理论上能够通过摄像头采集的图像进行目标检测,但要确保安全行驶需要检测的汽车周围的目标很多,比如车道线、静态物体、路标、人行横道等,结果就是 Autopilot 需要同时处理多个不同类别的任务,时刻面临着数十个任务并行处理的挑战。Karpathy 的原话是“almost 100 tasks”。

特斯拉的 Hydra Nets
Karpathy 提到由于处理的任务数实在太多,无法让每一个任务都同时享有单独的神经网络运算,只能把一些运算分摊到共享骨干网络上,特斯拉 AI团队组建了一个庞大的物体检测网络,将整个网络称作「Hydra Nets」(Hydra 意为九头蛇)。当然为了持续不断提升 HydraNet 性能,需要海量数据进行训练。
HydraNet 有共享主干和多个「头」(Head),每个头负责多个任务。对于每个检测任务,它可以有多个子任务,如果全部列出,数量甚至可以达到数千个任务。如下图,8 个图像都使用共享主干同步和融合。
HydraNet 的优点是可以针对特定用例(例如行人检测)对神经网络进行微调,而不会弄乱其他任务(例如车道线识别等),架构整体可以实现更高效的推理。

Hydranet 的演进
在今年7月举办的 CVPR 2021 自动驾驶研讨会上,Karpathy 详细介绍了特斯拉如何开发仅需要视频输入即可了解汽车周围环境的深度学习系统,提到在过去一年左右的时间里扩展了 Hydranet,将现在有分支成树干的头部进一步分支到终端。

参考上图,总体的算法框架如下:
-
8个摄像头图片首先由图像提取器处理:使用了类似于 ResNet 的架构,用以进行 Feature 的提取。
-
多机位融合(multicam fusion):可以理解为空间上的融合,将所有 8 个图像组合成一个超级图像。为此,Hydra 使用了类似 transformer 的架构。Transformer 是 Karpathy 在这次会议上分享的一个增量信息,下文进一步解读。
-
时间融合(time-fusion):添加时间维度,将图像融合在一起。有一个包含N个图像的视频队列,例如,如果他们想在2秒内融合,并且假设摄像机以每秒36帧的速度工作,则N将为72。时间融合是使用3D CNN、RNN 和/或 Transformer完成的。
-
输出被拆分为不同的HEAD:每个Head负责一个特定的用例,并且可以自行微调,此前Hydra中的Head较为单一,扩展后有了树干和终端,这是一种更深入、更具体地了解用例类型的方法,每个终端都可以处理自己的任务,进行行人检测、交通灯识别等。
经过 Hydra 最终直接进行 Birdeye View 输出,把 3D 立体空间转换到 2D 俯视图,可输出道路边缘、隔离带、通行区域等分割结果。

Transformer:告别卷积
上文提到 21 年的 CVPR 会议上,Karpathy 在 Hydranet 中加入了 Transformer,我们详细了解下:
Transformer 于 2017 年出现,是一种在语言翻译中获得 SOTA 结果的简单且可扩展的模型。它们很快被应用于其他 NLP(natural language processing)任务,并取得了最先进的成果,并且模型越大,结果越准确。
在计算机视觉(CV)领域,CNN 自 2012 年以来已经成为视觉任务的主导模型。随着出现了越来越高效的结构,计算机视觉和自然语言处理越来越收敛到一起,使用 Transformer 来完成视觉任务成为了一个新的研究方向,以降低结构的复杂性,探索可扩展性和训练效率。
在计算机视觉领域中采用 Transformer 的相关工作中主要有两种模型架构。一种是纯 Transformer 结构,另一种是将 CNNs/主干网与 Transformer 相结合的混合结构。
-
纯Transformer:Vision Transformer是基于完整的自注意力的Transformer结构没有使用CNN,这里做重点介绍。
-
混合型(CNNs + Transformer):DETR 是使用混合模型结构的一个例子,它结合了卷积神经网络(CNNs)和 Transformer。其中 CNN 被用来学习图像的二维表示并提取特征。
Vision Transformer(ViT)将纯 Transformer 架构直接应用到一系列图像块上进行分类任务,可以取得优异的结果。它在许多图像分类任务上也优于最先进的卷积网络,同时所需的预训练计算资源大大减少(至少减少了4倍)。

资料来源:AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
ViT 主要思路是将图像分割成固定大小的小块,形成图像序列 patches,然后将这些小块的线性投影连同它们的图像位置一起输入 Transformer,然后剩下的步骤就是标准的 Transformer 编码器和解码器。
ViT(vision transformer)也有不同的模型尺寸,包括基础型、大型和巨大型以及不同数量的 transformer 层和 heads。例如,ViT-L/16可以被解释为一个大的(24 层)ViT 模型,具有 16 × 16 的输入图像 patch 大小。
输入的 patch 尺寸越小,计算模型就越大,这是因为输入的 patch 数目 N = HW/P*P,其中(H,W)为原始图像的分辨率,P 为 patch 图像的分辨率。这意味着 14 x 14 的 patch 比 16 x 16 的图像 patch 在计算上更昂贵,如下表对比结果:

以上图像分类的 Benchmark 结果表明,在流行的图像分类基准上与最先进的技术进行比较,Transformer 在多个流行的基准数据集上优于已有的 SOTA 模型。
ViT 与不同架构 ResNets、Hybrid 的性能、成本做了对比,在相同的计算预算下,ViT 通常优于 ResNet。对于较小的模型尺寸,改进的 Hybrids 略超 ViT,但对于较大的模型,差距消失了,ViT 再次领先。总体来看,纯 Transformer 架构(ViT)在大小和计算规模上都比传统的 CNNs(ResNet BiT)更具效率和可扩展性。

ViT 的特点可以总结如下:
-
使用 Transformer 架构(纯或混合)
-
输入图像由多个 patch 平铺开来
-
在多个图像识别基准上击败了 SOTA
-
在大数据集上预训练更便宜
-
更具可扩展性和计算效率
由于 Transformer 的种种优势,特斯拉自动驾驶团队对此表达了浓厚的兴趣,并在网络中开始应用,同时 Elon Musk 的推特中提到的「Upgrade All NNs」也有可能是指对 Transformer 的应用。

Data Engine:特斯拉的强大优势
现实世界是复杂多样和长尾的
全自动驾驶需要检测一系列的任务,包括准确可靠地检测道路和道路标记,确定车辆在道路上的位置,检测交通标志,检测道路上的其他车辆、行人和任何其他物体等。
以检测限速和停车标志为例,如果大家的背景是机器学习,第一个直觉可能是现代深度神经网络应该能够轻松应对挑战,毕竟交通标志是刚性平面物体,具有凸形、无孔、标准形状,并且设计为高对比度和易于识别,貌似是最容易解决的对象检测任务之一,但现实比往常要困难得多。两个主要挑战是:
-
交通标志及的分类是广泛且不断发展的,每个国家/地区对交通标志采用不同的附加内容,分类法也不是固定的,因为随着时间的推移会产生新的变化,而旧的会被丢弃。
-
即使知道并维护分类方法,由于遮挡、照明以及道路维护公司在安装这些标志时的特殊情形,交通标志的外观也会有很大差异。

单独一个看似标准的道路标示就如此复杂,考虑到道路上永远会遇到从未遇到的场景,情形极其复杂,特斯拉在2019年4月的自治日曾经总结过道路场景的长尾:

Operation Vacation:特斯拉的 AI 方法
用于自动驾驶等应用的神经网络是通过训练机器学习模型来开发的,通常深度学习系统的性能至少部分受到用于训练模型的训练集质量的限制,在许多情况下,大量资源被投入到收集、整理和注释训练数据上。创建训练集所需的工作量可能很大,而且通常很乏味。此外,通常很难为机器学习模型需要改进的特定用例收集数据。
特斯拉有能力从上百万辆车的车队中实时迭代获取数据,但即使是采用 Shadow Model,数据量依然非常庞大,而特斯拉核心算法工程师仅有大约几十名,如何处理如此庞大的数据量?

Operation vacation:Karpathy 推动他的工程团队专注于建立通用AI基础设施,试图开发尽可能多的自动化机器来支持新任务的开发,以高效地收集数据、标记数据、训练和可靠地测试模型,以便将模型更新为检测新对象可由单独的产品管理和标签团队处理。这让特斯拉的 AI 团队保持敏捷和高效——而且开玩笑说,有时团队可能会休假,系统会在无需任何工程师的情况下能够自我得到改进。
Operation vacation 的核心是 Data Engine:数据引擎的目标是确保能够以最有效的方式收集数据,是反复应用主动学习以在检测器行为不匹配的情况下获取其他示例的过程。例如任务检测 caution lights,首先必须标记图像的种子集,以便有单元测试的种子集。然后对当前数据训练网络 Head,如果它在测试集上失败,他们将启动数据引擎以获取更多数据,从而提高准确性。一个近似的触发器将被离线训练并推送到特斯拉在道路上行驶的上百万辆汽车,以便在失败的场景中获取更多图像。然后将这些收获的图像标记并输入训练集。网络再次训练,测试集也丰富了,这些过程是迭代的,准确率能够从40%上升到99%。数据引擎有助于在长尾分布中积累大数据集,以覆盖模型在真实无约束世界中实现可靠执行所需的极长长尾。而数据引擎的核心原理很简单,主要步骤:
a) 用新的对象类标记初始数据集;
b) 训练模型以检测新对象;
c) 评估效果;
d) 查找性能低下的情况;
e) 将这些添加到数据单元测试中;
f) 在 shadow model 下将模型部署到车队以获取类似的边缘情况;
g) 从车队中检索案例;
h) 查看和标记收集的数据;
i) 重新训练模型;
j) 重复步骤 f-i,直到模型性能可以接受。
但凡事没有太过完美,Karpathy 在演讲中也承认没有任何方法可以完美地工作:模型中的闪烁检测、贝叶斯视角的神经网络不确定性、检测的突然出现、给定地图信息与预期检测之间的差异等。
数据引擎的核心原理并非特斯拉独有:它受到主动学习的启发,多年来一直是热门研究课题。特斯拉的竞争优势是无与伦比的数据收集规模。这是 Lex Fridman 对 Tesla Autopilot 里程的估算,显示特斯拉在 Autopilot 中收集了超过 30 亿英里,相比谷歌 Waymo,特斯拉目前至少领先 100 倍。

神经网络的训练:期待 Dojo 展示威力
对任何人来说,训练特斯拉这样一个拥有48个网络、1000多个感知输出的庞大的Multi-task模型是十分困难的,跑完一轮训练就要花费70000 GPU小时,累计时间接近8年,更何况模型训练要经过多次迭代、调优等过程。为了提高训练效率,Tesla自研了专门用于训练的Dojo Computer,马斯克曾在推特上说,特斯拉正在开发一种名为Dojo的神经网络训练计算机来处理真正海量的视频数据,这是一头野兽。

关于 Dojo 如何训练神经网络模型,到目前为止我们没有看到 Tesla 给予太多的公开信息,但可以确定的是,网络训练是使用 PyTorch 框架(PyTorch非常成熟,不了解的同学们可以搜索下)完成的。
而 Dojo 所用芯片毫无疑问是一颗 AI 芯片,取代原有的GPU,AI Day 邀请函上面放出的图片,应该就是马斯克所谓的 Dojo 超级计算机的自研芯片。

关于 Dojo 的训练框架,我们参考华为给出的利用晟腾 AI 芯片采用 PyTorch 框架的训练指南。在大规模 AI 训练集群中,采用数据并行的方式完成训练。数据并行即每个设备使用相同的模型、不同的训练样本,每个 device 计算得到的梯度数据需要聚合之后进行参数更新。

Tesla 目前采用了搭建数千块 GPU 的大型训练集群,对服务器来说是一种典型集群组网模式,即由集群管理主节点 + 一组训练服务器(Server)组成训练服务器集群,华为 Server 当前支持的上限是 128 台,每台 Server 上包含 8 块昇腾 AI 处理器,形成了功能强大的 Server 集群,其中集群管理主节点支持集群及集群内设备的管理能力,同时支持整个集群内的分布式作业管理,训练作业经过集群管理主节点下发到训练服务器,由服务器上的作业 Agent 根据 App 指定的设备数量,启动相应个数的训练进程执行训练,一个进程和一个 AI 处理器对应。

对于特斯拉来说,「Dojo 芯片」已经展示出封装工艺上的较大创新,强大算力可窥一斑,采用何种方法使 Dojo 发挥出“野兽”般的威力,我们期待特斯拉能够分享出更多细节。