Py学习  »  机器学习算法

深度剖析特斯拉自动驾驶技术:从模块化深度学习过渡至端到端深度学习的全过程

人工智能AI大模型与汽车自动驾驶 • 1 月前 • 72 次点击  

作者:匡吉

审核:Los

©️【深蓝AI】原创


本文由深蓝学院所属公众号【深蓝AI】原创,全为作者倾注个人心血而成,请各位转载务必注明文章出处为【深蓝AI】,否则侵权必究!



2023年6月5号,特斯拉CEO经理马斯克在推特上放出一段全自动驾驶(FSD)V12的使用视频,一经放出,顿时在业界掀起巨大波澜。FSD V12代表了特斯拉自动驾驶技术的重大飞跃。马斯克将其描述为“端到端人工智能”,采用“视觉输入、控制输出”的方法,就像人类大脑一样。这个比喻强调了特斯拉在其汽车上复制人类决策能力的巨大实力。此外,FSD V12的推出标志着特斯拉在人工智能和自动驾驶领域的一个关键节点。



本文我们将以“庖丁解牛”的方式,分解剖析特斯拉自动驾驶系统如何从以前的架构,迁移到一个完全端到端的视觉自动驾驶系统架构。主要包含以下3点:



特斯拉 2021:引入HydraNets自动驾驶网络;


特斯拉 2022:添加一个占据网络(Occupancy network);


特斯拉 2023:过渡到端到端深度学习。



在了解上述三点的过程中将会发现,其实在很早以前,特斯拉就为端到端的架构做了很久的准备。©️【深蓝AI】原创





起初,特斯拉的自动驾驶系统主要依赖于Mobileye的系统,因为Mobileye具备较为突出的感知模块。很快,特斯拉又对已有自动驾驶系统进行革新重制,从光栅化图像到鸟瞰视图(BEV)网络,并在某个阶段,引入了名为 HydraNet 的多任务学习算法。2021,HydraNet用于视觉任务,神经网络增强的蒙特卡洛算法实施规划任务。

HydraNet的主要目标:给单个网络配备多模态的任务头。所以,特斯拉的自动驾驶网络架构不是堆叠20多种不同任务的网络,而是仅仅采用一种,避免了重复编码的冗余操作。

图1|HydraNet网络框架 ©️【深蓝AI】原创


HydraNet模型显然已成为特斯拉自动驾驶系统架构中的关键一环,因为其允许自动驾驶系统使用单一的神经网络来实施不同的任务。


但需要注意的是,这只是由多个模块组成的更大模块化架构中的一个组件(感知组件)。特斯拉自动驾驶系统中提到了 2 个主要模块:



感知:使用HydraNet检测目标和环境;


规划和控制:用来规划路径并行驶。


■1.1 感知



以图1为例,其中8张图像,同时输入到一个共享的基干,进行特征提取并实施特征融合。然后,将得到的共享特征,输入到后续的“任务头”。这一网络架构的优势是,我们可以针对特殊的用例微调整个神经网络,例如:目标检测微调整个模型,但是并不会对其他任务(比如车道线检测)带来干扰。



图2|特斯拉基于视觉实现360度感知 ©️【深蓝AI】原创



2021年,特斯拉已经开始全部all in纯视觉,整个特斯拉视觉组一共有20多人,共同基于8相机的配置,提供车辆360度的环境检测,唯一不同于视觉的技术是,超声波技术在车辆停泊阶段被采用。



图3|特斯拉的8相机视图 ©️【深蓝AI】原创




■1.2 规划和控制



特斯拉自动驾驶,如何实现针对目的地的路径规划?


在2021年的AI开发者大会上,特斯拉介绍了3种不同类型的规划系统,并且分别给出了针对自动停泊任务的细节。


(1)传统的A*算法


毋庸置疑,A*算法早已被机器工程师们熟知,因为在传统的路径规划中,它一直被视为关键的路径搜索算法。传统算法样例表明,经过近400000次的“扩展”,A*算法终于找到了正确的路径。



