Tesla-FSD(完全自动驾驶)技术解析|麦岩技术沙龙

  原标题:Tesla-FSD(完全自动驾驶)技术解析|麦岩技术沙龙

  麦岩技术沙龙旨在深度分析和讨论最前沿的AI和机器人相关的技术、论文、最新实践等内容。

  我们通过一个问题引入正题:

  “自动驾驶就算落地,最多取代司机而已,又能有多大实用价值呢,为啥花那么多钱发展呢?”

  麦岩智能认为:

  1)自动驾驶技术可以极大提高人的幸福生活指数,比如更加安全,不会存在疲劳驾驶;

  2)智能化程度越高的产品,对于客户的粘性越强;

  3)电动车是自动驾驶的天然平台。与传统车相比,机械属性降低,计算机电控精确度高,可控制范围更大;

  4)自动驾驶技术泛用性极高,但与通用人形机器人相比较为简单,作为切入点可快速见到商业成果,核心技术可以在制造业和其他产业广泛推广;

  5)当自动驾驶达到一定比例后,可以提高整个城市交通系统的效率;

  6)有助于降低碳排放(交通效率高,无意义的资源浪费相对减少),符合世界发展的趋势;

  今天就来看一下自动驾驶技术包含哪些技术内容,以及该技术对我们产品的启发。

  目录

  一、FSD基础网络架构

  1.1 Tesla如何设计自动驾驶软件

  1.2 HydraNet

  1.3 Transformer简介

  1.4 Tesla视觉技术栈

  二、FSD在2022年的新进展

  2.1 感知 | Occupancy Network

  2.2路径规划 | Interaction Planning

  2.3 模拟 | Simulation

  一、FSD基础网络架构

  FSD全称(Full Self-Driving), 是Tesla的全自动驾驶解决方案。该方案是基于人工智能的数据,软件,硬件结合的架构。在介绍FSD的相关技术之前,有必要先对FSD的整体架构有一定的了解。

  基于人工智能的自动驾驶,涉及到下列相关内容:相机、激光雷达、机器学习、神经网络、地图、高清地图、论文、标签、训练、测试、数据集、规划、安全、芯片、cpu、gpu、海量数据训练、人工智能伦理等。将这么多技术组织在一起,并让他们和谐工作非常考验架构设计和工程能力。

  1.1 Tesla如何设计自动驾驶软件

  基本假设:基于视觉可以完成自动驾驶功能

  下图展示了FSD视觉的效果。车辆周围的8个摄像头通过神经网络生成三维向量空间。向量空间中包含了自动驾驶所需要的信息,如线条、边缘、路缘、交通标志、红绿灯、汽车;汽车的位置、方向、深度、速度。

  最初的设计灵感来自对人类或动物视觉的研究。

  图中的三个小图像显示了人类和灵长类动物(猕猴,右图)大脑皮层是如何处理视觉信息的。信息到达视网膜后,经过大脑皮层的多个区域、流、层,最终形成生物视觉。这些区域和器官包括:视交叉、外侧膝状体核(LGN)、初级视觉皮层(V1)、纹外皮层(V2、V3、V4……)、颞下区等。

  Tesla的目标是建立一个像人脑一样的基于视觉的计算机神经网络系统。通过软件、硬件和算法设计汽车的视觉皮层。

  Tesla Vision 的输入来自其原始光子计数(Raw photon counts)提供的视频数据——8个摄像头(1280x960 12-Bit(HDR)@36Hz)。

  传统摄像头的原始数据需要经过ISP处理。

  ISP(Image Signal Processor),即图像信号处理器,是车载摄像头的重要构成组件,主要作用是对前端图像传感器CMOS输出的信号进行运算处理,把原始数据“翻译”成人眼可以看懂的图像。

  但是ISP的设计初衷是为了在多变的外部环境下获得一张“好看”的图片,但这究竟是不是自动驾驶最需要的图片形式,业界尚无定论。按马斯克的说法,神经网络不需要漂亮的图片,它需要的是传感器直接获取的原始数据、是原始光子计数(Raw photon counts)。

  该传感器在低光照可见度低的条件下能够提供超越人眼的感知能力。

  Tesla Vision的一个重要工作是对周围环境进行感知,而感知的重要工作是目标检测。

  目标检测的通用结构为:Input -> backbone -> neck -> head -> output, 如下图所示:

  在Tesla的神经网络架构中:

  Backbone: RegNet+ResNet

  Neck: BiFPN

  (Tips:上面的网络都是目前SOTA(行业当前最佳)的网络。以后有更好的网络可以直接更换)

  Head: HydarNet( Tesla 的软件架构)

  1.2 HydraNet

  自动驾驶任务不仅仅需要进行周围车辆的检测,还有很多其他任务。包括交通灯的识别与检测,限速标志的识别与检测,车道线预测,判断物体是否移动等等。

  这些任务的特点都是基于相同的视频输入,进行若干工作(检测,判别)。Tesla将这些任务聚合在一个新的架构布局中,有一个共享的Backbone(骨干),并将分支分成若干个头部(Head)。这种架构被称为HydraNets。(符合人类视觉的流程)

  整体的软件流程:

  1)8个摄像头的单帧数据经过image extractors进行特征提取。这里采用类似ResNets的网络。

  2)接着是一个多摄像头融合。此处的想法是将8个摄像头的特征图进行融合组成,生成BEV , 方法是通过类似Transformer, 此步骤的目的是通过2D的图像生成3D的结构。这个操作类似于人类开车时通过后视镜判断后车距离。(2021年及以前)

  multi-cam, multi-scale features -> Transformer -> BEV

  3)然后接着是一个时间融合。就是将给上一步的每个图赋予时间信息。融合方式采用3d conv/ Transformer/RNN 。这么做是因为单帧结果对于自动驾驶没有任何意义,很多状态在单帧下都无法识别,比如:速度,目标的遮挡与重现。

  4)将上一步的结果分发到不同的Heads中,每个Heads负责特定的功能,后面接着自己的单独网络。

  1.3 Transformer简介

  Transformer是近年来最受关注的深度学习模型。它在谷歌论文《Attention Is All You Need》中首次被提到,主要用于自然语言处理(NLP)领域。

  Transformer的核心是注意力机制。BERT、GPT和其他模型都基于Transformer。这些以注意机制为核心的模型广泛应用于自然语言处理、CV、人工智能等任务中。

  上图是Transformer的基本结构,包含一个编码器(Encoder)和解码器(Decoder)。每个编码器层主要包括多头注意层和前馈层;每个解码器层包含两个多头注意层和一个前馈层。

  在Tesla中,图像空间(multicam features) 到向量空间 (BEV vector space)可以类比成一种语言到另一种语言的翻译,因为他们都是对同一个空间的不同描述。如下图所示,由于Transformer在自然语言翻译方面有如此优异的性能,所以Tesla训练了一个Image-to-BEV Transformer网络。

  1.4 Tesla视觉技术栈

  从上图的特斯拉技术栈来看,特斯拉使用的模型是一些处理对象检测领域的常用模型,如RNN、LSTM、Transformer、ResNet、RegNet、BiFPN、YOLO等,但特斯拉AI Team对这些模型有更深入的了解,因此才能够成功的融合如此多的模型并深入挖掘模型潜力。

  二、FSD在2022年的新进展

  2.1 感知|Occupancy Network

  Occupancy Network 是 HydraNets的重要改进,该网络主要用于可活动空间的探测。

  2.1.1 为什么需要Occupancy Network?

  Tesla采用基于纯视觉的自动驾驶系统有一个核心缺陷,就是其目标检测系统失效。(这一点也和人类不一样,人类只用判断前面是否有障碍物即可,不需要知道障碍物是啥)

  (Tips:如果摄像头拍摄到的东西从来没有出现在数据集的话,则大概率不会被目标检测系统检测到。直观的表现就是车不会进行避障等操作。)

  在2022年的CVPR(Computer Vision and Pattern Recognition, AI行业顶会)会议上, Ashok Elluswamy,Tesla Autopilot 负责人对Occupancy Network做了一个专题报告。

  上图是自动驾驶中的“可通行空间”问题,该问题是要识别哪里可以走,哪里不可以走,是路径规划的前提。上面的黄色框标识出了常见的难点:

  1)像素的分布密度机及其不均衡,在图像远端地平线处,往往2~3个像素就一大片区域的深度。

  2)图像是2D的,世界是3D的。

  3)对于识别的目标标记过于粗糙,目标识别用矩形框标记, 而实际中的物体都是大部分都是不规则的。目前的标记方式会导致细节损失。

  4)没办法看透遮挡。当前方有车的时候,会认为前方车辆的前方也是不可行区域。

  5)存在不在数据集的东西导致不会进行识别。

  为了解决上述问题,引入Occupancy Networks。该算法受到机器人领域中 occupancy grid mapping启发,将3D空间分为大小一致的grid cell, 然后判断每个cell是否被占用。

  核心思想是得到空间是否被占用的信息。所以它是3D的,不需要进行目标识别,而且是多视角。

  上图可以看到并没有得到精确的物体尺寸,但是可以得到结果较好的近似。同时可以进行动态和静态的预测。最后该算法的效率很高,10ms 就可以对周围更新一次,因此内存的占用率很低。

  此网络对之前三个算法进行了优化:

  BEV、固定尺度的矩形框、目标检测

  1)对BEV的优化:

  完成了2D到3D的转化

  2)固定尺度的矩形框

  固定尺度的识别矩形会导致如下问题:

  a.悬空的物体如果被框住,会导致其下方变成不可通行区域。

  b.突出的物体如果没有被框住,会导致碰撞。

  Occupancy Networks 将空间分为非常小的立方体,判断每个立方体是否被占用。这样可以生成较为精确的空间占用情况。

  3)解决了目标检测的长尾问题

  目标检测总会存在某些物体不存在于训练集中。Occupancy Networks 不进行目标检测,从根本上避免了这个问题。

  2.1.2 Occupancy Network 网络架构

  上图为一个简化版的Occupancy Network 架构,出自 Ashok Elluswamy在CVPR2022上的专题汇报

  整个算法流程如下:

  1)Image Input:

  8个摄像头依据摄像头标定矫正后直接输入给算法。摄像头的焦段都不相同,相对位置也不是严格的刚体,所以需要修正到同一个焦段,并消除畸变和震动。

  2)Image Featurizers:

  将图像送入由RegNets 和 BiFPNs组成的Backbone,用于提取特征。

  3)Spatial Attention:

  是卷积神经网络中用于空间注意力的模块(类似Transformer),利用特征的空间关系生成空间注意力图,也就是构建空间特征。

  4)Temporal Alignment:

  利用里程计信息,对前面时刻的占用特征(Occupancy Features)进行时序上的拼接,初步形成了时空特征。有了时空信息就可以用来计算类似速度,加速度等信息,这些是空间对时间的导数。

  5)Deconvolutions:

  组合后的Occupancy Features会进入Deconvolutions(反卷积)的模块来提高分辨率。这是因为Occupancy Features 是稠密的,因为区域内的点非常多,每个点都有意义,会导致内存不够用。解决方法是降低Occupancy Features的分辨率。

  (Tips:稠密的意思:一个矩阵中若数值为非0的元素数目远远多于0元素的数目时,则称该矩阵为稠密矩阵。与之相反,若0元素数目占大多数时,则称该矩阵为稀疏矩阵。高维矩阵的元素个数会非常多, d1*d2*d3*d4*...*dn)

  6)Surface Outputs:

  输出物体表面的几何特征,输出物体表面语义信息,用于其他任务,比如交通标志识别。

  7)Volume Outputs:

  输出空间占用信息、空间占用流信息(速度,加速度)、亚体素(sub-voxel)信息、3D语义信息。

  a.空间占用信息

  b.空间占用流信息(速度,加速度) 和 NeRF网络结合,用于验证结果是否准确。

  c.亚体素(sub-voxel)信息

  d.3D语义信息 和 MLP (网络的一种)生成两个查询函数,输入体素(voxel) 的 x,y,z 坐标,即可查询其 空间占用信息,空间占用流信息,语义信息等。该方法打破了模型分辨率的限制。

  2.1.3 NeRF

  Neural Radiance Fields(神经辐射场)简称NeRF主要用于3D重建,于Occupancy Networks 功能相似,都是通过不同视角的image进行环境的重构。

  NeRF主要使用在两个方面:

  1)训练阶段:将NeRF的重构结果作为真值,用于Occupancy Networks的约束。

  2)运行阶段:Tesla将一个精简版的NeRF运行在车端,用于确保Occupancy Networks输出的占用值符合传感器观测的结果(NeRF的输出值)

  2.1.4 Occupancy Network应用

  Occupancy Network 产生了可以用来查询空间中任意体素Voxel的占用概率和语义信息的方法,然后能用来干什么呢?最直接的一个应用就是用来避免碰撞。

  一个自动驾驶车要真的有用,需要满足三个基本条件:

  安全、舒适、合理范围内尽可能地快

  只要开的足够慢,安全很容易达到。如果想要同时满足上述三点,需要有一个重要的能力就是要根据当前道路条件和自身状态“预判”未来几秒内碰撞的可能性。在预判的基础上驾驶员才能完成避障,超车,适当制动力减速等任务。

  为了完成避障任务,基于Occupancy Network 和隐式场( Implicit Filed) 建立了一个 隐式网络(Implicit Networks),其如下图所示:

  其方法就是把之前的占用值压缩成一个MLP,这个MLP的作用是查询特定状态下避免碰撞的概率。相当于回答类似 “ 2秒内碰撞可以避免的概率”。输入的状态是“当前位置,方向,速度,纵向和横向加速度等等”。

  因为查询速度很快,几微秒,所以就可以根据车的当前状态遍历非常多的可能,进行碰撞检测。

  2.1.5 Occupancy Network 训练

  Occupancy Network是一种监督网络,即需要大量标注好的数据进行训练。Tesla的Occupancy Network所需要的训练量极大,具体如下:

  一共14亿帧图像,用了10万GPU时(等效于10万个GPU运行1小时)。温度90度。这个是为了给后面的自研芯片和超级计算机做铺垫。

  不得不承认的是,Occupancy Network技术目前对于激光为主的三维高精地图方案来说,是一个非常大的挑战;对于空间中某一个体素是否被障碍所占用,Occupancy Network方案给出了不逊色,甚至优于高精地图方案的表现,但是摄像头的成本却是远远小于多线激光雷达的。Occupancy Network是个软件方案,后期可以使用订阅软件的方式收费,升级非常的便捷,相对于硬件的替换优势巨大;

  对于类似我们产品的,成本控制更加严格的机器人来讲,类似Occupancy Network的方式显然是更加“终极”的解法,在机器人上视觉传感器的成本很低,相对于单线激光雷达来讲,所包含的信息则极大丰富,单目视觉可以使用很低的成本覆盖机器人周身,获取机身周围的Occupancy Network,作为避障与路径规划的依据,实际上,Occupany Network技术也在人形机器人上进行了演示,获得非常好的演示效果;

  当然挑战也很大,主要是Occupancy Network训练的问题。

  2.2路径规划|Interaction Planning

  规划是自动驾驶的另一个重要模块,特斯拉这次主要强调了在复杂路口对交互(interaction)进行建模。为什么交互建模如此重要呢?

  因为其他车辆、行人的未来行为都有一定的不确定性,一个聪明的规划模块要在线进行对自己和其他车辆,行人等交互的预测,并且对每一种交互带来的风险进行评估,并最终决定采取何种策略。

  特斯拉把他们采用的规划模型叫做交互搜索(Interaction Search),它主要由三个主要步骤组成:树搜索,神经网络轨迹规划和轨迹打分。

  1)生成决策树的初始输入来自于前面车道线,障碍物以及Occupancy Network感知得到的Vector Space, 通过Vector Space规划出后续潜在目标状态,如目标车道线,目标路口,超车等,然后这些目标状态又可以进一步拆分成规划动作(轨迹)集合,最后规划的轨迹还要考虑与周围动态障碍物可能出现的博弈场景。

  这里最重要的是如何生成决策分支的算法,传统算法基于条件约束的优化方法获取最优路径,特斯拉采用递增的方式不断加入新的约束,用较少约束下最优方案作为初值继续求解更加复杂的优化问题,最终得到最优解,Tesla工程师提到这种方法虽然在离线进行了很多预生成,并对在线(车上)做了并行优化,然而每个候选路径1~5ms的计算时间虽然已经很优秀,但对于尽可能遍历城市场景复杂还是不够快,Tesla于是使用了另一套数据驱动的轻量生成网络帮助快速生成规划路径。

  这个数据驱动决策树生成模型使用Tesla车队中人类驾驶员驾驶数据(汽车记录并学习人类驾驶员在特定场景下的操作)和在无时间约束的离线条件下规划的全局最优路径最为真值进行训练,能够在100us内生成一个候选规划路径。

  2)决策树剪枝:有了决策树生成算法,就有了完整的规划问题定义,然而即使使用上述生成方法,要在限制的响应时间内遍历复杂场景决策树也是不可能的。因此一个能够对于候选路径进行快速评估,打分,拒绝掉离谱的候选路径从而对决策树进行剪枝的系统就成了决策规划系统的另一块拼图。特斯拉同样采用了传统方法与数据驱动相结合的办法,采用碰撞检测,舒适度分析,以及根据车队人类驾驶员实际数据和影子模式训练模型来预测一个候选路径导致接管的概率以及候选路径与人类驾驶员开车路径的差异这样四个方法进行候选路径评估完成剪枝。

  最后决策规划部分还结合上面提到的Occupancy Network讲解了Tesla对于未知及不确定性的决策,这里前面感知部分提到的Occupancy Network输出的占据栅格就起到了决定性作用。如下图所示,蓝色区域代表根据Tesla车身传感器可视角度以及3D占据栅格计算得到的可视区域,而针对未知区域则引入了Ghost动态物体,代表在未知区域可能出现的不可见动态交通参与者,需要根据这些假想的参与者做相应的保护性驾驶。

  上述技术目前已经被部署到FSD beta 10.69及之后的版本中,测试视频如下:

  2.3模拟|Simulation

  通过模拟技术,不但可以大幅降低实际实验,采集数据的费用,节省开发时间,还可以建立罕见的场景,比如人和狗同时在高速路上跑步这种几乎不会发生的场景。

  这种类型的数据虽然发生的概率很低,但是有必要让系统在模拟环境学习其应对策略。

  2.3.1 模拟优势

  模拟产生的数据有如下优势:

  1)向量空间描述,即有完美的Occupancy 空间,车道线等。

  2)对于物体有完美的标签。包括动力学数据,分割数据等等。

  3)可以大批量的快速修改标签。

  4)可以快速生成某些难以获得的数据。

  5)模拟系统可以进行闭环验证,包括感知,定位,预测,规划和控制。

  2.3.2 模拟系统的核心技术

  1)需要对传感器进行准确的模拟。

  Tesla的模拟系统不是为了渲染出漂亮的图像,而是要生成一个看起来和真车摄像头生成的尽可能像的的图像。为了达到这一目的,Tesla对相机的很多属性进行了建模,比如:传感器噪声,动态模糊,光学畸变,挡风玻璃的衍射等。更进一步的是,这些工作不仅仅用于FSD软件,还被用来指导真实硬件的设计工作,比如镜头的设计,相机的设计,传感器放置位置,甚至是大灯一些参数。这里就有了一点点数字孪生的感觉。

  2)照片级渲染

  生成的模拟图像要以真实的方式呈现出来,游戏的渲染方式会让线段变成锯齿状。Tesla开发了有效的神经渲染算法(neural rendering)和抗锯齿算法(spital anti-aliasing)。同时也采用了光线追踪(ray tracing)和 全局照明(global illumination)。总之就是为了让渲染出来的图像与真实相差无几。

  3)物品&道路多样性

  这个主要是防止过拟合。虚拟场景中的物体尽可能不一样,比如人有不同的衣服,身高,肤色,发型等等。

  4)可扩展场景生成

  模拟系统的场景是通过程序按照一定条件生成的,比如道路的弯曲度,植物的密度,车辆速度,人员密度等,描述他们的参数均可单独设置。

  同时模拟场景的的组成也不是随机生成,通过分析自动驾驶算法失效的场景的参数,产生与失效场景类似的模拟场景作为学习的起点。

  5)场景重构

  场景重构主要是为了在模拟系统中重建真实世界中自动驾驶失效的场景,让算法在虚拟场景中找到并解决失效的部分。这一部分可与可扩展场景生成联动。

  本次大会中主要介绍了模拟中场景重建的流程:

  a.路面生成:根据路沿进行路面填充,包括路面坡度、材料等细节信息;

  b.车道线生成:将车道线信息在路面上进行绘制;

  c.植物和楼房生成:在路间和路旁随机生成和渲染植物和房屋,生成植物和楼房的目的不仅仅是为了视觉的美观,同时仿真了真实世界中这些物体引起的遮挡效应;

  d.其他道路元素生成:如信号灯,路牌,并且导入车道和连接关系;

  e.加入车辆和行人等动态元素。

  2.3.3 模拟的应用

  说了这么多模拟,对麦岩智能来说到底有什么实际用处:

  先问三个问题:

  1)10000平方米的环境下,需要在二十分钟内清扫一遍,一天清扫4次,需要多少台极光壹号PRO,它们应该放置在哪里?

  2)比如极光壹号PRO进行口罩检查,需要尽快上线。此时再去采集口罩数据然后标注过于耗时,耗钱,怎么办?

  3)假设需要让人形机器人能够上楼梯,或者捡瓶子,如何写这个程序?

  如果没有仿真系统的话:

  1)按照机器参数或者经验估算,但无法保证准确性。

  2)用较小的数据集进行训练模型,无法保证精度。

  3)很难直接编写,很难把走路这种动作用量化的步骤表示出来。这不是一个“先迈左腿还是先迈右腿的问题” 而是一个“ 先把左腿在 t 时刻 以 w 角速度转动多少度的问题”, 同时还要控制左膝盖,右臂” 。 即使写出来了,也很难保证正确,一旦上机试验,发生意外,会威胁工作人员人身安全,带来时间和金钱的损失。

  如果有仿真系统的话:

  这就是之前说的 Sim2Real 概念,先在仿真中模拟。前提是仿真精度高,包括仿真世界中的物理规律,机器人的性能参数和物理结构。

  1)建立一个10000平米的空间,定义好地面材质,并行开很多模拟,每个模拟场景中初始化个数不同,位置不同的机器人看哪个可以符合要求。

  2)对口罩建模,赋予口罩不同材质,外形,佩戴时的弯曲程度,旋转角度,大小等一系列参数。用不同的光照环境进行模拟,直接作为数据集训练。最耗时的步骤是对口罩的建模。

  3)直接在仿真系统中模拟,等模拟到差不多水平了再在真实机器人上试验。

  所以,模拟的实际用处就是:

  1)加速算法开发

  2)预先验证

  3)降低成本

  以下是Sim2Real的实际应用:

  1)腾讯Robotics X实验室利用深度强化学习等AI技术,推进机器人智能研究,让机器人在虚拟环境中自主学习,更好地适应复杂环境的变化。

  2)NVIDIA Isaac Sim称:成功开发、训练和测试用于现实世界应用的复杂机器人需要高保真模拟和准确的物理模型。Isaac Sim基于NVDIA的Omniverse平台构建,将身临其境的、物理上准确的、逼真的环境与复杂的虚拟机器人相结合。详细视频如下:

  责任编辑: