端到端智能驾驶 知识梳理

240721

什么是端到端

端到端(end to end)是来自于深度学习的概念,指一个AI模型只需要输入原始数据,就能输出最终结果,中间不再引入额外的模块做进一步加工。

比如,我们熟悉的ChatGPT就是一个典型的端到端模型,中间只存在一个大语言模型。但这个端到端并不明显地存在障碍,因为输入的是自然语言,输出的还是自然语言。有些任务要做到端到端就困难了。它的难点体现在,输入和输出的复杂化。比如,让人形机器倒一杯水,输入的数据除了指令,还包含环境里各种物体的静态特征,比如位置、颜色、纹理,还有动态特征,比如机器人行走时速度、加速度、角速度、水的量等等。你要把所有内容一股脑塞到一个模型里,输出结果就是那些驱动直流电机、丝杠和减速器运动的参数,实现一个倒水的动作。

没有端到端技术之前,怎么解决智驾问题

为了实现智驾,基本需要3个主要模块:感知,规划,控制。传统的智驾,并不是真正意义的智能,而是通过各种“自动化”来实现。

具体的,各个传统模块介绍如下:

感知模块

感知模块相当于汽车的眼睛,从环境中搜集信息并理解它们都是什么东西。激光雷达、毫米波雷达、摄像头的信息都是输入的。信号进来后,就需要通过一种叫做神经网络的技术来进行识别。你可以把神经网络想象成一个非常复杂的“分类器”,它能够帮助我们识别出各种不同的物体。比如,它能告诉我们图像中的哪些线条是车道线,哪些是汽车,哪个是信号灯,哪个是限速牌。而且,它还能进一步分析出车道线是左转还是右转的,汽车是货车还是摩托车,信号灯现在是红色、绿色还是黄色,以及限速牌上的数字是多少。总之,所有可能影响驾驶的因素,感知模块都会尽可能地识别出来,因为后续模块工作的全部对象都会被局限在这个模块识别的元素范围内。

拿到信号,下一步怎么识别呢?自从2012年开始,神经网络技术得到了广泛应用,使得识别过程变得更加简单。最初主要使用一种叫做卷积神经网络的技术,这种网络特别擅长处理图像信息。但到了2022年之后,一种名为Transformer的模型开始流行。Transformer模型的优势在于,它能够更好地从摄像头、激光雷达、毫米波雷达等不同设备采集的信号中提取特征,并将这些特征融合在一起。因此,现在有些汽车企业已经开始在感知模块中使用Transformer模型,以提高识别的准确性和效率,所以今天也有车企在感知环节使用了Transformer模型。

或者你会感叹,这个也很智能。但传统智驾的智能,也仅限于此。

规划模块

规划模块就是用来设定全局路线和局部路线的。全局就是从A开到B走哪些路时间最短、哪些路程最短、哪些收费最少等等,大家都很熟悉。而更沉重的负担在于局部路线的规划——绕开障碍物,躲避行人,转弯掉头时的角度、速度、加速度等一切马上就会出现的情况,这辆车该如何选择路线和速度。

控制模块

控制模块就是把最终输出的驾驶决策转化为横向和纵向的控制参数,给到方向盘的转向电机,给到刹车和加速踏板,并且时时跟踪车辆路径,确保真实行驶轨迹和规划的轨迹高精度吻合。

控制模块是听命于规划的,规划和控制模块也经常并称“规控模块”。而这个规控模块就谈不上有太高的智能,全都是自动化。

自动化的规控

什么是自动化?就是为了完成某个任务,编写一套规则和每条规则对应的触发条件,然后按if-then的逻辑机械地执行。

最简单的规则比如,看到红灯要停;看到行人横穿要停;看到旁边车道的车打转向灯,要么加速超过,要不减速让行。

但仅仅有这个级别的规则,是完全无法实现自动驾驶的,还要细化。比如,当旁边车道的车打转向灯时,要判断对方车辆离车道线的距离,要判断它横向和纵向的速度,综合这些数值变化,然后设定一个条件,比如说没有到某个值时就加速超车,到了某个值就减速让行。

再复杂一些——那个打转向灯变道的车,相关的感知数值已经达到了要让行的条件,结果那个车又取消变道了,那怎么办?或者有些车打左灯往右拐,这时是让还是超车?