图4|A*算法实例 ©️【深蓝AI】原创






图5|神经网络增强的蒙特卡洛搜索树算法 ©️【深蓝AI】原创






2022 年,特斯拉推出了一种名为 "占据网络 "的新算法。得益于 "占据网络",他们不仅提高了感知能力,还大大改进了规划能力。


具体而言,特斯拉是在感知部分中,添加了一个占据网络模块,因此可以将感知部分划分为两个模块:



HydraNet:寻找目标,交通标志符,到路线等等......


占据网络:在3D场景中寻找占用体素。


■2.1 占据网络



简而言之,占据网络的主要功能是将图像空间转为体素空间,并且给每个空间单位分配一个“占据/未占据”的标识。


得益于占据网络增强了感知模块的性能,感知模块能够找到更多的相关特征。对于特斯拉整个自动驾驶工作栈,带来了巨大的性能提升,因为占据网络在源头提供了更为深入的场景环境理解,尤其是在3D的空间中。



图6|占据网络架构 ©️【深蓝AI】原创



上述的占据网络可以预测「占据体积」和「占据流量」这两个重要部分,帮助我们了解3D空间中哪些是空闲的,哪些是被占用的。但这并不是唯一的用途,为了更好地理解 3D 技术,还需要使用 HydraNet 对物体和车道进行检测。



■2.2 HydraNet 2.0



HydraNet 与去年相比并无太大不同,只是多了一个“头”,但这并不是一个真正的头,而是一个完整的神经网络,执行车道线检测任务。整体架构如下:



图7|HydraNet 2.0(红色部分为 "头")©️【深蓝AI】原创



现在,上述架构的一部分(绿色部分)实际上是另一个神经网络,堆叠在这里以查找车道线:



图8|道路线检测头细节 ©️【深蓝AI】原创



本文不深入探究 “低层次”的技术细节,所以我们不会深入探讨特斯拉是如何从自然语言处理中获取并使用语义等来确定车道的,都是 HydraNet 来实现的,右边部分只是车道线检测的附加部分。



■2.3 新的特斯拉规划器



最初的神经网络规划非常出色,但现在我们可以使用3D的占据率。因此,新的规划模块将占据率和车道整合到蒙特卡洛树搜索和神经网络组成的架构中。为了形象的理解搜索树算法的逻辑,我们给出2022年AI开发者大会上,特斯拉的用例:



图9|新的规划器 ©️【深蓝AI】原创



在该例中我们要求车辆必须做到:



礼让非法横穿马路的行人


避让右侧驶来的车辆



基于此建立了一个树形结构,在这个结构中,它将生成和评估这些选择:



图10|蒙特卡洛树结构 ©️【深蓝AI】原创



该结构流程从上到下具体为:



第 1 步: 我们从视觉测量(车道、物体和占据率)开始;


第 2-3 步: 然后生成候选目标和轨迹;


第 4 步: 我们评估第一个选择:行人让行与断言;


第 5 步:评估第二个选择: 右车让行与断言。



我们如何评估这些选择?我们为此制定了人工规则和标准。在我们生成轨迹后,每条轨迹都会有一个成本函数,它取决于 4 个因素:碰撞概率、舒适度、干预可能性和与人类的相似度。



图11|特斯拉具体轨迹得分 ©️【深蓝AI】原创



因此,如果你生成了 20 条轨迹,每条轨迹都有一个成本函数,你最终会选择成本最低的函数。同样,这一切都是“手动”完成的。据了解,特斯拉没有使用机器学习模型或深度神经网络,也没有训练数据--只是编写规则和算法。


2022年的特斯拉完全自动驾驶系统,在引入占据(Occupancy)网络之后,已经有了较大的性能提升,主要依赖于两个关键组件:


通过占用网络和车道检测增强了感知功能;


重写了规划器,以使用占用率网络输出结果。



因此,你可以看到输入数据(8 幅图像)如何从感知流向规划,再流向输出:



