电子说
作者 | Jone
出品 | 焉知汽车
现代自动驾驶系统的特点是按顺序排列的模块化任务,传统的方法是基于标准的感知-规划-控制这种序列式架构的主流处理方式。即首先将感知信息处理成人类可以理解的语义信息和道路交通信息,然后基于常态化知识和规则进行决策规划,这种处理方式在先前常规的高速路、快速路上实现L2级以后以下的驾驶辅助而言是基本没有问题的。然而,针对高阶自动驾驶而言,这类专家和规则的处理方式却难以胜任在复杂不确定的城市甚至乡村场景中需要执行的自动给驾驶任务。
最近,自动驾驶领域无论是在CVPR上发表的论文还是工程化实践中,最火的专业领域莫过于端到端End to End的大模型了。该模型实际上是一个抽象的概念,即只需要输入原始数据到模型端,即可得出对应期待的输出。实际上,隐藏在大模型背后的便是以人工智能基础深度学习之上的强化深度学习。
那么什么是强化深度学习呢,实际上,这是一种将感知、规划、决策能力相结合的计算能力。且这种学习方式根据输入的图像为基础,输出段以最大限度地模仿真人思考对环境的判断和处理,使得驾驶体验具备灵活性、自适应、拟人化程度更佳。更进一步讲,强化深度学习实际是一种以时间线为决策基准的方式,智能体通过与环境的交互获得必要的反馈。对这种反馈的处理模式与当前典型深度学习(监督学习和无监督学习)的不同之处在于:强化学习对于目标训练采用的是奖励函数而非代价函数。
众所周知,对于自动驾驶环境场景理解中,一般使用监督学习算法实际是标准库的匹配过程,这是可以既快又好的学习到环境目标。而针对规划决策而言,则是更加拟人化的处理过程,也就是规划与处理不再是标准的公式套用,而是将高维感知信息通过不断的反馈、回归映射处理实现到动作空间的有效映射。实践证明,基于深度强化学习的端到端控制架构可以规避传统方式以来处理更高维度更复杂场景的自动驾驶决策规划能力。
因此,从整体优化角度上说,随着深度学习的成功发展,自动驾驶算法将集合一系列任务,包括感知中的检测、跟踪、建图,以及预测中的运动和占用预测。本文将跳出常规基于AI感知的数据处理模式,而将目光转向感知后端的预测、规划和决策模块,将AI处理逻辑应用在这些模块上实现更加智能化的处理过程。
为了执行各种各样的任务并实现高级智能,先进的算法是要么为单个任务部署独立模型,要么设计具有单独头的多任务范例。然而,他们可能会遇到累积错误或任务协调不足的问题。因此,基于AI大模型的自动驾驶汽车规划则是一种优化整体设计框架的有效手段。以此为导向,需要重新审视感知和预测中的关键组成部分,并确定任务的优先级,以便所有这些任务都有助于后续的任务规划。因此,有必要推出统一自动驾驶(UniAD)综合框架,将全栈驾驶任务整合到一个网络中。充分利用每个模块的优势,并从全局角度为代理交互提供互补的特征抽象。各个任务间可以通过统一的查询接口进行通信,以方便彼此进行规划。
如上图(a)所示,只要板载芯片的资源带宽允许,大多数行业解决方案都会为每个任务分配独立部署独立模型。这样的设计虽然简化了跨团队的研发难度,但由于各个任务之间相互隔离,也存在跨模块信息丢失、错误累积、功能错位的风险。
一种更优雅的设计是将多个特定任务头插入共享特征提取器中,将广泛的任务纳入多任务学习(MTL)范式中,如上图(b)所示。这是许多领域的流行做法,包括自动驾驶通用视觉算法(例如 Transformer、BEV )以及芯片行业(例如 Mobileye、Tesla、Nvidia 等)。在 MTL 中,跨任务的协同训练策略可以利用特征抽象毫不费力地扩展到额外任务,并节省板载芯片的计算成本。然而,这样的方案可能会导致不良的“负迁移”。
相比之下,端到端自动驾驶模型的出现将所有节点从感知、预测到规划统一为一个整体。前面任务的选择和优先级将有利于后续任务的规划。系统应该以规划为导向,对某些组件进行精心设计,使得很少有像独立选项那样的累积误差或像MTL方案中的负转移。
遵循端到端范式,一种“白板”实践是直接预测计划轨迹,无需对感知和预测进行任何明确的监督,如上图(c.1)所示。虽然这样的方向值得进一步探索,但其安全保障和可解释性不足,尤其是对于高度动态的城市场景。在本文中,我们从另一个角度提出以下问题:对于一个可靠的、面向规划的自动驾驶系统,如何设计有利于规划的管道?哪些前面的任务是必需的?
直观的解决方案是感知周围的物体、预测未来的行为并明确地计划安全的操作,如上图(c.2)所示。在这方面已经有不少实践提供了很好的见解并取得了令人印象深刻的表现。然而,细节决定成败,以前的工作或多或少没有考虑某些组成部分,比如以规划为导向的必要性。
统一的自动驾驶算法框架
最近的研究证明了Transformer 结构在感知任务上的有效性,受此启发,在端到端设置中也将这种时序上的预测模式应用到了各个后端处理中,这里我们简称为“xxxFormer”。 首先,我们引入一个统一的自动驾驶算法框架---UniAD ,即利用 ffve 基本任务来构建安全、鲁棒的系统。UniAD 的设计本着以规划为导向的精神,这不仅仅是一个简单的工程任务堆栈,而是一个连接所有节点的基于查询设计的关键组件。与经典的边界框表示相比,查询受益于更大的接受场,以减轻上游预测的复合误差。此外,查询可以灵活地对各种交互进行建模和编码,例如多个代理之间的关系。UniAD是一个全面研究自动驾驶领域感知、预测和规划等多种任务的联合工作。通过这样的设计希望能够对自动驾驶系统的目标驱动设计有所启发,为协调各种驾驶任务提供一个起点。
这种遵循以规划为导向的理念精心设计,不是简单的任务堆栈,而是研究每个模块在感知和预测中的效果,利用从先前节点到驾驶场景中最终规划的联合优势。所有感知和预测模块均采用 Transformer Decoder 结构设计,以任务查询作为连接各个节点的接口。一个简单的基于注意力的规划器最终会考虑从先前节点提取的知识来预测自车未来路径点。期间,将会使用基于视觉形成的占用地图。
接下来将对如上图所示的整个数据链路中的预测模型进行完整性说明。
首先,轨迹生成是联合执行检测和多目标跟踪(MOT),这种方式无需后处理,而是采用取查询设计的方式。除了对象检测中使用的传统检测查询之外,还引入了额外的跟踪查询来处理跨帧跟踪代理。具体来说,就是在每个时间步,初始化的检测查询负责检测第一次感知到的新生代理,而跟踪查询则保持对在先前帧中检测到的那些代理进行建模。检测查询和跟踪查询都通过关注 BEV 特征 B 来捕获代理抽象。随着场景不断发展,当前帧的跟踪查询与自注意力模块中先前记录的查询进行交互,以聚合时间信息,直到在特定时间段内未跟踪到目标且相应的代理完全消失。
如上图所示,UniAD最终包括四个基于Transformer解码器的感知和预测模块以及一个规划器。查询 Q 起到连接管道的作用,以对驾驶场景中实体的不同交互进行建模。具体来说,需要将一系列多摄像头图像输入特征提取器,并通过 BEVFormer 中现成的 BEV 编码器将所得透视图特征转换为无扩散鸟瞰图 (BEV) 特征B。UniAD 并不局限于特定的 BEV 编码器,并且可以利用其他替代方案通过长期时间的多模态融合来提取更丰富的 BEV 表示。 在 TrackFormer 中,从特征图 B 查询到可学习的跟踪信息代理。TrackFormer 包含 N 层,最终输出状态 QA 为下游预测任务提供 Na 个有效代理的知识。除了对自车周围的其他代理进行编码的查询之外,还在查询集中引入了一个特定的自车查询,以显式地对自动驾驶车辆本身进行建模,这将进一步用于规划。
MapFormer 则将地图作为道路元素(例如车道和分隔线)的语义抽象进行查询,并执行地图的全景分割。这种基于 2D 全景分割方法 Panoptic SegFormer进行地图设计原理是将道路元素稀疏地表示为地图查询,以帮助下游进行运动预测,并对位置和结构知识进行编码。对于不同的驾驶场景而言,将车道、分隔线和十字路口设置为关注目标,并将可行驶区域设置为某一特定的其他目标。此外,MapFormer还有N个堆叠层,每层的输出结果都受到监督,而只有最后一层中更新的查询QM被转发到MotionFormer以进行智驾车与地图的交互。
通过上述表示代理和地图的查询,MotionFormer 捕获代理和地图之间的交互,并预测每个代理的未来轨迹。接下来,OccFormer 采用 BEV 特征 B 作为查询,配备智能体作为键和值,并在保留智驾车辆的情况下预测多步未来占用情况。最后,Planner利用 MotionFormer 富有表现力的自车查询来预测规划结果,并使其远离 OccFormer 预测的占用区域以避免碰撞。
以上过程中,如果考虑自车行驶的周边场景都是智能体,且由于每个智能体的动作都会对场景中的其他智能体产生重大影响,因此该模块对所有考虑的智能体都可以进行联合预测。同时,通过设计一个自车查询来显式地建模,并使其能够在这种以场景为中心的范例中与其他代理进行交互。
运动预测与占用预测
接下来将详细介绍相关运动预测和占用预测的详细方法。
1、运动预测
首先,通过分别从 TrackFormer 和 MapFormer 对动态代理 QA 和静态地图 QM 进行高度抽象的查询,MotionFormer 以场景为中心的方式预测所有代理的多模态未来运动,即前 k 个可能的轨迹。这种范例通过一次前向传递在帧中产生多智能体轨迹,这大大节省了将整个场景与每个智能体坐标对齐的计算成本。同时,考虑到未来的动态,通过 MotionFormer 传递来自 TrackFormer 的自车查询,以使自车与其他环境目标进行交互。形式上,输出运动被表述为 {xˆi, k ∈ RT×2|i = 1,......N; k=1,... ..., K} ,其中 i 表示索引代理,k 索引轨迹模态,T 是预测范围的长度。
运动预测由 N 层组成,每层捕获三种类型的交互:自车与周边环境目标、自车与地图和自车与潜在风险目标。对于每个运动查询 Qi,k,其与其他代理 QA 或地图元素 QM 之间的交互可以表示为:
其中,MHCA、MHSA 分别表示多头交叉注意力和多头自注意力。由于在完善预测轨迹中更加关注预期位置(即目标点),因此通过可变形注意力可以设计一个代理目标点注意力,如下所示:
其中 x^l−1T 是上一层预测轨迹的端点。DeformAttn(q,r,x) 是一个可变形注意力模块,接收查询q、参考点 r 和空间特征 x。它对参考点周围的空间特征进行稀疏关注,通过这种方式,随着了解端点周围环境,预测轨迹将进一步细化。所有这三种交互都是并行建模的,其中生成的 Qa、Qm 和 Qg 被连接并传递到多层感知器 (MLP),从而生成查询上下文 Qctx。然后,Qctx被发送到后续层进行细化或解码为最后一层的预测结果。
2、占用网格图预测
“占用网格图”这是一个当前智能驾驶相对较火的术语,其本身是一种离散化的 BEV 表示,其中每个单元格都持有一个指示其是否被占用的信念,而占用预测任务是发现网格图未来如何变化。先前经典的方法利用 RNN 结构根据观察到的 BEV 特征在时间上扩展未来预测 。
然而,这种高度依赖于手工制作的聚类后处理来生成每个智能体占用图,因为它们通过将 BEV 特征作为一个整体压缩到 RNN 隐藏状态,而这其中大多与智能体无关。由于代理知识的使用不足,他们很难预测全局所有代理的行为,这对于理解场景如何演变至关重要。为了解决这个问题,就需要进一步详细介绍占用网络预测 OccFormer 。
在占用网格预测中,主要在两个方面结合了场景级和代理级语义:
(1)密集场景特征在展开到未来视野时通过精心设计的注意力模块获取代理级特征;
(2)我们通过代理级特征和密集场景特征之间的矩阵乘法轻松产生实例占用率,而无需进行繁重的后处理。
OccFormer 由 To 顺序块组成,其中 To 表示预测范围。由于密集表示占用的计算成本较高,因此在运动任务中 To 通常小于 T。每个块将来自前一层的丰富代理特征 Gt 和状态(密集特征)F t−1 作为输入,并考虑实例级和场景级信息生成时间步 t 的密集特征 Ft。
为了获得具有动态和空间先验的代理特征Gt,可表示为 QX ∈ R Na×D 的模态维度中对来自 MotionFormer 的最大池运动查询进行最大池化,其中 D 作为特征维度。通过a将其与上游轨迹查询QA和当前位置嵌入PA融合时间特定 MLP:
其中[·]表示串联。对于场景级知识,为了提高训练效率,将 BEV 特征 B 缩小到 1/4 分辨率,以作为第一个块输入 F0。为了进一步节省训练内存,每个块都遵循下采样-上采样方式,并注意中间的模块以 1/8 自缩放特征进行像素代理交互,表示为 Ftds。
像素与代理交互旨在预测未来占用情况时输出统一场景和代理级别的理解。将密集特征 Ftds 作为查询输入,将实例级特征作为键和值,以随着时间的推移更新密集特征。具体来说,Ftds 通过自注意力层来对远处网格之间的响应进行建模,然后交叉注意力层对代理特征Gt 和每个网格特征之间的交互进行建模。此外,为了对齐像素-代理对应关系,通过注意掩模来约束交叉注意,该掩模限制每个像素仅在时间步 t 处查看占据它的代理。稠密特征的更新过程可表述为:
注意掩码 Ot m 在语义上与占用相似,是通过将额外的代理级特征与密集特征 Ftds 相乘而生成的,其中将此处的代理级特征命名为掩码特征Mt = MLP(Gt )。经过方程式中的交互过程后,Dtds 被上采样到 B 的 1/4 大小。进一步将 Dtds 与块输入 Ft−1 作为残差连接相加,并将得到的特征 Ft 传递到下一个块。
接下来是生成实例级占用率。它代表保留每个代理身份的占用情况。它可以通过矩阵乘法简单地绘制出来,就像最近基于查询的分割工作一样。形式上,为了获得 BEV 特征 B 的原始大小 H ×W 的占用预测,场景级特征 Ft需要通过卷积解码器上采样Ft dec ∈ R C×H×W,其中 C 是通道维度。对于代理级特征,我们进一步通过另一个 MLP 将粗掩模特征 Mt 更新为占用特征 Ut ∈ R Na×C。从经验发现,从掩码特征 Mt 而不是原始代理特征 Gt 所生成的 Ut 会带来更加优越的性能。最终以时间t 为步长的最终实例级占用率可以表示为:
运动轨迹规划与查询
在没有高清 (HD) 地图或预定义路线的情况下进行规划通常需要高级命令来指示前进方向。对于智能车而言,其对应的行驶动作无非包括车道保持、加减速、变道等。因此,可以粗略的将原始导航信号(即左转、右转和保持前进)转换为三个可学习的嵌入,称为命令嵌入。由于 MotionFormer 的自车查询已经表达了其多模式意图,因此,需要为其配备命令嵌入以形成“计划查询”。
这里对 BEV 特征 B 进行计划查询,使其了解周围环境,然后将其解码为未来的航路点 τˆ。为了进一步避免碰撞,可以通过以下方式进行推理优化τˆ:
其中τˆ是原始规划预测,τ*表示优化规划,它是从multipleshooting轨迹τ中选择的,以最小化成本函数f(·)。O^ 是从 OccFormer 的实例占用预测合并而来的经典二进制占用图。
MotionFormer 每层的输入查询(称为运动查询)包含两个组成部分:如前所述由前一层产生的查询上下文 Qctx 以及查询位置 Qpos。具体来说,Qpos 将位置知识四重整合,如下式中所示。
其中们这些位置包括场景级锚点 Is 的位置;代理级锚点 Ia 的位置;智能体 i 的当前位置x0和预测目标点xl-1T。
这里利用正弦位置编码 PE(·) 后跟 MLP 对位置点进行编码,并将 x0T 设置为 I s
在第一层(下标i、k也被省略)。场景级锚点表示全局视图中的先前运动统计数据,而代理级锚点捕获局部坐标中可能的意图。它们都通过 k-means 算法在真实轨迹的端点上进行聚类,以缩小预测的不确定性。
与先验知识相反,起点为每个智能体提供定制的位置嵌入,预测的终点作为动态锚以粗到细的方式逐层优化。
基于自学习的非线性优化
与直接访问地面真实感知结果(即代理的位置和相应轨迹)的传统运动预测工作不同,在端到端范式中考虑了先前模块的预测不确定性。从不完美的检测位置或航向角回归地面实况航迹点,这可能会导致预测轨迹产生不合实际的较大曲率和加速度。为了解决这个问题,可以采用非线性平滑器来调整目标轨迹,并在上游模块预测的起始点不精确的情况下使它们也可以用于未来的预测。其过程是:
其中x和x*表示真实轨迹和平滑轨迹,x是通过多次观测生成的数据,相应的成本函数如下:
其中λxy和λgoal是超参数,运动学函数集Φ有5个项,包括横纵向加速度及其变化率、曲率、曲率变化率。成本函数规范目标轨迹且遵守运动学约束,这种目标轨迹优化仅在训练时进行,不影响推理。
最后,UniAD 框架中的模块学习分两个阶段。首先联合训练几个 epoch感知部分,即跟踪和映射模块,然后使用所有感知、预测和规划模块端到端地训练模型 20 个 epoch。且经验发现两阶段学习训练更稳定。由于 UniAD 涉及实例建模,因此在感知和预测任务中需要将预测与地面实况集配对。这里,需要在跟踪和在线建图阶段采用二分匹配算法。至于跟踪,来自检测查询的候选者与新生的地面实况对象配对,来自跟踪查询的预测继承了先前帧的分配。跟踪模块中的匹配结果在运动和占用节点中可以被重用,以在端到端框架中对从历史轨迹到未来运动的代理进行一致的建模。
总结
基于深度强化学习的端到端(End-to-end)的控制架构是自动驾驶领域中新兴的研究热点,它能克服传统方式依赖先验环境建模的问题,可以直接实现通过从感知到控制功能的映射。即,将transformer的思想整个贯穿于感知、预测、规划、决策的整个处理过程。
本文介绍的处理算法遵循以规划为导向的理念,拥抱自动驾驶框架的新前景,并证明有效任务协调的必要性,而不是独立设计或简单的多任务学习。并且这种UniAD作为一个利用广泛任务的综合性端到端系统,可以很好的启动关键组件,将查询设计为连接所有节点的接口。因此,本文中的UniAD 享有灵活的中间表示和交换多任务知识以进行规划。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !