深度理解特斯拉自动驾驶解决方案 1:HydraNet
从理论到现实,分析特斯拉全自动驾驶的演变。在2021年特斯拉举办的AI Day中,首次全面详细地介绍了AI & autopilot。作为一名人工智能从业者,特别是如果你专注于自动驾驶领域,你应该学习特斯拉AI Day的第一部分。活动结束几周后,我仔细的回顾了视频,搜索、下载、阅读了视频中涉及到的所有论文,做了大量的笔记。渐渐地,我勾勒出了特斯拉FSD的架构。接下来,我将尝试从软件工程师的角
从理论到现实,分析特斯拉全自动驾驶的演变。
在2021年特斯拉举办的AI Day中,首次全面详细地介绍了AI & autopilot。
作为一名人工智能从业者,特别是如果你专注于自动驾驶领域,你应该学习特斯拉AI Day的第一部分。
活动结束几周后,我仔细的回顾了视频,搜索、下载、阅读了视频中涉及到的所有论文,做了大量的笔记。渐渐地,我勾勒出了特斯拉FSD的架构。
接下来,我将尝试从软件工程师的角度来探讨特斯拉是如何实现人工智能和自动驾驶功能的。
在开始之前,请和我一起思考一个问题。如果你作为特斯拉AI的高级总监,带领AI团队,你将如何实现自动驾驶?
相机、激光雷达、机器学习、神经网络、地图、高清地图、论文、标签、训练、测试、数据集、规划、安全、芯片、cpu、gpu、海量数据训练、人工智能伦理……所有这些东西突然涌进我的大脑。结论是,这对我来说是一个不可能完成的任务。
让我们来看看特斯拉的解决方案。
- 我们如何让汽车自动驾驶?
- 我们如何生成训练数据?
- 我们如何在汽车上运行它?
- 我们如何快速迭代?
在 AI Day 上, Tesla AI 的高级总监Andrej Karpathy和他的同事Milan Kovac的Ashok Elluswamy向我们展示了他们围绕这四个问题的解决方案。
我们如何让汽车自动驾驶?
基本能力:视觉
先看下面的动图,这是当前版本中特斯拉视觉的最终效果。车辆周围的 8 个摄像头(左)通过神经网络生成 3 维“向量空间”(右),代表您驾驶所需的一切,如线条、边缘、路缘、交通标志、红绿灯、汽车;汽车的位置、方向、深度、速度。
最初的设计灵感来自对人类或动物视觉的研究。
上图中的三个小图像显示了人类和灵长类动物(猕猴,右图)大脑皮层是如何处理视觉信息的。信息到达视网膜后,经过大脑皮层的多个区域、流、层,最终形成生物视觉。这些区域和器官包括:视交叉、外侧膝状体核(LGN)、初级视觉皮层(V1)、纹外皮层(V2、V3、V4……)、颞下区等。
特斯拉要做的是建立一个像人脑一样的基于视觉的计算机神经网络系统。通过软件、硬件和算法设计汽车的视觉皮层。
Tesla Vision 的输入来自其眼睛提供的原始格式(数字底片)视频数据——8 个摄像头(1280x960 12-Bit(HDR)@36Hz)。您可能已经发现,除了摄像头之外,没有其他传感器,例如激光雷达或毫米波雷达。稍后安德烈将解释并证明为什么特斯拉决定只使用 8 个摄像头。
目标检测任务的一些术语:
Backbone:指特征提取网络,用于识别单个图像中的多个对象,并提供对象的丰富特征信息。我们经常使用 AlexNet、ResNet、VGGNet 作为骨干网络。
Detection Head(head):在特征提取(骨干)之后,它为我们提供了输入的特征图表示。对于一些实际的任务,比如检测对象、分割等。我们通常在特征图上应用一个“检测头”,所以它就像一个头附着在主干上。
Neck:Neck位于主干和头部之间,用于提取一些更精细的特征。(例如特征金字塔网络(FPN),BiFPN)
目标检测有一个通用的结构:Input → backbone → neck → head → Output
。
在特斯拉神经网络架构中:
- backbone: RegNet + ResNet
- neck: BiFPN
- head: HydraNet
接下来,我会尝试解释一下为什么特斯拉 AI 会选择这样的架构。
神经网络主干
最初,在目标检测任务中,我们使用了一些手动设计的网络,例如 AlexNet[13]、VGG[26]、ResNet[8]、DenseNet[11]……作为主干。后来,随着数据规模和网络深度的增加,研究人员开始考虑使用半自动化网络设计和自动化网络设计来代替人工网络设计。现阶段著名的范例是AutoML和NAS(神经架构搜索)。
尽管 AutoML 和 NAS 有效,但它们也有局限性:1) 资源消耗高,2) 灵活性差,3) 泛化性差,4) 设计结果难以理解。
Tesla 使用以残差神经网络块设计的 Regnet(正则网络结构)作为其神经网络主干。
RegNet 是 2020 年 Facebook 人工智能研究 (FAIR) 论文Designing Network Design Spaces中提出的一种新的网络设计范式。
本文没有专注于设计单个网络实例(如 NAS),而是设计了参数化网络群体的网络设计空间,这意味着假设标准模型系列包括 VGG、ResNet 探索网络结构(例如,宽度、深度、组等) , 和 ResNeXt。最后,它将获得一个由简单的“常规”网络组成的低维设计空间——RegNet。
Andrej 还给出了 Tesla AI 使用 RegNet 的原因:
- 一个非常好的设计空间。
- 权衡延迟和准确性。
RegNet
简单来说,论文首先设计了一个初始的、无约束的设计空间AnyNet,然后使用标准的残差瓶颈块形成AnyNetX。
上图(图 4 右上)是 AnyNet 的一般网络结构。网络分为三个部分:
Stem:使用卷积(kernel_size =3,stride =2,w0 = 32 个输出通道)来处理图像,分辨率降低了一半。
Body:执行大部分计算。网络主体由一系列阶段组成,这些阶段以逐渐降低的分辨率运行ri。每个阶段由一系列相同的块组成。
Head:预测n输出类。
Stage: 所有产生相同大小的输出图的卷积层都在同一个网络阶段。不同阶段的特征图用于形成特征金字塔网络。(在文章后面解释)
上图(图 4 中的右下角)显示了两种类型的 X 块。X 块基于具有组卷积的标准残差瓶颈(参见论文Aggregated Residual Transformations for Deep Neural Networks)。每个 X 块由 a 1x1 conv、 a3x3 group conv和 final组成1x1 conv,其中1x1 conv改变通道宽度。(b) 步幅二(s=2) 版本。
设计空间的设计过程主要以构建网络的主体为基础。AnyNetX 设计空间有 16 个自由度,因为每个网络由 4 个阶段组成,每个阶段有 4 个参数:块数di、块宽度wi、瓶颈比bi和组gi。
根据论文中定义的分析方法EDF( Theerrorexperiencedistribution function ),经过一步一步的简化,AnyNetX最终演化为一个6自由度的设计空间——Regnet。6个参数:(d网络深度)、w0(初始宽度/输出通道)、斜率wa、wm(宽度乘数)、b(瓶颈比)和g(组卷积宽度)。
经过神经网络主干处理后,RegNet给出了不同尺度、不同分辨率的多个特征。在这个特征提取网络中,在最底部,我们有非常高的分辨率和非常低的通道数,而在顶部有高通道数的低分辨率。所以底部的神经元用于检查图像的细节,顶部的神经元用于理解场景上下文(语义)信息。这些不同尺度和分辨率的特征将进入下一个处理——特征金字塔网络。
特征金字塔网络(颈部)
早期的物体检测算法通常直接将检测头连接在主干最后阶段最后一层的特征图上。在目标检测任务中,浅层网络(网络底部)具有较高的分辨率,有助于图像细节的学习;深度网络(网络的顶部),分辨率低,有利于语义学习。在实践中,我们发现很难在单个特征图上同时有效地识别不同尺度的对象。
因此,不同阶段的特征图形成特征金字塔网络来表征不同尺度的对象,然后基于特征金字塔进行对象检测。
FPN的演变:模型(a)是传统的特征图像金字塔,它是使用图像金字塔来构建特征金字塔。在每个图像尺度上独立计算特征。它非常慢。模型 (b) 在单个特征图中使用深度卷积网络 (ConvNets)。这种方法代表了更高层次的语义。模型 © 是 Single Shot Detector (SSD) 算法,它将重用来自不同层的多尺度特征图进行预测。但它在低层次上的语义很弱。模型 (d) 是一种架构,它通过自上而下的路径和横向连接将低分辨率、语义强的特征与高分辨率、语义弱的特征相结合。该架构从 SSD 的检测策略和ResNet中的“快捷连接”中学习。
详情请参考Facebook AI Research (FAIR)的论文: Feature Pyramid Networks for Object Detection(FPN )
回到特斯拉AI日,如何识别上图中的低分辨率汽车?他们使用 BiFPN 来实现多尺度特征金字塔融合。
BiFPN 是Google Research, Brain Team 在 2019 年 (v1)的论文EfficientDet: Scalable and Efficient Object Detection(BiFPN)中提出的加权双向特征金字塔网络。
BiFPN 是 FPN 的增强版本。主要有两个改进:
- 在自顶向下的特征融合之后,再从下向上进行融合。
- 在融合特征时,BiFPN发现由于不同的输入特征具有不同的分辨率,它们对输出特征的贡献往往不相等。所以他们为每个输入添加一个额外的权重。
在这篇论文中将BiFPN与EfficientDet结合使用。特斯拉AI用Regnet取代了EfficientDet作为骨干。
Detection Head
在完成BiFPN层后,连接网络的检测头部分。该检测头由若干特定任务的头组成。
如图11所示,当你想要检测一辆汽车时,特斯拉AI团队会使用一个一级类似yolo的物体检测器作为头部。
这个YOLO不是r/wallstreetbets活动中的“you only live once”,它是2021年初几天内著名的股市做空事件。
YOLO指的是“你只看一次”,这是一种新的对象检测方法,出自《You Only Look Once: Unified, Real-Time Object Detection》这篇论文。
在这个算法中,您只需看一次图像就可以预测出现了什么对象(分类任务)以及它们的位置(回归边界框+置信度)。
回到特斯拉AI日,他们初始化一个光栅,每个位置有一个二进制位,告诉你那里是否有一辆车。此外,如果有,这里还有一些其他属性比如(x, y)坐标,边界框的宽度和高度,这是什么类型的车。
在图13中,cls表示分类,reg表示回归边界框+置信度,640x480为输出分辨率,640x480x4中的4包括(x, y)坐标、边界框的宽度和高度,共4个输出。
HydraNets
在特斯拉的FSD任务中,不仅仅是检测汽车的任务,还有大量的任务要做。如交通灯识别与检测、车道预测等。
它们将这些任务聚合在一个新的架构布局中,其中有一个共同共享的主干,并将分支分成若干个头部。这种架构被称为HydraNets。
这个HydraNet与漫威的hydra组织没有任何关系。开个玩笑,原谅我是漫威迷。九头蛇是希腊和罗马神话中的蛇形水怪。根据传说,它有九个或更多的头像。这只意味着网络中存在多个检测头。
HydraNets有三个主要好处:
- 特征共享:减少了重复的卷积计算,减少了主干的数量,特别是在测试时效率更高;
- 解耦任务:将特定的任务从主干中解耦,能够单独调优任务;
- Representation Bottleneck:缓存特性在训练过程中,当他们做微调工作流程时,只使用缓存特性对头部进行微调。
HydraNet的训练流程:
- 进行端到端联合训练;
- 在多尺度特征级缓存特征;
- 使用缓存的特性对每个特定任务进行微调
- 端到端训练,反复进行。
下图是几年前在HydraNet的一个版本中通过处理单个图像获得的一些预测。
上面我们已经探讨了特斯拉AI的神经网络- HydreNet在单目目标检测方面的应用。
我们知道单摄像机模型只能完成更简单的辅助驾驶任务,如车道保持。更复杂的自动驾驶任务需要使用多个摄像头作为感知系统的输入。
特斯拉如何解决这个问题?我将在下一篇文章中继续探讨这个问题。
特斯拉AI日的感受
如果你正确地完成了所有的工程,即使是不可能的任务也可以轻松地解决。
感谢阅读,下一篇文章见。
为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。
更多推荐
所有评论(0)