本期概述
传统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
第一阶段:联合训练感知部分的模块,即TrackFormer和MapFormer,为期6个epochs。具体来说,作者加载了预训练的BEVFormer权重,包括图像骨干网络、FPN、BEV编码器和检测解码器(除了对象查询嵌入),以便快速收敛。为了减少内存成本,作者在图像骨干网络中停止梯度反向传播。第一阶段的损失函数是跟踪和在线建图损失之和
第二阶段:冻结了用于从图像视图到BEV转换的BEV编码器,以进一步减少内存消耗,并加入更多的下游模块。在这一阶段,UniAD在所有任务损失下训练,包括TrackFormer、MapFormer、MotionFormer、OccFormer和Planner,为期20个epochs(在各种消融实验中,为提高效率,训练8个epochs)
在经验上,这种两阶段的训练方式更稳定。
Experiments
UniAD的实验在nuScenes数据集上进行,实验分为三个方面来验证设计的有效性:联合结果、每个模块的独立结果、以及特定模块的消融实验。
下期预告:
CVPR 2023 Best Paper|全栈优化的自动驾驶架构!UniAD模块算法实现(2)
温馨提示:点赞=学会,收藏=精通,点击在看,我们一起充电!