Introduction

image-20241202120542026

这篇文章刷新了端到端自动驾驶领域的sota (2023)。

traditional autonomous driving methods采用模块化模式,其中感知和规划被解耦为独立的模块。其缺点是规划模块无法访问原始传感器数据,这些数据包含丰富的语义信息。由于规划完全基于先前的感知结果,因此在规划阶段,感知中的误差可能会严重影响规划, 无法被识别和纠正,从而导致安全问题。而端到端自动驾驶方法(end-to-end autonomous driving methods)将传感器数据作为感知的输入,并通过一个整体模型输出规划结果。

这篇文章提出了Vectorized Scene Representation for Efficient Autonomous Driving(VAD),即将所有的驾驶场景建模为矢量表示,一方面,VAD利用矢量化的智能体运动和映射元素作为明确的实例级规划约束,有效地提高了规划安全性;另一方面,VAD通过摆脱计算密集型的栅格化表示和手工设计的后处理步骤,比以前的端到端规划方法运行得快得多。具体来说,VAD-Base, 大大降低平均碰撞率29.0%,运行速度提高2.5倍;此外一个轻量级变种VAD-Tiny, 大大提高推理速度(高达9.3倍),同时实现相当的规划性能。

motivation and contribution

端到端自动驾驶领域中的一些工作直接输出planning 而不学习场景表示,这样解释性和可优化性会比较差,而大多数工作将 sensor数据转化为栅格化场景表示(自动驾驶系统常常使用图像、深度图、语义分割图等方式来对环境进行建模和理解,光栅化的结果通常是一个离散的网格,描述了每个像素对应的空间信息),但是这种表示是计算密集型的,并且缺少实例级别的结构信息,这篇文章提出的VAD完全抛弃了这种光栅化操作,而采用矢量图表示场景。下图展示了,光栅化和矢量化的场景表示:

image-20241127174540572

矢量化的场景表示的优势在于:

  1. 计算开销小
  2. 包含更多道路结构和实例级信息(例如,车流向量,车道边界向量,车道方向,交通参与者的运动向量等)

这篇文章还提出了并使用query interaction 和 vectorized planning constraints,来提高规划的安全性。

Method

image-20241127180344764

在给定多帧多视图图像输入的情况下

  1. 首先,VAD首先使用骨干网络对图像特征进行编码,并利用一组BEV queries将图像特征投影到BEV特征上。
  2. 其次,VAD 利用一组 agent queries 和 map queries 来学习矢量化场景表示,包括vectorized map 和vectorized agent motion。
  3. 然后,根据场景信息进行规划。

Vectorized Scene Learning

场景的矢量化表示 包括两个方面:地图的矢量化和agent运动的矢量化。

Vectorized Map

image-20241127181852766

VAD利用一组map queries QmQ_m从BEV特征地图中提取地图信息,并预测地图向量V^mRNm×Np×2\hat{V}_m\in \mathbb{R}^{N_m\times N_p\times2}和每个地图向量的分类分数,其中NmN_mNpN_p表示预测的地图向量个数和每个地图向量中包含的点。这里考虑了三种地图元素:车道分隔线、道路边界和人行横道。车道分割线提供方向信息,道路边界指示可行驶区域。

Vectorized Agent Motion

image-20241127182204919

VAD首先采用一组 agent queries QaQ_a,通过deformable attention从共享的BEV特征映射中学习agent级特征。 代理的属性(位置、类分数、方向等) 由基于mlp的解码器头从代理查询中解码。为了丰富运动预测的agent特征,VAD通过注意机制进行agent-agent和agent-map交互。然后VAD预测每个智能体的未来轨迹,表示为多模态运动向量V^aRNa×Nk×Tf×2\hat{V}_a\in \mathbb{R}^{N_a\times N_k\times T_f \times 2}NaN_a, NkN_k,和TfT_f表示预测代理的数量、模态的数量和未来时间戳的数量。运动矢量的每一种模态表示一种驾驶意图。VAD输出每个模态的概率分数。

Planning via Interaction

image-20241127182955177

Ego-Agent Interaction

VAD利用随机初始化的自我查询QegoQ_{ego}来学习隐含的场景特征,这些特征对规划有价值。为了学习其他动态交通参与者的位置和运动信息,自我查询与agent query 通过Transformer decoder来得到交互后的自我查询QegoQ'_{ego},具体表示为:

Qego=TransformerDecoder(q,k,v,qpos,kpos),q=Qego,k=v=Qa,qpos=PE1(pego),kpos=PE1(pa).\begin{array}{l} Q_{\text{ego}}^{\prime}=\text{TransformerDecoder}\left(q, k, v, q_{\text{pos}}, k_{\text{pos}}\right), \\ q=Q_{\text{ego}}, \, k=v=Q_{a}, \\ q_{\text{pos}}=\text{PE}_{1}\left(p_{\text{ego}}\right), \, k_{\text{pos}}=\text{PE}_{1}\left(p_{a}\right). \end{array}

其中pegop_{ego}pap_a表示自我的位置和其它agent的位置,而PE1PE_1表示单层MLP。

Ego-Map Interaction

QegoQ'_{ego}还需要以类似的方式进一步与map query QmQ_m交互。唯一的区别是我们使用不同的MLP PE2来编码自我车辆和地图元素的位置。

Qego=TransformerDecoder(q,k,v,qpos,kpos),q=Qego,k=v=Qm,qpos=PE2(pego),kpos=PE2(pm).\begin{array}{l} Q_{\text{ego}}^{\prime\prime}=\text{TransformerDecoder}(q, k, v, q_{\text{pos}}, k_{\text{pos}}), \\ q=Q_{\text{ego}}^{\prime}, \, k=v=Q_{m}, \\ q_{\text{pos}}=\text{PE}_{2}\left(p_{\text{ego}}\right), \, k_{\text{pos}}=\text{PE}_{2}\left(p_{m}\right). \end{array}

这样更新后的QegoQ''_{ego}就同时拥有动态信息和静态信息了。

Planning Head

