开环端到端自动驾驶: 从入门到放弃

2023-12-04

作者 | 木子士心王大可  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/669454065

点击下方 卡片 ,关注“ 自动驾驶之心 ”公众号

ADAS巨卷干货,即可获取

点击进入→ 自动驾驶之心【端到端自动驾驶】技术交流群 >https://so.csdn.net/so/search?q=%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E4%B9%8B%E5%BF%83%E3%80%90%E7%AB%AF%E5%88%B0%E7%AB%AF%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E3%80%91%E6%8A%80%E6%9C%AF%E4%BA%A4%E6%B5%81%E7%BE%A4

本文只做学术分享,如有侵权,联系删文

TLDR: 别在nuScenes上做开环端到端自动驾驶刷点了。

前言

UniAD[1]获得CVPR Best Paper Award后毫无疑问给自动驾驶领域带来了又一个热点: 端到端自动驾驶。同时马老师也在极力的宣传自己的端到端FSD。不过本篇文章只把讨论限定在一个很小的学术方向,基于nuScenes的开环端到端自动驾驶,会给出一些细节的东西,不讨论其它假大空的东西。(叠个甲,本文章仅是学术讨论,不包含任何对于文章中引用的paper,相关作者的任何负面态度)

因为不能闭环所以被迫选择了开环

以能否得到反馈为标准,端到端自动驾驶的学术研究主要分为两类,一类是在模拟器比如CARLA中进行,规划的下一步指令可以被真实的执行。第二类主要是在已经采集的现实数据上进行端到端研究,主要是模仿学习,参考UniAD。开环的缺点就是无法闭环(好像是废话),不能真正看到自己的预测指令执行后的效果。由于不能得到反馈,开环自动驾驶的测评极其受限制,现在文献中常用的两种指标分别是

  • L2 距离:通过计算预测轨迹和真实轨迹之间的L2距离来判断预测轨迹的质量

  • Collision Rate: 通过计算预测轨迹和其他物体发生碰撞的概率,来评价预测轨迹的安全性

事实上我们发现这两个指标完全不足以评判预测的轨迹的质量,一些技术看似提高了模型在这些指标上的表现,实则带来了其他没有被发现的问题,后续会介绍到。

nuScenes不是为planning设计的

关于开环端到端自动驾驶的测评问题最早在这篇文章[2] 中提到。在这篇文章中他们仅使用Ego Status就能够获得和现有Sota相比较的结果。但是第一次文章放出来的时候他们的数据好像用错了[3] 。同时他们错误的认为VAD也用了history trajectory, 但其实VAD[4]并没有使用历史轨迹。在AD-MLP中历史轨迹是一个默认使用的选项,当时本人理所应当的认为AD-MLP可能是受益于历史轨迹的使用,并没有特别在意这篇文章的结论。

58292fef0524ac1156510437d89ade0e.png
表1: AD-MLP的实验结果

不过后来实验受挫之后,心态发生了:”从相信端到端到怀疑端到端“的转变后,开始觉得AD-MLP的结论应该是对的。通过可视化很多nuScenes的整体场景,会发现相当比例的场景都是直行,而且速度变化不大,交互很少,如图1所示。考虑到我们对于AD-MLP使用历史轨迹的顾虑,我们复现了一版仅使用当前速度,加速度,转向角和转向指令的MLP网络。如图2所示,为了区分,将我们复现的这个网络记为Ego-MLP。Ego-MLP不使用任何传感器感知信息,监督loss仅为一个L2 Loss。同时我们还有一个更基础的驾驶策略Go Stright: 保持当前速度继续前进。

c932627bc1bacc67760926c50aba043d.png
图1: nuScenes的场景相对简单,直行占比过大
77263c0e98c4b30c0c5e05ed7e75b1bb.png
图2:复现的AD-MLP,去掉历史轨迹输入,记为Ego-MLP
e8898755a8f37adba548d07a4a51401a.png
表2 实验结果由我们使用统一的Eval代码和策略获得,与之前文献中会有不一样的地方. ID-1,3,4为我们根据开源代码简单修改复现的结果, UniAD和VAD使用BEVFormer生成BEV特征,BEVFormer默认在BEV初始阶段引入can_bus (可以理解为ego status)信息

如表2所示,我们会有如下发现

  • 简单的直行策略(ID-7)在2s内的指标都挺高的。

  • Ego-MLP 不使用感知也能取得和现有sota差不多的结果。

第二条其实还可以换个角度这样理解,现有方法比如VAD, UniAD只有在Planner上引入Ego Status才能取得和Ego-MLP相似的效果。所以自然而然有了下面的问题:

fabbf184408a3d271cfdf50a09ba5e33.png

Ego Status 引入会降低对感知的依赖

为了探究Perception 和Ego Status的效果,我们向这两个输入分别加扰动。如表3所示,在Planner中已经使用了Ego Status的情况下,就算把所有相机输入全部去掉,感知模块全部崩溃(结果变成0),模型的planning效果依然会在一个非常好的水平。我们相信这并不是一个正常的现象。与之对比的是模型会过渡依赖Ego Status的信息,假如我们改变输入模型的速度,会发现模型预测的轨迹基本会按照我们输入的假的速度去走,哪怕输入图像中事实上隐式地包含了ego的真实速度。如果输入速度全部设置成0的话,模型预测的轨迹基本处于原地不动的状态。

d9312d1e1b28f7c4c73f65314c7d3103.png
表3

结合上面我们所讨论的仅使用Ego-Status的MLP网络就能获得sota效果,说明对于nuScenes来说,Ego Status就是预测轨迹的一条shortcut, 当模型引入Ego status的时候,自然会降低对于感知信息的利用。这样的表现很难让人相信端到端模型在复杂场景下的表现。

设计一个高效的Baseline 来验证Ego Status的效果

首先,我们实在负担不起在VAD或者UniAD上来做验证实验,举例来说UniAD的第二阶段训练在我们的8* V100上就需要10天。同时,ST-P3[5],一个经常被拿来比较的方法使用了部分不正确的训练和测试数据,产生的结果数值上是不准确的。

因此我们认为我们需要设计一个相对简洁高效的baseline方法能够快速验证我们的想法,并且能够跟现有方法进行有效对比。不同于UniAD的模块化设计,我们使用了一个非常非常简单的设计,如下图所示,我们提出的baseline网络直接使用生成的BEV特征与一个Ego query发生交互,然后通过MLP预测最终的轨迹。与UniAD等方法不同,我们的baseline方法不使用其他任何中间监督,包括但不限于Depth, Detection, Map, Motion 等。最终模型仅使用一个L2 loss来进行轨迹的监督。Ego Status可以在BEV阶段或者最终的MLP阶段选择性加入。我们的模型训练12ep需要大概6个小时。

4322f25e02dc709b2252d99771a6d0ed.png
图3

最终的结果如下表,在BEV和Planner中都使用Ego staus时,我们的方法(ID-12)和VAD-Base(ID-6)基本一致,这能说明我们的方法简单却有效吗?显然不能,这也正是Ego status主导planning性能所带来的影响,使用Ego status后,根本无需复杂设计就能取得和现有sota差不多的结果。在Ego status占据主导地位后,不同方法之间的差异根本体现不出来。事实上我们已经看到了类似的论文把使用ego status所带来的性能提升包装进自己方法里,用来展现自己方法的有效性。这是极其误导人的行为。

986ceadd0d5736e54409f795a26bd137.png
表4

看似我们的方法在使用Ego Status时取得了不错的结果,但是从下图中可以看到,在Planner中使用Ego status的方法(Baseline++)似乎只用3k个iter就能收敛了,这显然是模型学到了Ego status到planning的short cut而非从视觉信息中获得有效线索。可视化BEV特征也发现,模型几乎没有从视觉分支中学习到什么有意义的表征。

67f02c207a6a93fa06c13ac83c9c0934.png
图4

我们暂时先不讨论为什么我们的方法在不使用ego status的情况下(ID-10)效果也不错的这个现象。

不用Ego Status不就完事了?

既然引入Ego Status会主导planning的学习,假如我们不想让这样的现象发生,那我们不用Ego Status不就完事了吗?第一时间这么想肯定没问题,但是

真的没有使用Ego Status吗?

为什么会有这个问题呢?因为我们发现很多方法会无意识的引入Ego Status。例如,BEVFormer默认使用了can_bus信息,这里面包含了跟自车速度,加速度,转向角相关的信息。这个东西对BEVFormer做感知其实是没啥用的,但是VAD和UniAD拿过来直接做planning话,can_bus就会发挥作用了。类似的Ego信息在感知方法中也经常被使用用来做时序对齐之类的事情。我们重新训练了去掉了can_bus的UniAD 和VAD模型,会发现明显的性能下降。考虑到ego status信息在最新的BEV方法中都被广泛使用,去掉这些信息的使用或者保证不同方法之间的公平比较都是非常困难的事情。一点点Ego status的泄漏都会对最终的planning性能产生巨大的影响。

ee2ea6f51a830239771d65a7036b8508.png
图5: BEVFormer默认使用的can_bus_info包含ego status

