【动手学轨迹预测】3.1 基于锚点的轨迹预测
【动手学轨迹预测】3.1 基于锚点的轨迹预测
在自动驾驶领域,轨迹预测是实现安全驾驶的关键技术之一。基于锚点的轨迹预测方法通过预测关键时间点的状态,再通过网络生成完整轨迹,有效提高了预测的鲁棒性和准确性。本文将详细介绍基于锚点的轨迹预测方法,包括Anchor-Based和Anchor-Free两种主要方法,并通过多个具体案例进行说明。
在Decoder解码部分,需要得到自车与其他agent、环境的交互信息,进而得到最终的预测轨迹。其中基于锚点的预测方法是指解码阶段不直接输出完整轨迹,而是先预测出某个时间步的多个可能状态。比如先预测出t = 3.0 s时的状态:
X i t = { x i t , y i t , v i t , θ i t , . . . } \boldsymbol{X}^t_i=\left{x_i^t, y_i^t,v_i^t,\theta_i^t,...\right}Xit ={xit ,yit ,vit ,θit ,...}
之后通过一些简单的网络(比如MLP、RNN),连接agent起点和这些预测锚点进而生成轨迹。接着对这些轨迹进行打分、排序和筛选,最终得到输出多模态轨迹。这有效提高了轨迹预测的鲁棒性,保证预测结果的下限。
那么如何确定这些预测点的位置呢?可以分成Anchor-Based和Anchor-Free两种方法。
3.1.1 Anchor-Based
3.1.1.1 TNT:采样目标点
Anchor-Based是指利用地图、环境等先验信息,在预测目标附近采样得到可能的预测目标点。
Waymo在2020年发布的TNT[1] 是Anchor-Based的典型代表,很大程度上推进了预测网络在工业界的落地。如图TNT会利用环境地图等先验信息,设计一些规则对目标T秒后可能出现位置均匀采样。比如车辆,基于地图的拓扑关系得到车辆直行、换道、右转等采样候选点;如果是行人,则同样会在行人附近利用人行道、护栏等地图信息设计采样逻辑,得到采样候选点。
然后先从采样候选点中选出可能性较大的几个点作为锚点,利用MLP生成每个目标点对应的轨迹,进行打分、排序和筛选。后来作者又提出Dense TNT[2],大幅增加了采样点的数量,从而有更好的预测效果。
3.1.1.2 PBP: 横纵向采样目标点
大部分基于地图信息采样的anchor-based方法,都只考虑横向上的模态分布(即不同车道),而不考虑纵向上的模态分布(即不同速度)。
PBP[3]基于Frenet坐标系,在参考线上分别进行横向和纵向采样,这种方式保证了模态的完整性。
因为anchor-based方法的稳定性和模态完整性,使其在工业落地时有较好的效果,基于地图信息采样的anchor方法应用较多。
3.1.1.3 MultiPath:基于意图的锚点生成
作者也可以基于intention(意图)生成锚点,比如MultiPath[4],轨迹锚点通过无监督学习的方式从训练数据中提取。这些锚点代表了轨迹分布中的主流模式,可能对应于不同的行为意图,例如“变道”或“减速”。
之后使用K-means进行聚类,得到每个意图的代表性轨迹和对应锚点。锚点的生成过程不依赖于任何先验的语义概念,而是直接从数据中学习得到。最后对这些锚点根据实际的预测目标,进行调整,作为最终的锚点。
3.1.1.4 MTR: 基于意图的query生成
MTR也采取了类似的方法:它将数据集中所有同类型(车辆、行人、自行车)的agent的真值轨迹,转换到agent-centric坐标系下,进行了统计。灰色线条就是所有数据的真值轨迹,然后对统计结果进行K-MEANS聚类,得到K个点作为intention point。
但是MTR更进一步利用了transformer的注意力机制,首先把这K个intention point通过MLP生成static intention query:
Q I = MLP ( PE ( I ) ) , Q_I=\operatorname{MLP}(\operatorname{PE}(I)),QI =MLP(PE(I)),
然后通过self-attention,与场景信息、agent信息cross-attention等操作,得到更多的信息。因为static intention query本身是可学习的,因此作者认为k不需要太大就可以得到较好的效果。
static intention query仅仅代表大致的运动趋势,通过Dynamic Searching Query在static intention query附近搜索目标点。论文搭建了多层网络来更新这两个query,不停地refine得到最终的锚点。
但是这种基于统计数据得到intention 信息的方法也有明显的缺点:比如明确目的车辆(高速上的车辆),几乎不会有左转、掉头等等统计得到的模态行为。因此这种方法在工业界,鲜少应用。
Anchor-Based的方法加入了基于规则的先验信息,这保证了轨迹预测结果不至于太离谱,有效提高了模型的下限。并且它能够让模型在训练的时候快速收敛。
但是另一方面,很难处理一些非常规场景,比如事故车辆可能会在路上任意移动。这个问题会随着预测时长的增加,变得严重。
3.1.2 Anchor-Free
Anchor-Free是指不利用地图等先验信息预先采样锚点,而是让模型直接输出锚点。简单的做法是,decoder中设置一个MLP或者RNN,输入encoder信息后直接输出锚点。
Anchor-Free的输出非常灵活,不被规则或者地图等先验限制。但是这样也对应着缺点:
- 锚点的质量无法保证,比如生成道路边界之外的锚点,进而无法保证输出轨迹的质量。
- 锚点可能相互重复,难以避免模态坍缩的问题。
- 锚点可能丢失模态
3.1.3 两段式生成轨迹
QCNet提出了一种融合Anchor-Free和Anchor-Based的可学习的锚点生成方式。
如图,首先用模型输出的anchor-free mode query,从 Mode2Scene(模态和场景cross attention)和Mode2Mode Attention(各模态self attention)中 query出K条粗粒度轨迹。他们代表基于anchor-free得到的proposal结果。
接着将这些粗粒度轨迹输入到anchor-based模块得到anchor-based mode query,会在粗粒度轨迹基础上refine出锚点的偏移量,进而重新生成新的锚点和对应轨迹。也就是改善了proposal预测结果。
由于预测时间很长,agent运动到几秒后的环境会有比较大的变化,因此比较难把整个时间周期内的feature给做成一个query embedding。为了降低这个难度,提升query的质量,作者采用了 DETR的做法:设定T r e c T_{r e c}Trec 为step的步数,和周围场景融合一下后得到下一个step的位置,每次前进T ′ / T r e c T^{\prime} / T_{r e c}T′/Trec 个step。同时作者还发现这个step不用特别小。比如每次可以预测往前2 s 2 s2s的结果,获得新的位置后重新和场景融合再向前预测2 s 2 s2s,不是一秒一秒走,也不是一口气全预测出来。
这种先后proposal和refine的两阶段式轨迹预测,可以融合Anchor-Free和Anchor-Based的优点。
参考链接
- [1]TNT: Target-driveN Trajectory Prediction
- [2]End-to-end Trajectory Prediction from Dense Goal Sets
- [3]PBP: Path-based Trajectory Prediction for Autonomous Driving
- [4]MultiPath: Multiple Probabilistic Anchor Trajectory Hypotheses for Behavior Prediction
- [5] QCNet: Query-Centric Trajectory Prediction