由于VAD执行无hd地图规划,因此需要高级驾驶命令c进行导航。按照惯例,VAD使用三种驾驶指令:左转、右转和直行。因此,规划头将更新后的自我查询(QegoQ ' _{ego}, QegoQ ''_{ego})和自我车辆的自我当前状态segos_{ego}(可选)作为自我特征fegof_{ego},并将驾驶命令c作为输入,输出规划轨迹V^egoRTf×2\hat{V}_{ego}\in \mathbb{R}^{T_f\times 2}。VAD采用简单的基于mlp的规划头。

V^ego=PlanHead(ft=fego,cmd=c),fego=[Qego,Qego,sego].\begin{array}{l} \hat{V}_{ego}=\text{PlanHead}\left(f_t=f_{ego}, cmd=c\right), \\ f_{ego}=\left[Q_{ego}^{\prime}, Q_{ego}^{\prime\prime}, s_{ego}\right]. \end{array}

其中[,][,]表示连接操作

Vectorized Planning Constraint

image-20241127184739301

Ego-Agent Collision Constraint

ego-agent碰撞约束明确考虑了自我规划轨迹与其他车辆未来轨迹的兼容性,以提高规划安全性和避免碰撞。具体来说,我们首先通过阈值ϵa\epsilon _a过滤掉低置信度的代理预测。对于多模态运动预测,我们使用置信度得分最高的轨迹作为最终预测。我们考虑碰撞约束作为车辆横向和纵向的安全边界。在横向上,多辆车可能彼此靠近(例如并排行驶),但在纵向上,需要更长的安全距离。因此我们对不同方向采用不同的agent距离阈值δX\delta_XδY\delta_Y。对于每个未来的时间戳,我们在两个方向上都找到在一定范围δa\delta_a内的最接近的代理。则对于每个方向i{X,Y}i\in\{X,Y\},如果与最近代理的距离daitd_a^{it}小于阈值δi\delta_i,则该约束的损失项为δidait\delta_i - d_a^{i t},否则为0。ego-agent碰撞约束的损失可表示为:

Lcol=1Tft=1TfiLcolit,i{X,Y},Lcolit={δidait,if dait<δi0,if daitδi.\mathcal{L}_{\text{col}} = \frac{1}{T_f} \sum_{t=1}^{T_f} \sum_{i} \mathcal{L}_{\text{col}}^{i t}, \, i \in \{X, Y\},\\ \mathcal{L}_{\text{col}}^{i t} = \begin{cases} \delta_i - d_a^{i t}, & \text{if } d_a^{i t} < \delta_i \\ 0, & \text{if } d_a^{i t} \geq \delta_i. \end{cases}

Ego-Boundary Overstepping Constraint

此约束旨在将规划轨迹推离道路边界,使其保持在可行驶区域内。我们首先根据阈值ϵm\epsilon _m过滤掉低置信度的地图预测。然后,对于每个未来的时间戳,我们计算规划航路点与其最近的地图边界线之间的距离dbdtd_{bd}^t。则此约束的损失表示为:

Lbd=1Tft=1TfLbdt,Lbdt={δbddbdt,if dbdt<δbd,0,if dbdtδbd,\mathcal{L}_{bd}=\frac{1}{T_{f}}\sum_{t=1}^{T_{f}}\mathcal{L}_{bd}^{t},\\ \mathcal{L}_{bd}^{t}=\left\{ \begin{array}{ll} \delta_{bd} - d_{bd}^{t}, & \text{if } d_{bd}^{t} < \delta_{bd}, \\ 0, & \text{if } d_{bd}^{t} \geq \delta_{bd}, \end{array} \right.

Ego-Lane Directional Constraint

自我车道方向约束来源于车辆的运动方向应与车辆所在车道方向一致的先验条件。方向约束利用矢量化车道方向来正则化规划轨迹的运动方向。具体来说,首先,我们根据ϵm\epsilon_m过滤掉低置信度的地图预测。然后,我们从每个未来时间戳的规划航路点找到最近的车道分隔向量v^mRTf×2×2\hat{v}_m\in \mathbb{R}^{T_f\times 2\times 2}(在一定范围内δdir\delta_{dir})。最后,这个约束的损失是角差随时间的平均值:

Ldir=1Tft=1TfFang(v^mt,v^egot),\mathcal{L}_{\text{dir}} = \frac{1}{T_f} \sum_{t=1}^{T_f} \text{F}_{\text{ang}}(\hat{v}_m^t, \hat{v}_{\text{ego}}^t),

v^egoRTf×2×2\hat{v}_{\text{ego}} \in \mathbb{R}^{T_f \times 2 \times 2} 是本车的规划路径. v^egot\hat{v}_{\text{ego}}^{t}表示路径中在时间戳t-1的点到时间戳t的向量。Fang(,)F_{ang}(,)表示角度差异。

Loss function

除了Vectorized Planning Constraint,还有其它约束,环境矢量化约束和模仿学习约束

L=ω1Lmap+ω2Lmot+ω3Lcol+ω4Lbd+ω5Ldir+ω6Limi.\mathcal{L} = \omega_1 \mathcal{L}_{\text{map}} + \omega_2 \mathcal{L}_{\text{mot}} + \omega_3 \mathcal{L}_{\text{col}} + \omega_4 \mathcal{L}_{\text{bd}} + \omega_5 \mathcal{L}_{\text{dir}} + \omega_6 \mathcal{L}_{\text{imi}}.

Vectorized Scene Learning Loss.

向量化场景学习包括vectorized map learning 和 vectorized motion prediction。对于vectorized map learning ,采用曼哈顿距离计算预测地图点与地面真值地图点之间的回归损失。此外,使用focal loss作为地图分类损失。总的映射损失记为Lmap\mathcal{L}_{map}

对于vectorized motion prediction,我们使用l1l_1损失作为回归损失来预测智能体属性(位置、方向、大小等),使用focal loss来预测智能体类别。对于每个与ground truth agent匹配的agent,我们预测了NkN_k个未来的轨迹,并使用具有最小最终位移误差(minFDE)的轨迹作为代表性预测。然后我们计算该代表性轨迹与地面真实轨迹之间的l1l_1损失作为运动回归损失。采用focal loss作为多模态运动分类损失。整体运动预测损失记为Lmot\mathcal{L}_{mot}

Imitation Learning Loss.

模仿学习损失Limi\mathcal{L}_{imi}是规划轨迹V^ego\hat{V}_{ego}与ground truth自我轨迹VegoV_{ego}之间的l1l_1损失:

Limi=1Tft=1TfVegotV^egot1.\mathcal{L}_{\text{imi}} = \frac{1}{T_f} \sum_{t=1}^{T_f} \| V_{\text{ego}}^t - \hat{V}_{\text{ego}}^t \|_1.

实验结果

Setting

在公开nuScenes数据集上进行实验,该数据集包含1000个驾驶场景,每个场景大约持续20秒。本文采用位移误差(DE)和碰撞率(CR)来综合评价规划绩效。对于闭环设置,我们采用CARLA模拟器和Town05 benchmark 进行仿真。根据之前的工作,我们使用Route Completion (RC)和Driving Score (DS)来评估规划性能。

VAD使用2秒的历史信息并计划3秒的未来轨迹。默认采用ResNet50为编码图像特征的backbone。VAD在纵向和横向60m × 30m的感知范围内进行矢量化映射和运动预测。VAD有两种变体,分别是VAD- tiny和VAD- base。VAD-Base是实验的默认模型。VAD-tiny的规模小一些但是推断速度很快,并且路径安全性落后不大。其余超参数设定在paper中。

关于闭环估计的设定:VAD-Base进行闭环评估。输入图像尺寸为640 × 320。根据前人的研究,导航信息包括稀疏目标位置和相应的离散导航命令。该导航信息由MLP编码,并作为输入特征之一发送到规划头。此外,我们还增加了一个红绿灯分类分支来识别交通信号。具体来说,它由一个Resnet50网络和一个基于mlp的分类头组成。该分支的输入是与图像中上部分相对应的裁剪后的前视图图像。将图像特征映射平面化后发送到规划头,帮助模型实现红绿灯信息。

Open-loop/Closed-loop planning results.

image-20241127204202116

在Open-loop对比时:与SOTA方法相比,VAD在性能和速度上都有很大的优势。一方面,VAD-Tiny和VAD-Base大大降低了平均规划位移误差0.25m和0.31m。同时,VAD-Base大大降低了平均碰撞率29.0%。另一方面,由于VAD不需要许多辅助任务(如跟踪和占用预测)和繁琐的后处理步骤,因此基于矢量化场景表示的VAD实现了最快的推理速度。VAD-Tiny运行速度快9.3倍,同时保持相当的规划速度。VAD-Base实现了最佳的规划性能,运行速度仍然快2.5倍。值得注意的是,在主要结果中,VAD省略了自我状态特征以避免开环规划中的捷径学习,但使用自我状态特征的VAD。

在Closed-loop对比时:在Town05 Short基准测试上,VAD优于以前的SOTA纯视觉端到端规划方法。与ST-P3相比,VAD的DS提高了9.15,RC也更好。在Town05 Long基准上,VAD达到了30.31 DS,接近基于lidar的方法,而RC从56.36显著提高到75.20。ST-P3获得较好的RC,但DS差得多。

Ablation Study

image-20241127205059492 image-20241127205131833 image-20241127205153844

论文存在的不足

  1. Vectorized Planning Constraint中,不应该对未来路径的每一个时间戳都赋予相同的权重,但是我觉得每个时间戳的重要性是不同的,例如3秒后的ego位置的不如0.5秒后的ego位置重要。因为未来路径规划时,一方面我们希望轨迹的搜索空间尽量大一些,如果过分关注远期发生的情况,可能会导致车辆的路径的搜索空间变小;另一方面是,我们知道短期预测会精确于长期预测(时间越长,不可预测性越大),尤其是在真实场景下(会存在很多意外,例如天气视线障碍,人类驾驶员行为,行人突然横穿等),通过增加短期预测的权重,可以增加系统鲁棒性和灵活性。
  2. Planning Head 中的解释性还有待提高。
  3. 矢量化规划约束的设计在一定程度上依赖手动阈值(如δX\delta_XδY\delta_{Y}δdir\delta_{dir})。可以尝试:
    • 引入动态学习的约束参数,而不是固定阈值。
    • 通过强化学习或遗传算法来优化这些超参数,提高泛化性。