端到端算法总结对比——UniAD / UAD / VAD / SparseDrive / ReasonNet / FusionAD / Hydra-MDP / DiffusionDrive
端到端算法总结对比——UniAD / UAD / VAD / SparseDrive / ReasonNet / FusionAD / Hydra-MDP / DiffusionDrive
- 端到端算法总结对比——UniAD / UAD / VAD / SparseDrive / ReasonNet / FusionAD / Hydra-MDP / DiffusionDrive
- 1. UniAD:Planning-Oriented Autonomous Driving
- 2. VAD:Vectorized Scene Representation for Efficient Autonomous Driving
- 3. UAD:End-to-End Autonomous Driving without Costly Modularization and 3D Manual Annotation
- 4. SparseDrive:End-to-End Autonomous Driving via Sparse Scene Representation
- 5. ReasonNet:End-to-End Driving with Temporal and Global Reasoning
- 6. FusionAD:Multi-modality Fusion for Prediction and Planning Tasks of Autonomous Driving
- 7. Hydra-MDP:End-to-end Multimodal Planning with Multi-target Hydra-Distillation
- 8. DiffusionDrive:Truncated Diffusion Model for End-to-End Autonomous Driving
- (补充)PNC NN化的一些方法——PlanT / DIPP / PLUTO
自动驾驶领域的端到端其实已经是2024年的主题了,但是很可惜自己没有亲身参与到这波技术演进,最近抽空看了一些去年和前年发表的工作,算是补充了下这方面的知识,下面是个人对这些方法的一些理解,如果要得到一个好的规划结果,很重要的几点是:
- 生成的轨迹需要和环境做充分的交互:关于这一点在不同的方法中实现的方式会不一样
(1)对于UniAD,用于规划自车轨迹的Ego Query会在Motion Former中和Agent Query和Map Query进行Cross Attention,并在Planner中和Occupancy进行更加细致的交互;
(2)VAD、SparseDrive和UniAD一样,在模型中会通过Cross Attention进行环境信息交互,并在Planning模块中基于矢量化环境构建了更丰富的Loss来约束轨迹,因此也就生成了更好规划结果。
(3)ReasonNet在VAD、SparseDrive基础上,进一步添加了Occupancy在时序上是预测,并将预测结果通过Consistency Loss来约束预测轨迹,使得轨迹的预测能够抗遮挡,更加安全。
(4)FusionAD则在VAD、SparseDrive的基础上,添加了轨迹和BEV Feature交互的Refinement Network,能更进一步增强环境的约束。
(5)DiffusionDrive则是在Denoise的过程中,每一步都会Condition On Env Feature,这样得到的轨迹不过后处理就能直接使用,其中很关键的一个因素就是因为充分吸收了环境感知的结果.
因此,要生成一条好的轨迹,除了要有好的环境感知能力,同时要能够将感知的结果充分吸收到轨迹生成中来,这样才能得到更加合理安全的结果。 - 生成的轨迹需要能够具备多模态属性,并且能够进行合理的轨迹选择:这个多模态属性我认为分为两部分,第一部分是不同的司机在相同的位置因此习惯不同会有不同的选择(停车 / 减速 / 加速),网络学习的不应该只是一个平均值。第二部分是如果同时生成多条轨迹,各轨迹之间不应该相同或者相似(模态坍缩),而应该是将各种可能性都反应出来,然后再进行选择
(1)在UniAD、VAD中,都是在Agent预测时考虑了多模态属性,但是在自车轨迹预测是都是单模态输出。
(2)在SparseDrive中,通过K-Means从训练数据中获取Anchor并结合指令构建可学习的多模态Motion Query,然后和Ego Instance Feature相较,共享同一个结构的MLP输出轨迹,这中间可能的问题是Motion Query各自间并没有交互,多模态信息也仅仅在初始化的时候产生影响。
(3)在FusionAD中就在SparseDrive的基础上进一步添加了Motion Query之间的Self Attention,增加模态的多样性。
(4) Hydra-MDP的做法可以理解为将轨迹规划从连续回归问题转化为离散分类问题,使模型能够在多个典型轨迹之间进行选择,从而自然地支持多模态输出。
(5)最后DiffusionDrive中使用的Diffusion Model天生地就是支持多模态输出的,这一点感兴趣的同学可以去了解下机器人领域的Diffusion Policy方法,同时DiffusionDrive为了避免模式坍缩还采取了Truncated策略,进一步保证了多模态性。
端到端算法总结对比——UniAD / UAD / VAD / SparseDrive / ReasonNet / FusionAD / Hydra-MDP / DiffusionDrive
1. UniAD:Planning-Oriented Autonomous Driving
这篇论文发表于CVPR 2023,应该是第一篇为大家所熟知的端到端方法,方法如下图所示
主要分为五个模块:
- TrackFormer:实现3D目标检测和多目标跟踪联合建模
(1)该模块输入包括BEV Feature、Detection Queries、Track Queries、Ego Query,其中Detection Queries为Learnable Queries,用于发现当前帧中新出现的3D目标;Track Queries为来自上一帧的Tracking Memory,表示当前系统已知正在跟踪的目标;
(2)将所有查询组成统一的Query Set Q = [Track Queries; Detection Queries; Ego Query],然后和BEV Feature Map进行Cross Attention,Query间做Self Attention,Decoder 层数通常为6或更多,每层输出都做监督。
(3)这里值得注意的是TrackFormer是通过软约束区分新目标和已追踪目标,新目标会自然被Detection Query捕捉,因为它与所有Track Query的匹配代价太高,匈牙利匹配自然会选择 Detection Query。
(4)TrackFormer输出的结果会用于Motion Former和Occupancy Former。 - MapFormer:对道路场景进行语义分割,
(1)0该模块基于Panoptic SegFormer框架,用于从BEV特征中提取地图语义,包括车道线、路口、隔离带等实例级目标和可通行区域、非通行区域、绿化带等区域级目标。 - MotionFormer:预测所有智能体未来多模态轨迹
(1)该模块输入包括来自TrackFormer的Agent Queries,来自MapFormer的Map Queries,以及Ego-vehicle Query。输出所有智能体未来T步的K种轨迹候选。
(2)每层顺序进行如下Agent-Agent、Agent-Map、Agent-Goal Point之间的Attention交互,然后将三次交互后的结果融合,其中Agent–Goal Point的Attention交互使用的是Deformable Attention,即每个Agent使用其终点Anchor在BEV图中采样一小块区域与Agent进行Cross Attention,提高对目标附近环境(如障碍物/其他车辆)的感知敏感度。
(3)引入了 Scene-level 和 Agent-level Anchors,Scene-level 和 Agent-level anchors 是通过聚类 Ground Truth 轨迹的终点,得到一组“常见目标点”,作为预测轨迹的先验,引导模型生成物理合理且多样的未来轨迹。其中Scene-level为整个训练集中所有轨迹终点的聚类中心,表示全局偏好目标点(例如道路尽头、交叉口),Agent-level Anchor每个具体Agent历史轨迹终点的聚类,表示局部偏好(例如车辆当前朝向方向)。
(4)引入了Non-linear Trajectory Optimization辅助训练,将 Ground Truth 平滑处理以考虑 Kinematic 可实现性。 - OccFormer:预测未来场景中各 BEV 网格格子的占用状态,生成 Instance-level Occupancy Map
(1)输入为来自MotionFormer的Motion Queries以及来自BEV Encoder的BEV Feature。
(2)占用预测(Occupancy Prediction)是按照时间顺序,一帧一帧地预测的 —— 即对未来每一个时间步(t = 1, 2, …, To)分别输出一个 BEV 空间中的占用图。
(3)每一层进行Pixel-Agent的Cross Attention,其中Agent通过MLP融合了Agent Query、位置信息 、Motion Query。BEV网格作为Query,Agent特征为Key/Value,并且Cross Attention时作者不允许每个像素Attend所有Agent,BEV特征只能Attend它所“属于”的那个Agent 的特征,而这个“属于”关系是通过Motion Trajectory知道第t帧时Agent的位置,也就可以在BEV图中标记哪些格子是Agent的预测位置。 - Planner:根据多任务输出 + 高层导航信号,预测安全轨迹(Waypoints)并避免碰撞
(1)使用MotionFormer的Ego Query和命令指令Embedding(左转/右转/直行)形成Plan Query;
(2)Plan Query与BEV Feature做Attention,输出初步轨迹;
(3)使用高斯牛顿法进一步调整轨迹避免障碍,优化目标平衡轨迹相似度与碰撞距离,其中碰撞距离通过OccFormer的合并占用图预测碰撞区域预测。优化结果为最终轨迹。
如下是各个模块交互的总结
| 模块 | 输入 Query | 输出 Query | 下游使用位置 |
|---|---|---|---|
| TrackFormer | Detection / Track Queries | Agent Queries | MotionFormer, OccFormer |
| MapFormer | Map Queries | Map Queries | MotionFormer |
| MotionFormer | Agent Queries / Map Queries / Ego Query | Motion Queries | OccFormer, Planner |
| OccFormer | Motion Queries / Agent Queries | 占用图预测 | Planner(避障优化) |
| Planner | Ego Query + 导航命令 | 轨迹点 | 最终预测结果 |
在UniAD的论文中做了充分的对比实验和消融实验,具体的就不在此赘述,总之就是通过端到端的方式不管是从最终的规划轨迹的安全性还是各个子模块的性能都有明显提升。
2. VAD:Vectorized Scene Representation for Efficient Autonomous Driving
该论文发表于ICCV 2023,传统自动驾驶方法多依赖于栅格化的场景表示(如语义图、占用图、流图、代价图),虽然直观,但计算开销大、缺乏实例级结构信息。该论文提出一种全向量化的表示方式。方法如下图所示:
主要分为四个模块:
- Backbone & BEV Encoder
(1)输入为多帧、多视角图像输入(共6个摄像头,覆盖360°视野),每帧图像通过CNN提取局部特征,利用BEV queries 和 Deformable Attention(借鉴BEVFormer)将图像特征转换为统一空间的BEV特征图,统一尺度、空间语义表达,有利于下游模块对不同视角图像信息融合 - Vectorized Scene Learning
(1)Vectorized Map Learning:使用 Map Queries(如MapTR方法)提取3类地图元素:Lane Divider(车道线,含方向信息)、Road Boundary(路沿)、Pedestrian Crossing(人行横道)。每个Map Query输出一个Map Vector V ^ m ∈ R N m × N p × 2 V̂_m ∈ R^{N_m×N_p×2} V^m∈RNm×Np×2,表示一个由 N p N_p Np个点构成的折线段,同时预测每个Vector的类别概率。
(2)Vectorized Agent Motion:Agent Queries从BEV特征图中提取目标的属性,预测未来3秒的轨迹 V ^ a ∈ R N a × N k × T f × 2 V̂_a ∈ R^{N_a × N_k × T_f × 2} V^a∈RNa×Nk×Tf×2,其中 N a N_a Na为预测目标数量, N k N_k Nk为每个目标的多种运动模式(Modality), T f T_f Tf预测的时间步,使用 Agent-Agent 和 Agent-Map attention 实现目标之间及目标与地图之间的交互建模。 - Planning via Query Interaction
(1) Ego Query交互机制:初始化一个Ego Query表征自车,Ego Query与Agent Queries进行Attention Interaction,获取周围动态目标意图,再与Map Queries交互,获取静态地图结构信息;
(2)Planning Head:输入为更新后的 Ego Query(包含动态+静态场景理解),自车状态(可选输入),高层导航指令(左转 / 右转 / 直行),输出为自车未来轨迹 V ^ e g o ∈ R T f × 2 V̂_{ego} ∈ R^{T_f×2} V^ego∈RTf×2( T f T_f Tf为预测时间步) - Vectorized Planning Constraint:这些约束仅在训练阶段起作用,用于提升规划轨迹的安全性和合理性
(1)Ego-Agent Collision Constraint:依据预测的其他目标轨迹,定义自车在纵向和横向的安全距离 ( δ X , δ Y ) (δ_X, δ_Y) (δX,δY),约束公式为若任一时刻距离小于阈值则加入惩罚项 L c o l \mathcal{L}_{\mathrm{col}} Lcol;
(2)Ego-Boundary Overstepping Constraint:检查自车轨迹与地图边界的最小距离,小于1m则产生惩罚项 L b d \mathcal{L}_{\mathrm{bd}} Lbd,防止越界或压线;
(3)Ego-Lane Directional Constraint:比较自车运动方向与最近车道线方向的夹角,平均角度差异越小,损失 L d i r \mathcal{L}_{\mathrm{dir}} Ldir越低(更符合道路行驶规律)
总的损失函数为: L = ω 1 L map + ω 2 L motion + ω 3 L c o l + ω 4 L b d + ω 5 L d i r + ω 6 L i m i \mathcal{L}=\omega_1 \mathcal{L}_{\text {map }}+\omega_2 \mathcal{L}_{\text {motion }}+\omega_3 \mathcal{L}_{\mathrm{col}}+\omega_4 \mathcal{L}_{\mathrm{bd}}+\omega_5 \mathcal{L}_{\mathrm{dir}}+\omega_6 \mathcal{L}_{\mathrm{imi}} L=ω1Lmap +ω2Lmotion +ω3Lcol+ω4Lbd+ω5Ldir+ω6Limi其中 L map \mathcal{L}_{\text {map }} Lmap 为地图向量回归和分类损失, L motion \mathcal{L}_{\text {motion }} Lmotion 为目标属性和多模轨迹预测损失, L c o l \mathcal{L}_{\mathrm{col}} Lcol、 L b d \mathcal{L}_{\mathrm{bd}} Lbd、 L d i r \mathcal{L}_{\mathrm{dir}} Ldir为三种向量化规划约束, L i m i \mathcal{L}_{\mathrm{imi}} Limi模仿学习损失,引导生成专家级轨迹,在轨迹规划模块中计算。
在实验结果上,VAD在精度和速度上均大幅超越现有方法。
在消融实验中比较重点的结论有:
- 使用向量化表示比栅格化显著降低碰撞率;(0.39% → 0.22%)
- 三个向量化约束都对提升安全性和准确性有贡献
- 规划模块仅占总推理时间的5.7%,推理极快(VAD-Tiny: 3.4ms)
3. UAD:End-to-End Autonomous Driving without Costly Modularization and 3D Manual Annotation
UAD发表于2024年6月,其核心目标是在不依赖3D人工标注和复杂模块化设计的前提下,实现高性能的自动驾驶系统,方法如下图所示:
主要分为两个模块:
- Angular Perception Pretext:这个模块旨在在没有3D标注的情况下模拟感知子任务,以实现高效环境建模。
(1)BEV特征生成:使用多视角图像输入,通过BEV Encoder(例如BEVFormer)提取空间特征
(2)角度划分:将BEV空间围绕Ego车以固定角度(如4°)划分成K个扇区,每个扇区提取的特征称为 Angular BEV Feature。
(3)伪标签生成:使用 GroundingDINO(一种支持开放词汇检测的2D目标检测器)检测2D图像中如“vehicle”、“pedestrian”等物体,得到2D框。将这些框投影到BEV空间,生成 BEV Object Mask,进而统计哪些扇区落在Mask区域中,形成目标扇区的“objectness”伪标签。
(4)Objectness预测与训练:每个扇区分配一个 Angular Query,通过Cross-Attention与扇区内特征交互,生成每个扇区的objectness分数,和伪标签计算Binary Cross Entropy Loss L spat \mathcal{L}_{\text {spat }} Lspat
(5)为了让模型具备对未来的预测能力,UAD设计了一个自动回归(auto-regressive)的Decoder,学习每个扇区的动态变化,输入为每个扇区的当前状态Query Q a t Q^t_a Qat和BEV特征 F a t F_a^t Fat,使用GRU(门控循环单元)不断迭代更新隐藏状态,以模拟未来状态预测过程: Q a t = GRU ( Q a t − 1 , F a t ) Q_a^t=\operatorname{GRU}\left(Q_a^{t-1}, F_a^t\right) Qat=GRU(Qat−1,Fat)对预测的下一步状态再进行一个Cross-Attention生成伪观察 F ^ a t + 1 = CrossAttention ( F a t , Q a t ) \hat{F}_a^{t+1}=\operatorname{CrossAttention}\left(F_a^t, Q_a^t\right) F^at+1=CrossAttention(Fat,Qat)再次输入GRU更新 Q a t + 1 Q^{t+1}_a Qat+1,最后计算两个分布(当前状态的后验分布与上一步状态的先验分布)之间的KL散度 L d r m = KL ( { μ a t , σ a t } ∥ { μ a t − 1 , σ a t − 1 } ) \mathcal{L}_{\mathrm{drm}}=\operatorname{KL}\left(\left\{\mu_{\mathrm{a}}^t, \sigma_{\mathrm{a}}^t\right\} \|\left\{\mu_{\mathrm{a}}^{t-1}, \sigma_{\mathrm{a}}^{t-1}\right\}\right) Ldrm=KL({ μat,σat}∥{ μat−1,σat−1}) - Direction-Aware Planning:该模块负责从BEV特征中生成驾驶轨迹,重点提升转向类场景中的规划鲁棒性。
(1)轨迹预测:初始化T个 Ego Queries,分别对应未来T步,Ego Query通过Cross-Attention与Angular Query交互获取规划信息,联合高层驾驶命令(左转、右转、直行)作为输入预测轨迹(和UniAD一致) 与Ground-truth Trajectory计算L1 Imitation Loss L i m i \mathcal{L}_{\mathrm{imi}} Limi。
(2)方向增强:将BEV特征旋转不同角度(90°、180°、270°),构造数据增强版本,同时旋转Ground-truth轨迹与BEV Mask,保持标签一致。训练中用这些增强视角共同训练模型,扩大数据多样性。
(3)一致性训练(Directional Consistency Loss):对每个方向增强版本预测的轨迹,反向旋转回原角度,与主视角预测进行对齐,计算L1 loss作为一致性损失 L dir \mathcal{L}_{\text {dir }} Ldir ,鼓励模型不同角度下预测结果保持一致。
(4)方向预测辅助任务(Direction Classification):对每个预测轨迹,根据其x轴偏移自动生成方向标签(左/右/直),从Ego Query中提取方向预测,计算交叉熵损失 L cons \mathcal{L}_{\text {cons }} Lcons 。
因此总的损失函数为 L = ω 1 L spat + ω 2 L drm + ω 3 L imi + ω 4 L dir + ω 5 L cons \mathcal{L}=\omega_1 \mathcal{L}_{\text {spat }}+\omega_2 \mathcal{L}_{\text {drm }}+\omega_3 \mathcal{L}_{\text {imi }}+\omega_4 \mathcal{L}_{\text {dir }}+\omega_5 \mathcal{L}_{\text {cons }} L=ω1Lspat +ω2Ldrm +ω3Limi +ω4Ldir +ω5Lcons
在最后的效果上在Open-loop 评估(nuScenes)中比UniAD提升38.7%碰撞率,在 Closed-loop 评估(CARLA Town05 Long)中UAD取得71.63%的驾驶评分,比VAD提升41.32分。
4. SparseDrive:End-to-End Autonomous Driving via Sparse Scene Representation
SparseDrive发表于2024年5月,提出了一种新的端到端自动驾驶框架,其核心思想是用稀疏表示替代传统密集 BEV 表征,并统一建模感知、预测和规划任务,方法如下图所示:
核心有两个模块:
- Parallel Motion Planner
(1)作者观察到Motion Prediction与Motion Planning的三点相似性:都需要建模交通参与者之间的高阶交互,都依赖语义+几何信息,都具有多模态不确定性
(2)Ego车辆初始化:特征的初始化由于Ego位于车体中心图像盲区,无法直接用Deformable Attention提取图像特征,所以采用前视图最小特征图做平均池化,使用前视图是因为前视图能看到即将进入驾驶路径的环境,是最相关的上下文信息源。Anchor的初始化中位置信息从车辆状态获知,速度部分避免直接使用真实值(防止泄露标签),通过预测前一帧的速度进行初始化,辅助任务预测当前Ego状态(速度、加速度、转向角等)。
(3)空间-时间交互:将 Ego 和其他车辆实例合并,然后执行 3 种交互注意力操作:Agent-Temporal Cross Attention、Agent-Agent Self Attention、Agent-Map Cross Attention
(4)多模态轨迹预测:预测轨迹结果为 τ m ∈ R N d × K m × T m × 2 τ_m ∈ ℝ^{N_d×K_m×T_m×2} τm∈RNd×Km×Tm×2, 轨迹预测得分为 s m ∈ R N d × K m s_m ∈ ℝ^{N_d×K_m} sm∈RNd×Km,自车规划结果得分为 τ p ∈ R N c m d × K p × T p × 2 τ_p ∈ ℝ^{N_{cmd}×K_p×T_p×2} τp∈RNcmd×Kp×Tp×2,自车规划轨迹得分为 s p ∈ R N c m d × K p s_p ∈ ℝ^{N_{cmd}×K_p} sp∈RNcmd×Kp,其中 K m 、 K p K_m、K_p Km、Kp为预测/规划模式数(如:直行、左转、右转,论文中值为6), T m 、 T p T_m、T_p Tm、Tp未来时间步数,论文中值为6, N c m d = 3 N_{cmd}=3 Ncmd=3为驾驶指令个数(左转、右转、直行)
(5) 分层规划轨迹选择:第一步根据高阶驾驶指令筛选子集轨迹,第二部利用预测到的其他实体轨迹,评估Ego与之是否会碰撞,对高碰撞风险轨迹降分甚至置0,第三步选择最高分轨迹作为最终输出,相比 UniAD 的后处理优化方式,作者证明该方式更安全,且保持端到端结构闭环。
Symmetric Sparse Perception
(1)该模块统一实现三个任务:动态目标检测、多目标跟踪、在线地图构建,结构如下图所示
(2)来自多视角图像经过Encoder编码后的多尺度图像特征图。对于动态目标定义Anchor为 B d ∈ R N d × 11 B_d ∈ ℝ^{N_d×11} Bd∈RNd×11,包括 x , y , z , l o g ( w ) , l o g ( h ) , l o g ( l ) , s i n ( y a w ) , c o s ( y a w ) , v x , v y , v z {x, y, z, log(w), log(h), log(l), sin(yaw), cos(yaw), v_x, v_y, v_z} x,y,z,log(w),log(h),log(l),sin(yaw),cos(yaw),vx,vy,vz。 对于地图元素定义Anchor为 L m ∈ R N m × N p × 2 L_m ∈ ℝ^{N_m×N_p×2} Lm∈RNm×Np×2,表示 N p N_p Np个点组成的折线,每个Anchor通过K-Means对训练集聚类进行初始化。在Decoder中,通过Deformable Attention在特定空间位置采样图像特征,得到该Anchor对应的实例特征向量,经过通过一个MLP回归出相对于Anchor各个维度的Offset对Anchor进行更新。在Temporal Decoder中还对实例特征向量增加了不同帧之间的Temporal Cross-Attention以及当前帧的Self-Attention。
(3)对于Tracking部分,采用类似Sparse4Dv3的方法,不引入额外Tracking损失,若检测得分超过阈值(T_thresh=0.2),赋予唯一 ID 并在后续帧中保留,依靠特征的一致性完成Tracking,避免复杂的数据关联逻辑,具体而言就是在Temporal Decoder 会将前一帧的实例特征(带有 ID)传播到当前帧,因为这些特征带有语义与空间信息,Transformer的Temporal Cross-Attention能够学习哪个当前帧实例与哪个历史帧实例最相似,从而将历史 ID 传递到当前帧的相应实例上,不需要IOU匹配、不需要手工关联策略,只靠Attention中Learnable特征的相似性实现Tracking。
整个模型的损失函数为: L = L det + L map + L motion + L plan + L depth . \mathcal{L}=\mathcal{L}_{\text {det }}+\mathcal{L}_{\text {map }}+\mathcal{L}_{\text {motion }}+\mathcal{L}_{\text {plan }}+\mathcal{L}_{\text {depth }} . L=Ldet +Lmap +Lmotion