图12|2022年特斯拉的自动驾驶系统 ©️【深蓝AI】原创






端到端深度学习意味着什么?它需要对架构做出哪些“改变”?


如果我们用谷歌搜索“端到端学习的定义”,得到的结果是这样的:“端对端学习是指通过对整个系统进行基于梯度的学习来训练一个可能很复杂的学习系统。端到端学习系统经过专门设计,所有模块都是可微分的”。


简而言之,特斯拉有两件事要做:



每个模块都使用深度神经网络;


将这些神经网络组装在一起的端到端模型。



目前,特斯拉的自动驾驶系统架构中部分模块已经被深度学习模块所替代,但仍不是一个端到端训练模式的自动驾驶系统,相比而言,主要差异如下:



感知模块使用深度学习 ----满足条件;


规划模块使用深度学习模型+传统树形搜索的组合----不满足条件。



这就是他们需要将「规划」部分转变为「深度学习」部分。他们必须去掉轨迹评分、手动规则、“如果你在停车标志前,请等待 3 秒”的代码,以及“如果你看到红灯,请减速并停车”的代码:



图13|全深度学习的规划模块 ©️【深蓝AI】原创



然而,这还不够,因为即使我们有 2 个深度学习模块(目标识别A模块和轨迹预测B模块),但仍然需要端到端的训练流程。在非端到端的深度学习系统中:



在数据集上独立训练 A 模块,来识别物体;


然后,使用目标识别模块 A 的输出特征对轨迹预测模块 B 进行独立训练,来预测目标轨迹。



其中关键点在于,训练过程中,A 模块对 B 模块的目标轨迹一无所知,而 B 模块也不知道 A 模块所要识别的目标。他们是两个独立的个体,各自接受训练,他们各自的训练损失函数并没有得到共同优化,也就不是从头到尾的端到端训练流程。


现在,我们来考虑一个端到端训练流程,其中包含上述场景相同的目标识别模块 A 和轨迹预测模块 B:



用一个单一的目标函数,既要考虑识别图像中的物体(A 模块的任务),又要考虑预测轨迹(B 模块的任务);


需要同时训练 A 模块和 B 模块,以最小化这种联合损失函数。


其中要点为,信息(以及反向传播过程中的梯度)从最终输出一直流回初始输入。模块 A 的学习直接受模块 B 完成任务情况的影响,反之亦然。它们是为了一个统一的目标而共同优化的。




图14|从全深度学习过渡到端到端 ©️【深蓝AI】原创



因此,主要区别不在于模块本身,而在于如何对其进行训练和优化。在端到端系统中,模块被联合优化,以实现单一的总体目标。而在非端到端系统中,每个模块都是单独优化的,不考虑更大的系统目标。







目前为止,特斯拉采用的是模块化自动驾驶方法,其中有两个主要模块可以相互通信: 感知与规划。2021 年,他们推出了 HydraNet,这是一种多任务学习架构,能够同时解决多项感知任务。他们还宣布其规划系统是蒙特卡洛树搜索和神经网络的组合。2022 年,他们又增加了一个「占据网络」,有助于更好地理解3D空间。

HydraNet 还扩展了车道线检测功能。要从目前的系统过渡到端到端系统,他们需要将 Planner 转变为深度学习系统,并且使用联合损失函数对其进行训练。该系统看起来像一个黑盒子,但实际上是现有模块的组装,也就是说他们不会丢弃已经构建的所有模块,只是将它们粘合在一起。©️【深蓝AI】原创



引用参考:


[1] https://twitter.com/i/broadcasts/1djxXlVLaLOxZ

[2] https://www.thinkautonomous.ai/blog/occupancy-networks/

[3] https://www.thinkautonomous.ai/blog/how-tesla-autopilot-works/

[4] https://www.youtube.com/watch?v=j0z4FweCy4M&t=4897s

[5] https://www.youtube.com/watch?v=j0z4FweCy4M&t=4897s


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172626
 
72 次点击