最近一个月由于众所周知的一些原因,非常密集地和行业内的各种老师同学进行了交流。交流中必不可免的一个话题自然是端到端与火爆的特斯拉FSD V12。想借此机会,整理一下在当下这个时刻的一些想法和观点,供大家参考和讨论。
如何定义端到端的自动驾驶系统,应该期望端到端解决什么问题?
按照最传统的定义,端到端的系统指的是一套系统,输入传感器的原始信息,直接输出任务关心的变量。比如在图像识别中,CNN相对于传统的特征子+分类器的方法就可以叫做端到端。在自动驾驶任务中,自然想到的一个定义便是,输入各种传感器的数据(相机/LiDAR/Radar/IMU…),直接输出车辆的控制信号(油门/方向盘转角)。为了考虑不同车型之间的适配问题,也可以将输出放宽为车辆的行驶轨迹。这便是一个传统意义上,或者我叫做狭义端到端的定义。在这样的一个基础上,也衍生出了例如UniAD这样模块化端到端的概念,即在最终输出控制信号或者路点之外,也引入了一些相关的中间任务的监督来提升性能。
然而,除了这样狭义的定义之外,我们还应该从本质上思考一下,端到端的本质是什么?我认为端到端的本质应当是感知信息的无损传递。我们先回想一下在非端到端系统中,感知和PnC模块的接口是什么样子的。一般我们会有针对白名单物体(车,人,etc)的检测/属性分析/预测,会有对静态环境的理解(道路结构/限速/红绿灯,etc),如果做的更细致一些的话,还会做通用障碍物的一些检测工作。从宏观的角度来讲,感知输出的这些信息,都是对复杂驾驶场景的一种抽象,而且是人工定义的显式抽象。然而,对于一些非常见场景中,现在的显式抽象难以充分表达场景中会影响驾驶行为的因素,亦或是我们需要定义的任务过多过琐碎,也难以枚举尽所有需要的任务。所以端到端系统,提供了一种(也许是隐式)全面表示,希望能够自动地无损地将这样的信息作用于PnC。我认为,所有能满足这样的系统,都可以叫做广义端到端。
至于其他的问题,比如对动态交互场景的一些优化,我个人的观点认为至少并非只有端到端才能解决这些问题,端到端可能也不是解决这些问题最好的一个方案。传统方法是可以解决好这些问题的。当然,在数据量足够大的时候,端到端可能会提供一个还不错的solution。关于这个事情是否有必要,会在后几个问题中展开讨论。
关于端到端自动驾驶的一些误区?
一定要输出控制信号和路点才是端到端
如果能认同上面所讲的广义端到端的概念,那么这个问题就很容易理解了。端到端更应该强调的是信息的无损传递,而不一定要直接输出任务量。这样狭义的端到端做法,其实带来和非常多不必要的麻烦,需要大量的兜底方案来保证安全,然而这样也会有很多的问题,在后面会展开。
端到端系统一定要基于大模型或者纯视觉
端到端自动驾驶的概念和大模型自动驾驶以及纯视觉自动驾驶没有任何必然的联系。这三个概念是完全独立存在的,一个端到端的系统不必一定是传统意义上的大模型驱动的,也不一定就是纯视觉。三者之间有一些关联,但不等同。
之前我有一篇文章详细阐述过这些概念之间的关系,详见:https://zhuanlan.zhihu.com/p/664189972
长远来看,上述狭义的端到端系统有没有可能实现L3级别以上自动驾驶?
其实我先想来吐槽一句,号称要用大模型来颠覆L4的人,都没有实际做过L4;号称端到端包治百病的人,也都从来没做过PnC。于是和很多对端到端狂热的人聊下来,就变成了一个纯粹的无法证实也无法证伪的宗教信仰之争。我们做前沿研发的同学,还是应该更实事求是,讲究证据一些。。。最起码对想要颠覆的东西有一些基础认知和了解一下其中棘手的问题,这是应该有的基本科学素质。。。
言归正传,目前来看,我是悲观的。暂且不论目前号称是纯端到端的FSD,性能还远远不能达到L3级别以上所需要的可靠性和稳定性,未来就算是统计意义上这个车辆和人是一样安全的,还要面临如何和人类驾驶员的错误做align的问题。更直白一点来说,就是说,一个自动驾驶系统想要让大众和舆论接受,关键可能不在于一个绝对的事故率和致死率,而是在于大众是否能接受有一些场景中,对于人类是相对轻松解决,而机器会犯错的。这个需求对于纯端到端系统来说更难以实现。更具体的在我21年的一个回答中有阐述,详见:
如何看待李彦宏朋友圈发表:无人驾驶肯定会出事,只是这个概率比有人驾驶低多了?
https://www.zhihu.com/question/530828899/answer/2590673435?utm_psn=1762524415009697792
举在北美的Waymo和Cruise为例,其实分别都出过不少事故,但是为什么Cruise最后一次出现的事故让监管和大众尤为不能接受呢?这个事故发生了两次伤害,第一次的碰撞,对于人类驾驶员也是相当难以避免的,其实也是可以被接受的。但是在这一次的碰撞发生之后,发生了严重的二次伤害:系统错误地判断了碰撞位置和伤员位置,为了不阻塞交通,降级到了靠边停车的模式,将伤员拖拽很久。这样的一个行为,是任何一个正常的人类驾驶员都不会做出的事情,而且影响非常恶劣。这个事情直接导致了Cruise后续的一些动荡。这个事情其实也给我们敲响了警钟,如何避免这样的事情发生,应该是自动驾驶系统研发和运营中认真考虑的问题。
那么站在现在的这个时刻,下一代量产辅助驾驶系统中切实可行的方案是什么?
简单来说,我认为一个合适的系统应当是首先充分挖掘传统系统的能力上限,然后再去结合端到端的灵活和普适性,也就是一个渐进式端到端的方案。当然这两者如何有机地结合就是个付费内容了,哈哈。。。但是我们可以分析一下,现在所谓的端到端或者learning based planner实际落地在做的事情是什么。
以我有限的了解,目前所谓端到端模型在行车中使用的时候,在输出的轨迹之后都会去接一个基于传统方法兜底的方案,或者是这样的learning based planner和传统的轨迹规划算法会同时输出多条轨迹,再通过一个selector来选择一条执行。如果这样设计系统架构,这么一个级连系统的性能上限其实是被这样的兜底方案和selector限制住的。如果这样的方案仍然是基于纯feedforward learning的,仍会有不可预测的失效,本质上并不能达到兜底的目的。如果考虑在这样输出的轨迹上使用一个传统的规划方法再去优化或者选择,那相当于learning based方法出的轨迹,只是给这样的一个优化和搜索问题做了一个初始解,我们为何不直接去优化和搜索这样的轨迹呢?
当然有同学会跳出来讲,这样的一个优化或者搜索问题是非凸的,状态空间很大不可能在车载系统上跑到实时。我请大家在这里仔细想这样一个问题:在过去10年中,感知系统至少吃到了100x的算力红利发展,但是我们的PnC模块呢?如果我们同样允许PnC模块使用大算力,结合上近几年先进优化算法的一些发展,这样的结论仍然成立吗?针对这样的问题,我们不应该固步自封,路径依赖,而是应该从第一性原理思考什么才是对的。
数据驱动和传统方法之间关系如何调和?
其实和自动驾驶非常类似的一个例子就是下棋,刚好在今年2月份的时候Deepmind发表了一篇文章(Grandmaster-Level Chess Without Search:https://arxiv.org/abs/2402.04494)就在探索只用数据驱动,抛弃AlphaGo和AlphaZero中的MCTS search是否可行。类比到自动驾驶中就是,只用一个网络直接输出action,抛弃掉后续所有的步骤。文章的结论是,在相当的规模的数据和模型参数下,不用搜索仍然可以得到一个还算合理的结果,然而和加上搜索的方法比,还有非常显著的差距。(文章中这里的对比其实也不尽公平,实际差距应该更大)尤其是在解一些困难的残局上,纯数据驱动性能非常糟糕。这类比到自动驾驶中,也就是意味着,需要多步博弈的困难场景或corner case,仍然很难完全抛弃掉传统的优化或者搜索算法。像AlphaZero一样合理地运用各种技术的优势,才是最为高效提升性能的方式。
传统方法 = rule based if else?
这个观念也是我在和很多人的交流中需要反复纠正的。按照很多人的定义,只要不是纯数据驱动,就叫做rule based。还是举下棋这个例子,去死记硬背定式和棋谱是rule based,但是像AlphaGo和AlphaZero一样通过搜索和优化赋予模型reasoning的能力,我认为并不能叫做rule based。这恰恰也是目前大模型本身所欠缺的,也是研究者通过CoT等方式试图赋予一个learning based model的。然而人开车每一个动作都是有明确的动机的,这和需要纯数据驱动的图像识别等无法清晰描述原因的任务不同。在一个合适的算法架构设计下,决策轨迹都应该成为变量,在一个科学的目标指引下统一优化。而不是通过强行打patch和调参去修各种case。这样的一个系统自然也不会存在各种hardcode的奇怪的rule。
总结
最终总结一下,端到端也许是一个很有希望的技术路线,但是这样一个概念如何付诸实践还有很多有待探索的事情。是不是狂堆数据和模型参数就是唯一正确的解决方案,目前在我看来并不是的。我觉得,任何时刻作为一个前沿研究的技术人员,我们都应该真正奉行马斯克所讲的第一性原理和工程师思维,从实践中思考问题的本质,而不是将马斯克本身变成第一性原理。想要真正遥遥领先,就不应该放弃思考,人云亦云,否则就只能在不断想要弯道超车。