即便是这样复杂的情况,在真正的“自动化驾驶”的规则库里依然是很简单的,复杂的情况下会同时嵌套多种规则和条件。之所以有的时候给人以错觉,感觉它挺智能的,就是因为研发团队把规则的条数堆到足够多,多到了能涵盖所有你遇到的路况。传统自动驾驶的性能谁好谁差呢?看看他们雇佣的程序员的数量就可以了。这其实像是个劳动力密集型产业,别以为程序员多就是多么高智能的行业,其实更像体力活。雇5000名程序员写规则和各种特例的企业,就会比只雇200个程序员的自动驾驶车企要强。

端到端技术到来

端到端技术对规控的实现

既然感知环节神经网络可以做得这么好,规控模块为什么不能也用这种方式学习驾驶呢?这就是从自动化驾驶切换到智能驾驶的逻辑。

而且其中很多公司使用了Transformer模型。很多人知道它是一个处理自然语言的模型,为什么可以用来处理自动驾驶呢?

因为文字在进入模型前需要向量化,而其他类型的信号也一样可以转变为向量,于是一样也可以被Transformer模型处理。至于处理后结果的好坏,最初是未知的,后来从初步的尝试结果看,效果出奇的好,于是就这么用了起来了。

为什么Transformer模型一用上,30万行C++代码就可以削减到3000行了呢?

因为Transformer模型里的自注意力机制可以让它提取出太多太多静态和动态的特征。当训练模型的人可以把无数真实驾驶的视频片段输入到模型,这些片段就在告知模型,人类驾驶员都是怎么开车的。当模型看过无数案例后,它就会自发地总结出无数环境特征与驾驶动作之间的关联。

具体到模型本身,就是当无数正确的驾驶视频数据向量化输入到模型后,模型里几十亿个等待设置的参数就会自动调整数值。比如,刚开始22亿个参数,每个填的都是0,经过一次训练后,有的变成了0,有的变成了0.10,有的变成了0.50;经过第二次训练后,0.10又变成了0.15,0.50又变成了0.52,实验结束后,把参数固定,不再改变,今后再给这个模型输入摄像头和雷达的数据输,大模型按照已固定的参数去算,输出的结果自然而然就是智能的驾驶动作。整个过程没有if-then语句这样的代码。

为什么端到端技术的实现能比传统的自动化好,因为用Transformer模型的自注意力机制会发现一切隐藏的关联,尤其是那些用逻辑规则描述不清,也不可能事先想到的关联。

之前堆5000个程序员也好,5万个程序员也好,就算绞尽脑汁,挖空心思,他们想出的规则依然是人类指定的一个简化环境中的因素,并不是真实环境里的因素。

比如,驾驶舱里司机的头偏向哪里看了,司机的手去摸哪儿了,或者你透过旁边车道一辆车的车玻璃看到隔着一个车道的车失控了……这些是很难用规则描述的。甚至是打算闯红灯的行人的表情和肢体动作,在真实驾驶中对司机的判断也是有意义的。那就更别提本身车内司机的抱怨,副驾驶的尖叫,后方车辆鸣笛节奏里表现出的情绪,还有藏在草丛中随时准备冲出来碰瓷的流氓……而这些因素可能始终都没能写成自动驾驶的规则。

以上这还是我们凭逻辑可以总结出来的关联,其实环境中还有很多是我们凭逻辑无法总结的,但是端到端大模型是有潜在的可能注意到这些的。所以Transformer模型出现后,能把更多的交通元素、驾驶因素做为输入token化,理论上自注意力机制就会找到所有我们可以想到和想不到的关联。

端到端技术的缺点

当然,端到端模型也有缺点——它是一个黑盒子,我们很难反推一个事故到底是因为哪个参数值设置得不合理导致的。一定要从参数值上找责任,那么几十亿个参数,每个都有责任。

在传统自动驾驶中,如果出现了事故,由于规则是透明的,也是人为编写的,哪个场景有缺陷出了事故,去规则库里找bug就好,马上就能找到对那种场景而言描述不完善的地方,然后补上几条新规则,这个特定场景下的表现立刻就能提高。

但端到端的智驾是无法做到这一点的。要提升就是全部能力的提升,不可能针对某一个行为单独做改进。而且,Transformer模型特有的幻觉问题也是不可避免的,又由于驾驶是一个对安全性要求很高的行为,不像语言文字中对错误的容忍度要求没有那么高。

端到端技术的影响

端到端的智能驾驶出现后会剧烈地改变竞争模式。规控模块不再需要堆案例、堆规则、堆程序员了。自动化驾驶也转变成了智能驾驶。

这就是为什么最近半年大家听说过很多国产新能源车企大幅裁员,而且裁的还都是智能驾驶部门的程序员的原因。因为真的不需要写那么多代码了。

极端情况下能减少多少代码量呢?马斯克曾在2023年8月份发推说,特斯拉的新版FSD(特斯拉智能驾驶系统),因为引入了新的算法(端到端),于是C++代码的行数从30万行下降到3000行,99%的代码消失了,对应砍掉80%的程序员不为过吧。

端到端技术的未来

今天全球只有一家车企的端到端模型是完全按这个思路设计的,就是特斯拉的FSD。从V12.3之后的版本都只有一个模型。但特斯拉的优势在于数据,它毕竟是最早大规模收集驾驶数据的公司,所以它的模型见过最丰富的场景。并且,马斯克也拥有足够的算力去实现特斯拉的FSD。特斯拉正在德州建设的超级计算中心,规划给自动驾驶训练的算力是340EOPS。这些算力对应的计算卡大约是8.5万张H100。今天全球手握5万张以上的H100计算卡的公司一只手都可以数得过来。除了特斯拉外,还没有任何一家车企或者智能驾驶解决方案公司能为训练提供了特斯拉1/10以上的算力。哪怕是达到特斯拉1/10以上训练算力的公司在今天也已经足以傲视智能驾驶领域了。

车端那个做推理的芯片呢?今天智驾系统算力超过500TOPS就已经算豪了,但特斯拉规划的是2026年车端的算力5000TOPS,又高了一个数量级。

除了特斯拉,其他公司怎么办呢?

以这次理想汽车智能驾驶发布会给出的框架来看,它用了两个模型,分别是系统1和系统2。从发布会当晚给出的多段实际驾驶录像来看,跟特斯拉水平是不相上下的。但为什么数据少还能达到很好的效果呢?系统1和系统2的配合就是其中的关键。

理想汽车内,有两片英伟达的OrinX芯片:其中一个应付平安无事驾驶方式的芯片跑系统1,可以提供1/10秒延迟的驾驶轨迹和相应的决策;另外一个应付复杂交通情况的芯片跑系统2,可以提供1/3秒延迟的驾驶轨迹和相应的决策。

为了保证足够低的延迟,系统1的Transformer模型的参数量是2亿。这个参数量只能涵盖对驾驶来说重要的元素,而容不下整个真实世界中的所有元素。

而为了处理更复杂的路况,比如刚刚说的突发事件,系统1是无法处理的。在现实中,就对应了退出辅助驾驶,提示用户自动接管。而这时,系统2就会上场。

系统2里,有一个参数规模是系统1十倍的视觉语言模型。为了节约算力,只是取了车前120°角的视觉。为了提高精准度,还额外有一个更加高清的前30°角的摄像头信息被补充进来,用来提高视觉中心区域的分辨率。

由于系统2一样需要给出驾驶决策,所以输入给视觉大语言模型的,除了前视120°和前视30°摄像头的内容外,一样也需要把导航信息的编码加入其中,然后一起送入这个22亿参数的更大的视觉语言模型中。虽然它的决策能力更强,但由于计算压力更大,所以只能以3Hz的频率生成驾驶决策,也就是一秒钟出3次。

行驶中,系统1和系统2同时工作,系统1的速度较快、但能力较弱,系统2的速度较慢、但能力较强。最后车听谁的指挥呢?具体说就是,在轨迹上,听系统1的;在决策上,既听系统1,也听系统2的。

因为在决策上,两个信号并不会重叠,它们生成的频率是不一样的。两个系统把决策汇总以后,由系统1生成最后的轨迹并执行。也就是,系统1没有注意到的复杂情况,系统2注意到后,给出变道、超车、减速的决策,然后把系统1这些建议纳入考量,生成最终的行驶轨迹。所以,系统2即便慢,也不会干扰系统1的思考,它起到的作用就是修正优化系统1的决策。

但系统1和系统2之间还存在一个互动的机制,就是能力比较弱的系统1会经常主动向系统2提问。这个提问和我们用ChatGPT提问是高度类似的,比如我是不是已经错过导航了?刚刚是否已经通过匝道了?而且,为了让系统2更好地注意到关键交通要素,系统2自己还有一个自问自答的Prompt(提示词)库,比如,当前红绿灯路口是否有临时红绿灯?这样可以充分利用系统2的能力。实际行驶中,二颗OrinX芯片的整体利用率在95%以上。