去掉Ego Stutus仍存在的问题

讨论到现在,可能只是简单的认为责任全在ego status,很可惜并不是这样。当我们观察上面的表4,会看到我们的方法Baseline(ID-10)在不使用任何ego status的信息的情况下,可以取得和UniAD(ID-2), VAD(ID-5)这些在BEV上用了ego status的,使用了额外感知,预测任务的模型差不多的效果。 我们再回顾一下我们的Baseline (ID-4)的设置,输入图像256x704, 仅使用GT轨迹,不使用其他中间标注,仅使用L2 loss训练12ep。 为什么这样一个朴素到极致的方法会取得这样的效果?在这里我只给出我的一个猜想,不一定正确。 既然我们能够用ego status几个数值就拟合nuScenes大多数简单场景,说明学习nuScenes 大多数简单场景的planning本身就不是一件具有挑战性的事情,学习这些简单场景下的planning根本就不需要perception map等信息。其他方法使用了更多其他模块,带来更复杂的多任务学习,事实上反而影响了planning 本身的学习,我们也做了一个简单的实验来验证我们的猜想。

6a4c5104272901a02635908199c79cbd.png
表5

如上表所示,Baseline 是原来的(ID-10)的结果,我们在Baseline上添加了一个MapFormer,具体实现做法和UniAD/VAD差不多,这个Baseline+Map模型的初始化是经过Map预训练的。我们可以看到Baseline+Map的结果远远逊色于Baseline。 原因是啥呢?为了消除Map预训练的影响,我们也使用Map预训练的权重作为(ID-10)这个setting的初始化得到了Baseline(init*)这个结果,通过对比Baseline不同初始化,我们可以发现,预训练的Map权重不会导致性能下降,反而会提升性能。问题只会出现在引入Map任务本身了。

我们对比了Baseline和Baseline+Map 在直行命令下的 L2 指标:L2-ST 和左右转指令下的L2指标: L2-LR。 同样还有在直行命令下的碰撞率指标Collision-ST, 在转弯场景下的碰撞率指标Collision-LR。 我们会发现在转弯场景下引入Map只是轻微增加L2距离,并且能够大幅度降低转弯场景下的碰撞率。与之对应的是直行场景下的L2和Collision被double了。考虑到转弯场景通常是更复杂,更需要操作的,而直行场景相对简单,我们猜测是因为引入Map 带来多任务学习的干扰反而影响了这些简单场景的学习。在nuScenes验证集上,直行命令占比87%,因此主导了最终的平均指标。我们可以看到Map引入在转弯场景下实际是没什么负面效果的,但是被平均之后Map的积极效果根本彰显不出来。

a3d318103d38fe361308e1b53e3af4e0.png
表6
1b97a74daa7f413f3f512048d386ed72.png
表7

如果我们的猜想成立,这说明nuScenes做planning不单单是一个ego status的问题,而是本身全方面的不靠谱。

开环Planning指标

碰撞率指标的多个问题

我们暂时先不讨论L2 distance的问题, 因为好像更多的文章倾向于认可collision rate这个指标。实际上这个指标非常不靠谱,原因有:

  • 计算碰撞的时候,其他车的未来轨迹都是回放,没有任何reaction,单从这一点上讲,这个指标就很不靠谱。

  • 实际实现的问题,由于预测的轨迹只是一堆xy坐标,没有考虑ego 的yaw angle在未来的变化,计算碰撞的时候也是假设ego car的yaw angle永远保持不变,会造成很多错误的碰撞计算。我们这次也是通过轨迹估算yaw, 统一解决了这个问题。

b76f4ee34ddf4c6f78c87da4745a0165.png
图6 不考虑yaw angle变化的灰色小汽车会造成很多错误的碰撞计算
998a978ad2c56a6a8fa49890102bfc7d.png 92d9b92eeb27bf39baa0b3424a87a618.png
图7 UniAD引入后处理模块来优化轨迹,降低碰撞率
  • Collision Rate可以被后处理进行攻击, UniAD中最有效的模块是一个后处理模块,在端到端模型给出一个初始的预测结果后,使用一个optimizer 来使得轨迹在满足一定约束条件下尽可能的远离其他物体,从而避免碰撞。从指标上讲,这个trick可以显著降低collision rate。然而看似合理的模块其实只是对于collision rate的一个hack, 原因在于约束条件不够多,例如没有考虑到地图信息。可以简单理解为:为了躲其他车,这个模块会选择打方向盘,冲到马路牙子上。但是根据现有指标,撞马路牙子是没有啥大问题的。

引入新指标

