高度提炼|自动驾驶算法船新框架?CVPR 2023 Best PaperUniAD框架解析(1)

文摘   2024-07-21 03:16   上海  

https://github.com/OpenDriveLab/UniAD

本期概述

传统Rule_Based自动驾驶系统的特点是按顺序排列的模块化任务,即感知预测规划。这种串联的设计不可避免地造成数据的丢失污染。UniAD作为端到端自动驾驶的开山级研究,将全栈驾驶任务整合到一个端到端的网络中。其实目前很多企业的端到端自动驾驶方案都基于UniAD进行二次开发,本期李小毛将带领大家重温这篇经典开山之作!

Pipeline

UniAD的Pipeline是按照以规划为导向的理念精心设计的。与简单的任务堆叠不同,我们深入研究了感知和预测各模块的效果,利用前序节点到最终规划的联合优化优势,优化驾驶场景中的整体表现。所有的感知和预测模块均设计在变压器解码器结构中,并通过任务查询作为接口连接各个节点。最后,一个简单的基于注意力机制的规划器预测自车(Ego-Vehicle)的未来路径点,考虑从前序节点提取的知识。占用图仅用于视觉展示目的。

UniAD框架包括五个关键模块:感知(检测和跟踪)、地图构建、运动预测、占用预测和规划。这些模块通过变压器解码器结构设计,并使用任务查询作为连接各节点的接口。

1. 感知模块(TrackFormer 和 MapFormer)

  • TrackFormer: 负责检测和多目标跟踪。将检测查询(Detection Queries)和跟踪查询(Tracking Queries)结合起来,前者用于检测新出现的目标,后者用于跟踪已经检测到的目标。

    具体实现:在每个时间步,初始化的检测查询负责检测新出现的agent,而跟踪查询则持续建模先前检测到的agent。通过自注意力模块,当前帧的跟踪查询与之前记录的查询进行交互,以聚合时序信息,直到相应的agent完全消失。TrackFormer包含多层结构,其最终输出状态为下游预测任务提供有效agent的信息。

    输入:来自多摄像头的图像。

    下游:MotionFormer 和 OccFormer,用于预测agent的未来运动轨迹和占用情况。

  • MapFormer: 负责车端局部建图。基于2D全景分割方法,对车道线、分隔线和道路交叉口进行语义抽象,进而帮助下游的运动预测。

    具体实现:对于驾驶场景和可驾驶区域分别进行编码,包含N个堆叠层,每一层的输出结果都受到监督,而只有最后一层的更新查询(QM)会被传递到MotionFormer进行agent-map交互

    输入:多摄像头图像和BEV(Bird's Eye View)特征。

    下游:MotionFormer,用于辅助预测模块进行精确的运动预测。


2. 运动预测模块(MotionFormer)

  • MotionFormer:负责agent运动预测。通过捕捉动态agent和静态地图元素的相互作用,预测所有agent的未来运动轨迹。该模块通过场景为中心的范式,节省计算成本并提高预测精度。

    具体实现:其结构包含多层交互模块:智能体-智能体、智能体-地图和智能体-目标点交互。每个运动查询(motion query)由前一层生成的查询上下文(query context)和位置查询(query position)组成,通过多头自注意力(MHSA)和多头交叉注意力(MHCA)机制处理其他智能体和地图元素的信息。此外,利用变形注意力(Deformable Attention)机制关注智能体的目标点,对预测轨迹进行进一步优化。最终,经过这些层的逐步优化,MotionFormer能够生成场景中所有智能体的多模态未来轨迹,有效地节省了计算成本,并考虑了未来的动态交互

    下游:Planner,用于运动规划。


3. 占用预测模块(OccFormer)

  • OccFormer:负责构建占用网格。利用鸟瞰视角(BEV)特征作为查询,结合agent的运动先验,预测多步未来帧的占用情况,确保自车在规划过程中避开可能的碰撞区域。

    具体实现:OccFormer模块利用自注意力机制和交叉注意力机制,结合像素级和agent级特征,生成未来的占据表示。在此过程中,场景特征被进一步下采样以减少计算开销,而agent特征则通过轨迹查询、位置查询和运动查询进行融合,并通过时序特定的多层感知器(MLP)进行处理。最后,结合生成的特征,通过矩阵乘法生成实例级占据网格,并通过上采样还原到原始分辨率,以保证预测的准确性和稳定性

    下游:Planner,用于运动规划。


4. 规划模块(Planner)

  • Planner:规划模块利用MotionFormer提取的自车查询,预测未来的行驶路径,并确保避开OccFormer预测的占用区域,保证行驶安全。

    具体实现首先通过将自车查询与导航命令嵌入相结合来形成“规划查询”。这些导航命令由转向信号(例如左转、右转、直行)转换而成,用于引导车辆的运动。然后,规划查询与鸟瞰视角(BEV,Bird’s Eye View)特征交互,通过transformer解码层交叉注意来融合环境信息。接着,通过多层感知器(MLP)层回归规划轨迹,生成车辆未来的行驶路径。为了确保安全并避免碰撞,使用牛顿法对预测轨迹进行优化,确保其能够避开障碍物并有效遵循规划路径。碰撞优化函数考虑了障碍物距离等因素,确保最终生成的轨迹既可行又安全。

Learning

第一阶段:联合训练感知部分的模块,即TrackFormerMapFormer,为期6个epochs。具体来说,作者加载了预训练的BEVFormer权重,包括图像骨干网络、FPN、BEV编码器和检测解码器(除了对象查询嵌入),以便快速收敛。为了减少内存成本,作者在图像骨干网络中停止梯度反向传播。第一阶段的损失函数是跟踪和在线建图损失之和

第二阶段:冻结了用于从图像视图到BEV转换的BEV编码器,以进一步减少内存消耗,并加入更多的下游模块。在这一阶段,UniAD在所有任务损失下训练,包括TrackFormerMapFormerMotionFormerOccFormerPlanner,为期20个epochs(在各种消融实验中,为提高效率,训练8个epochs)

在经验上,这种两阶段的训练方式更稳定。

Experiments

UniAD的实验在nuScenes数据集上进行,实验分为三个方面来验证设计的有效性:联合结果、每个模块的独立结果、以及特定模块的消融实验。

下期预告:

CVPR 2023 Best Paper|全栈优化的自动驾驶架构!UniAD模块算法实现(2)

温馨提示:=学会收藏=,点击在看,我们一起充电!

端到端自动驾驶
关注AD(Autonomous Driving)行业最前沿的人工智能解决方案,致力于打造为一个自动驾驶从业者及相关科研学者们的课外充电,技术分享,以及社区交流的服务平台!
 最新文章