这样的视觉语言模型达到3Hz的决策生成,配合系统1一起输出路径,一个最大的好处就是可以不再依赖高精地图。

几年前的那些智能驾驶是严重依赖高精地图的。这是一种需要仔细测量,并且需要及时更新的、分辨率非常高的电子地图。通常要求10厘米级别以上的精度,在重要的交通标志上还要求1厘米的精度,这样车道线的细节、路口的细节才能准确。用高精地图与车载传感器的数据匹配,确保车辆在道路上的准确位置。之后才能谈得上路径的规划。

但高精地图里的内容不可能一成不变,需要持续更新,一个月更新一版都会有很多变化。持续更新高精地图,尤其是主要城市里的高精地图,实在是一个成本过高的任务。现在,高精地图已经不再是必选项了。

今天各家车企把这种不需要高精地图,利用各种端到端方案实现智能驾驶的方式称之为“无图NOA”,最高等级的就是城市中的无图NOA。

系统2实现3Hz的技术细节 ref

这样的视觉语言模型能达到3Hz的决策生成速度也是大幅优化后的结果。用原始的视觉语言模型OrinX跑,只能达到4秒钟生成一个决策的速度,这其实是完全不可用的。发现了意外,等待4秒钟再处理,大概率已经撞上了。所以,系统2的设计者做了四步优化:

第一步是GPTQ(GPT量化)。

这是一种在合理情况下牺牲精度、保持输出性能的方式。假如22亿个参数值,每个参数的取值范围都是0-1024的话,就代表着每个参数的激活程度都被分成了1000多档。但如果不分这么细呢?比如,就用0-64大致分级行不行呢?这样一来,超大的计算量瞬间就被削减了。GPTQ就是这样一种妥协的方法,用更低的精度取代每个参数值。找到一种比较好的精简方式,让计算量缩减到之前的1/5,但性能依然保留70%,这就很划算。系统2的工程师也没有直接利用学术界现成的GPTQ模块,而是做了一些魔改,于是把一次输出的时间从4秒削减到1.9秒。

但这个速度依然不够,所以后续还使用视觉ViT算子融合的方式,把处理时间从1.9秒优化到1.4秒。

又通过大语言模型投机采样的技术,把1.4秒再降低到0.6秒。

最后在视频推理上,采用流式推理方案,减少了重复计算的部分,把0.6秒再降低到0.3秒。

当然,这整个过程涉及太多的专业知识细节。总之,这个系统1和系统2的思路虽然最初来自于智能驾驶学术界的研究,但从理论到工程,中间要做很多很多的妥协。因为哪怕用了当前比较好的芯片,算力和内存带宽也还是捉襟见肘;哪怕模型参数规模尽量缩小,训练的算力也还是非常紧张。

哪怕是特斯拉规划了340EOPS的算力,马斯克还觉得远远不够。他觉得,还是可以动员一些车主为算力做贡献,把他们车内的HW5.0芯片的算力也利用上,在有充电条件的情况下,夜间让车内的芯片也联网提供算力。现在马斯克的规划是,集中的计算中心提供340EOPS,分布式车联网再多提供100EOPS的算力

后记

今后的智能驾驶会是什么样?大概率得由算力的进展和AI领域模型的应用这两个因素去决定。

也许今后会出现几个agent的配合,也许当前的大模型已经能摸到驾驶性能的上限了,比如比专业司机的事故率还低了一个数量级,于是就无需再提高了。在这一波技术提升中,像是网约车、汽车制造、公共交通、物流运输,这四个行业是我们可以马上想象到不再需要那么多人力的行领域。而城市规划、车险相关的保险行业、车内娱乐设施、建筑规划,这四个行业也一样会发生很大的变化,也许需要更多的人才,也许得重新寻找客户需求,产品形态都会发生很大的改变。

一个端到端不意味着终极解决方案,也不意味着不跟进就没有未来,智驾的好坏最终还是需要用户去体验,安全好用才是王道,至于使用什么技术方案,各家有各家的长处,理性看待端到端。

REF

  1. 得到:卓克老师--《科技参考3》智能驾驶专辑
  2. 知识星球:智能座舱研究社,黄叶挺老师和鑫哥回复