上面我们讨论了,汽车撞到马路牙子时,现在的指标是不会有什么显著惩罚的,造成一些方法可以通过用撞马路牙子的手段来降低与其他车发生碰撞的概率。所以我们使用了一个新的指标用来统计ego和road boundary(马路牙子)发生交集的概率。具体实现方法和collision rate的方法一致。经过统计,使用UniAD的后处理,降低0.1 %的碰撞概率的代价是增加5%以上与道路边界(马路牙子)发生交互的概率。这一后处理显然是不合理的,我们汇报UniAD的结果时,也都是默认不使用后处理的。

9910ca65759449a90100f23ae177f11d.png
图8 UniAD的后处理显著增加了与马路边间发生交互的概率

开环的DEMO真的可靠吗

图9 左:根据当前速度直行,中:Ego-MLP 右: GT 我们可以看到左边这列使用最简单的按照当前速度直行的策略,也会减速让行,避让车辆。这其实这都是human driver 的操作。 对于开环方法,每一时刻都会刷新回human driver驾驶的安全轨迹,沿用human driver的驾驶策略。因此开环端到端方法每时每刻都是在一个安全的轨迹之上做未来的预测,不受到累计误差的影响。再难的路, 0.5s后 human driver总会给你正确答案。

你的开环端到端模型能学会转弯吗?

3d6a49cef401c5f7615dc55e84aab7e7.png
图10, 似乎所有的开环模型都不会转弯

我们发现似乎所有的开环模型都没有学会怎么转弯,转弯的时候预测的轨迹和真实轨迹差别很大,而且前后预测的轨迹不smooth,也就是前后不一致。

总结

基于nuScenes的开环端到端自动驾驶,所面临的问题太多了,心累了。

参考

  1. https://arxiv.org/pdf/2212.10156.pdf

  2. RethinkingtheOpen-LoopEvaluationofEnd-to-EndAutonomousDrivingin nuScenes https://arxiv.org/pdf/2305.10430.pdf

  3. AD-MLP Issue https://github.com/E2E-AD/AD-MLP/issues/4

  4. https://github.com/hustvl/VAD

  5. https://github.com/OpenDriveLab/ST-P3

① 全网独家视频课程

BEV感知 、毫米波雷达视觉融合 多传感器标定 多传感器融合 多模态3D目标检测 点云3D目标检测 目标跟踪 Occupancy、 cuda与TensorRT模型部署 协同感知 语义分割、 自动驾驶仿真、 传感器部署、 决策规划、轨迹预测 等多个方向学习视频( 扫码即可学习

07919d40eba91bc8c46a6411a8407c59.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球, 这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频 ,期待交流!

21aeb7f445e05212088deb93c01328ac.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦 目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流 等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

2fa6e42fa0411de71b8456f51ed5e4f4.jpeg

④【自动驾驶之心】平台矩阵, 欢迎联系我们!

10950b7d74394ea9c5f0c7192eb2e88c.jpeg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开环端到端自动驾驶: 从入门到放弃 的相关文章

随机推荐

  • 利用Debye-Wolf积分对理想矢量聚焦情况的研究

    1 摘要 了解高NA物镜焦距附近的矢量电场分布对如显微 光镊 激光加工等应用具有重要意义 Debye Wolf积分提供了焦平面附近矢量场的半解析解 并得到了广泛的应用 我们演示了如何在VirtualLab Fusion中使用Debye Wo
  • Cumulus Encrypted Storage System(CESS)激励测试网 v0.7.5 于11月29日正式上线

    Cumulus Encrypted Storage System CESS 是基于区块链的去中心化云存储网络和 CDN 网络 支持数据在线存储和实时共享 为 Web3 高频动态数据的存储和检索提供全栈解决方案 CESS 数据价值网络是以 D
  • mybatis_insert语句填充id值

    在使用sqlserver数据库插入自增id的数据的时候 不能给id赋值 就需要自己写 insert 语句 但是在xml中使用insert标签却不会直接返回id值
  • Pcb电路板的表面处理工艺简说

    随着PCB生产技术的日益增大 产品对其工艺的要求也越来越高 下面 四川英特丽 gt http www citpcba com 为您解释PCB板上的表面工艺 对比各类PCB板的表面处理工艺有哪些优缺点和适用场景 从 PCBA贴片加工 gt h
  • 【附安装包】2023最新版Python安装详细教程!一键安装,永久使用

    一 python官网 Python官网主要有python的About 简介 Downloads 下载 Documentation 文档 Community 团体 Success Stories 成功案例 News 新闻 Events 事件动
  • 变速箱壳体铸造件自动化三维测量室厂家自动化检测偏差比对-CASAIM-IS(2ND)

    一 背景介绍 随着制造业的快速发展 对产品质量和生产效率的要求不断提高 壳体铸造件作为一种常见的机械零部件 广泛应用于各个领域 对壳体铸造件的质量可靠性的要求也越来越高 因此 对壳体铸造件进行精确的三维测量显得尤为重要 CASAIM作为自动
  • SqlServer_分页_OFFSET_FETCH

    使用SQL server分页 使用SQL server分页的时候踩了一个坑 用mybatis plus分页的时候始终报错 代码 Page
  • 渲染效果图时,选择云渲染平台的侧重点有哪些?

    对于 三维行业的发展来看 3D软件版本都在持续更新中 近期三维更新的软件有3ds max maya blender等可以说 软件功能更新上也是不断的 设计行业对渲染渲染的需求也是越来越高 虽然要求渲染精度更高 渲染效果更逼真 但参数的增加会
  • 全网最详细的Python安装教程,超级详细·小白秒懂!!!

    目录 1 安装版本说明 2 准备工作 确定操作系统及位数 2 1 确定方法1 2 2 确定方法2 3 下载Python安装包 4 安装Python 5 测试Python是否安装成功 6 Python安装成功后找不到编写代码的桌面快捷方式 7
  • 《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

    你是否曾想过 元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的 在本期的 开箱元宇宙 系列中 我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2 000 个人物化
  • 如何利用场追迹控制衍射的包含

    1 摘要 VirtualLab Fusion包括一系列建模方法便于用户可以地调整光学仿真的精度级别和时间 不仅如此 这种功能还有助于隔离物理原因产生的不同影响 在本示例中 我们提出了一个清晰的工作流程配置一个仿真 以便在物理光学模拟中考虑或
  • 盘点最近超火的AI小红书商单玩法,7天快速涨粉1000+

    hi 同学们 今年是AI迎来爆发的一年 生成式AIGC技术大量涌现 正在加速为各行各业赋能 像大家熟悉的AI绘画和AI数字人等商业应用领域 基本先行的那波人都尝到了甜头 老粉都知道我做AI变现项目拆解也有大半年了 我们自有团队也在日常中不断
  • vue3新特性 compositionAPi与React.js中Hooks的异同点

    1 React js中的Hooks基本使用 React Hooks允 许你 勾入 诸如组件状态 和副作用处理等React功能中 Hooks只能用在函数组件中 并允许我们 在不需要创建类的情况下将状态 副作用处 理和更多东西带入组件中 Rea
  • 光学标准具的建模

    光学标准具在具有简单结构的透明板中可以形成法布里 珀罗谐振器 Fabry P rot resonators 并用于光谱和 或角谱选择 VirtualLab Fusion中的非序列场追迹技术可以对不同类型的标准具进行精确建模 其中包括平面或曲
  • Redis基础系列-安装Redis

    Redis基础系列 安装Redis 文章目录 Redis基础系列 安装Redis 1 环境要求 2 下载redis 3 安装 4 配置 5 参考与感谢 1 环境要求 安装C语言编译环境 r
  • 乘数而启,向数而行|2023数字金融创新发展论坛成功举办

    订阅制 C端消费者早已耳熟能详 如今也凭借灵活 服务更新稳定的特点 逐渐成为B端企业服务的新热点 比如对中小企业而言 办公IT设备等配套支出都必不可少 但收入 栗栗在线招人啦 哇 各位 招人好难啊 你们赶紧来找栗栗啊 不限经验 不限地域 不
  • 杂散光好书分享《FRED操作手册上、下》

    目 录 第一章 FRED概述 1 1 1 WHAT IS FRED 1 1 2 FRED与传统软件之间有什么不同 1 1 3 FRED名词术语 2 1 4 FRED用户界面 7 第二章 光源 16 2 1 简易光源 16 2 1 1 简易光
  • 用Czerny-Turner系统检测钠灯双线

    1 摘要 Czerny Turner系统被广泛用于分析光源的光谱信息 通常 首先用抛物面反射镜对光源进行准直 然后用衍射光栅对颜色进行空间分离 在这个例子中 我们提出了一种由反射镜和衍射光栅组成的Czerny Turner系统 用于检测钠双
  • Python 多线程装饰器 基于线程池实现

    usr bin env python3 coding UTF 8 author v jiaohaicheng baidu com des 多线程装饰器 基于cup包内置线程池实现 默认内置最大线程数10 from functools imp
  • 开环端到端自动驾驶: 从入门到放弃

    作者 木子士心王大可 编辑 汽车人 原文链接 https zhuanlan zhihu com p 669454065 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 端到端自动驾驶 技术交流