黄昏的夜市,王婶在小吃摊后面一边翻着烤串,一边用余光扫着人群。她总能在顾客真正走到摊前之前,提前把多烤了几串的鱿鱼端出来。有人问她是不是会算命,她只是笑:“这条街的走向我太熟了,谁走得快、谁会停下聊天、哪边烤肠摊会排队,我心里都有个数。我不说谁一定到我跟前,我只说哪几个方向最可能来一波人。” 王婶的这种“预判”,其实就是自动驾驶里的轨迹预测,只不过把“夜市地图”换成了高精地图,把“观察人流”换成了摄像头与雷达的历史轨迹,把“几个可能方向”换成了带概率的候选轨迹。它并不要求模型报出一个唯一答案,而是要求模型诚实地给出“未来可能怎么走”的多种情况。本文就用王婶的夜市作为向导,带你走进 VectorNet 与 SceneTransformer 这两套轨迹预测模型。

岗位关联

掌握轨迹预测,是进入自动驾驶预测与规划方向的核心门槛。它决定了智能车能否提前读懂道路参与者的意图,并为安全决策提供概率化、多模态的运动预判。

目录
  1. 可视化演示
  2. 问题定义
  3. 地图与矢量化
  4. 图交互建模
  5. 场景编码器
  6. 输出不确定性
  7. 训练与评估
  8. 落地与安全
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示多模态未来轨迹分布、VectorNet向量化场景编码与SceneTransformer时空注意力,理解自动驾驶如何预测交通参与者未来运动并量化不确定性。支持三模式切换与播放暂停。

本节配有交互动效(进入视口后自动加载,约 3KB)。

多模态输出 历史轨迹→未来 P(轨迹) 预测未来运动轨迹的分布与概率。

问题定义

王婶在夜市里每天都要回答同一个问题:接下来几分钟,人流会往哪儿走?她不追求“这个人十秒后会踩到哪块砖”,她只关心“有哪几股人流、大概会不会涌向我的摊子”。自动驾驶的轨迹预测其实也一样:它不打算精准预知未来,而是要在已知历史和地图的条件下,估计出未来一段时间内所有可能运动轨迹的概率分布。

在技术定义上,轨迹预测的输入通常包括两部分:一是过去几秒内目标车辆、行人等动态交通参与者的历史状态,二是车端高精地图提供的静态道路结构。输出则是未来 3-8 秒甚至更长时间内的多条候选轨迹,每条轨迹都附带一个概率。这个“多模态”特性,正是真实驾驶场景的写照:前车可能直行、变道或减速,只有给出一组可能路线,下游规划模块才能提前准备应对方案。

王婶不会拍胸脯说“顾客一定来我这儿”,她只会默默把烤串多备几串。轨迹预测模型也一样,它输出的是概率化的“人群流”,而不是一个孤零零的单点答案——这正是它与传统规则式预测最本质的区别。

P(Yt+1:T∣Xt−H:t,M)\displaystyle P(Y_{t+1:T} \mid X_{t-H:t}, M)
这个公式读作:在已知历史状态 X 和高精地图 M 的条件下,未来轨迹 Y 出现的概率分布。预测的核心不是一条曲线,而是这整个条件概率分布。
  1. 历史状态过去 H 步观测到的自车与周边目标的运动信息,包括位置、速度、朝向等。
    Xt−H:tX_{t-H:t}
  2. 高精地图来自矢量地图的静态道路元素,用来告诉模型车道在哪、哪里能走。
    MM
  3. 未来轨迹从 t+1 到 T 时刻预测输出的位置点序列,代表“未来可能怎么走”。
    Yt+1:TY_{t+1:T}
  4. 条件概率整个表达式的含义是在已知 X 和 M 的前提下,未来轨迹 Y 的可能性大小。
    P(Yt+1:T∣⋅)P(Y_{t+1:T} \mid \cdot)

地图与矢量化

王婶心里有一张夜市活地图:东边烤肠摊,西边奶茶店,中间的小道只能并排走两个人。她之所以能预判,是因为她早把路的结构刻在了脑子里。自动驾驶也一样,光看到周围的车还不够,还必须知道车道线在哪、路口怎么连、哪里是停止线,这些信息就来自高精地图。

然而,高精地图和传感器点云直接喂给神经网络并不高效。VectorNet 的核心思路,是把地图元素和智能体轨迹都“矢量化”:一条车道中心线可以被采样成若干个点,再用折线连接;一辆车的过去几秒轨迹,同样可以被采样成一条折线。于是,地图不再是一张像素大图,而是一组有几何顺序、有语义标签的向量元素。

王婶的夜市地图不是一张照片,而是脑海中“哪条巷子通向哪家店”的拓扑关系。VectorNet 的高明之处,就是把这种拓扑关系翻译成了神经网络能处理的矢量语言。

vi=ϕV({p1,p2,…,pn})\displaystyle \mathbf v_i = \phi_V(\{ \mathbf p_1, \mathbf p_2, \dots, \mathbf p_n \})
这是“折线编码”的抽象表达:模型把同一条折线上的一组点向量,编码成一个代表该折线整体语义的特征向量。
  1. 点向量折线上每个采样点都表示成坐标或附加特征的向量。
    pj\mathbf p_j
  2. 折线集合同一条车道、同一条轨迹上的点按顺序放入一个集合,保持几何连续性。
    {p1,p2,…,pn}\{ \mathbf p_1, \mathbf p_2, \dots, \mathbf p_n \}
  3. 可学习编码器用一个共享参数的网络把这组点变成一个固定维度的向量。
    ϕV(⋅)\phi_V(\cdot)
  4. 折线特征最终得到的向量代表整条折线的语义,供后续图交互使用。
    vi\mathbf v_i

图交互建模

王婶看人流时有个习惯:她不只看单个顾客,还会看人和人之间的互动。两个学生模样的姑娘会在奶茶店门口停下聊天,一个推着婴儿车的阿姨会让前方人群自动让开。这些“人与人相互影响”的细节,往往才是预判的胜负手。轨迹预测里的图神经网络,就是为了模拟这种交互。

VectorNet 将地图折线和智能体历史轨迹都当作图中的节点,然后在两类节点之间建立边:一类边连接同一折线内部的点,负责局部形状信息;另一类边连接不同折线之间相近的端点或关键点,负责“跨元素”的交互信息。每一次图卷积,都让节点从邻居那里收集消息,再更新自己的特征。经过多层消息传递,每个节点都能“知道”周围环境在怎样影响自己。

王婶看到两个人聊天,就知道他们短时间内不会移动;看到推车,就知道前方人群会绕开。图神经网络做的正是这件事:通过节点之间的消息传递,让每个参与者都学到“我周围发生了什么,我该如何被影响”。

hi′=Update⁡(hi, Aggregate⁡j∈N(i)Message⁡(hi,hj))\displaystyle h_i' = \operatorname{Update}\left(h_i,\ \operatorname{Aggregate}_{j \in \mathcal{N}(i)} \operatorname{Message}(h_i, h_j)\right)
这是图神经网络中消息传递的标准形式:先看邻居,再从邻居收集信息,最后更新自己。
  1. 中心节点当前正在更新的智能体或地图元素特征。
    hih_i
  2. 邻居节点与中心节点有边相连的、能够影响它的其他节点。
    hj, j∈N(i)h_j,\ j \in \mathcal{N}(i)
  3. 消息函数计算邻居如何影响中心节点,相当于把“对方的信息”打包。
    Message⁡(hi,hj)\operatorname{Message}(h_i, h_j)
  4. 聚合与更新把所有邻居的消息汇总,再融合进当前节点的新特征。
    Aggregate⁡(⋅),Update⁡(⋅)\operatorname{Aggregate}(\cdot), \operatorname{Update}(\cdot)

场景编码器

夜市再熟,王婶也有看不清的时候。每逢节假日人挤人,她就会搬来一张小梯子,站上去把整个夜市尽收眼底。站得高,就能同时看到东南西北几条通道的拥挤程度,信息一下子全对齐了。SceneTransformer 的角色,就是那把“梯子”。

如果说 VectorNet 已经用图神经网络完成了一轮局部交互,那么 SceneTransformer 会把这些局部折线特征当作一组 token,再送入 Transformer 编码器。自注意力机制让每一条车道、每一辆车的特征都“看到”场景里的其他所有元素。车道会关注哪些车正朝它开来,车也会关注它前方车道的拥堵情况和旁边车辆的变道趋势。这种全局建模能力,能有效弥补局部图卷积看得不够远的短板。

王婶站上梯子之后,能同时看见整条街的“人流势能”。SceneTransformer 的自注意力也是这样:它不只看距离近的邻居,而是直接在全球范围内,把每个重要线索都拉进自己的视野。

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V\displaystyle \operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V
注意力机制本质上是在问:对当前这个元素来说,场景里哪些元素值得重点参考,参考比例又是多少。
  1. 查询当前折线向量为自己生成的问题,用来问“我要关注谁”。
    QQ
  2. 键与值场景中其他折线向量为自己的“标签”和“内容”。
    K,VK, V
  3. 缩放点积相似度用点积衡量问题与标签的匹配程度,并除以根号维度防止数值过大。
    QK⊤dk\frac{QK^\top}{\sqrt{d_k}}
  4. 加权求值用 softmax 把相似度变成权重,再把所有内容按权重相加。
    softmax⁡(⋅)V\operatorname{softmax}(\cdot)V

输出不确定性

有一次,王婶看到五个年轻人同时从小吃街岔路口走来,她没法判断这波人会分成几股。于是她心里默默列出三种可能:五成奔烧烤摊,三成去奶茶店,两成会在路边拍照。这种“不把话说死”的能力,正是轨迹预测最需要的素养。未来不是单线剧本,而是多个平行世界同时存在。

模型在输出端会生成 K 条候选轨迹,比如直行、左转、右转,再为每条轨迹打一个分数,并归一化成概率。通常情况下,模型还会先执行目标点采样,从高精地图上选出若干可能终点,再倒推生成整条轨迹;最后再通过轨迹评分和非极大值抑制,去掉过于相似的候选,保证输出的 K 条轨迹既多样又合理。

王婶说的“五成、三成、两成”,就是一组概率。自动驾驶也只需要让下游规划知道:哪个方向可能性高,哪个方向虽然概率低但也不能完全忽略。多模态输出,正是对这种不确定性的诚实体面表达。

P(k∣h)=exp⁡(sk)∑j=1Kexp⁡(sj)\displaystyle P(k \mid \mathbf h) = \frac{\exp(s_k)}{\sum_{j=1}^{K}\exp(s_j)}
这条 softmax 公式把模型给每条候选轨迹的“原始得分”转换成 0 到 1 之间的概率,且所有候选轨迹概率之和等于 1。
  1. 候选轨迹得分模型输出当前这条轨迹有多“合理”的原始数值。
    sks_k
  2. 指数放大取指数让正得分概率更高、负得分概率更低,同时保证非负。
    exp⁡(sk)\exp(s_k)
  3. 归一化分母把所有候选轨迹的指数分数累加,作为总概率空间。
    ∑j=1Kexp⁡(sj)\sum_{j=1}^{K}\exp(s_j)
  4. 最终概率每条候选轨迹在所有可能中所占的比例。
    P(k∣h)P(k \mid \mathbf h)

训练与评估

王婶不是天生就会预判,她在夜市站了十几年,看过太多次“以为会过来结果绕走”的场面。每次判断错了,她都会默默在脑子里记一笔,下次再多观察一个细节。轨迹预测模型的训练,也需要类似的“犯错—修正”机制,只不过它靠的是损失函数和数据回放。

训练时,模型同时学习两件事:一是把高概率分配给真实发生的轨迹,这叫分类损失;二是让预测出的轨迹点尽量贴近真值轨迹,这叫回归损失。两者相加就是总损失。为了让“概率分布”更可靠,很多方法还会加入负对数似然损失,让模型对每条候选轨迹的置信度也接受监督。评估时,行业常用 minADE 和 minFDE:它们先选出 K 条候选里最接近真值的那条,再计算平均位移误差和最终点误差。

王婶说“吃过的亏都变成了眼力”,模型也是:训练损失就是它吃过的亏,评价指标则是衡量它预判功力的考试分数。模型不是天生会看路,而是在无数个真实场景的回放中,慢慢学会了像王婶一样“看人流”。

L=1N∑i=1N(λclsLcls(i)+λregmin⁡k1T∑t=1T∥Y^i,t(k)−Yi,t∥)\displaystyle \mathcal{L} = \frac{1}{N}\sum_{i=1}^{N}\left( \lambda_{\text{cls}} \mathcal{L}_{\text{cls}}^{(i)} + \lambda_{\text{reg}} \min_{k} \frac{1}{T}\sum_{t=1}^{T}\left\| \hat{Y}_{i,t}^{(k)} - Y_{i,t} \right\| \right)
这个总损失公式的关键在于:分类部分惩罚“概率给错”,回归部分用“最小误差的那条候选”来评估轨迹贴不贴真值。
  1. 分类损失惩罚模型把高概率给了没有发生的轨迹。
    Lcls(i)\mathcal{L}_{\text{cls}}^{(i)}
  2. 回归损失在所有 K 条候选中,挑出最接近真值的一条来计算位置误差。
    min⁡k1T∑t=1T∥Y^i,t(k)−Yi,t∥\min_{k} \frac{1}{T}\sum_{t=1}^{T}\left\| \hat{Y}_{i,t}^{(k)} - Y_{i,t} \right\|
  3. 权重系数平衡概率分类和位置回归在总损失里所占的分量。
    λcls,λreg\lambda_{\text{cls}}, \lambda_{\text{reg}}
  4. 样本平均对数据集里所有样本的损失取平均,得到最终训练目标。
    1N∑i=1N(⋅)\frac{1}{N}\sum_{i=1}^{N}(\cdot)

落地与安全

王婶再厉害,也不会把整摊货都押在某一个方向上。她说:“预判是预判,留一手是留一手。” 自动驾驶落地时也一样,模型预测出“前车大概率直行,但有小概率变道”,即便小概率很低,安全模块也不能忽略它。正是这种“留一手”的冗余思想,让不确定性量化变得生死攸关。

在实际量产中,轨迹预测模块必须实时输出结果,通常要求在几十毫秒内完成推理,因此模型要能被剪枝、量化并部署到车端芯片。同时,模型还需要应对遮挡带来的信息缺失:当一辆车被大货车挡住,预测结果应该变得“更发散、更保守”,而不是强行给一个自信的答案。最终,预测概率会进入规划模块,参与风险估计:如果某条候选轨迹可能与自车冲突,即便概率不高,也要触发减速或避让决策。

王婶会给自己留退路,优秀的自动驾驶系统也该如此。轨迹预测的价值,不在于把未来变成“确定答案”,而在于给规划、控制和安全模块一张“概率地图”。有了这张地图,智能车才能在没有十足把握时,依然做出稳妥的决策。

Pconflict=∑k=1Kπk⋅I(dmin⁡(Yk,Z)<δ)\displaystyle P_{\text{conflict}} = \sum_{k=1}^{K} \pi_k \cdot \mathbb{I}\bigl(d_{\min}(Y_k, Z) < \delta\bigr)
这条公式表示:把每条候选轨迹 Y_k 与障碍物 Z 的最小距离是否超过安全阈值 δ 这件事,按概率 π_k 加权求和,得到总冲突概率。
  1. 候选概率模型认为该条未来轨迹会发生的可能性。
    πk\pi_k
  2. 最小距离这条未来轨迹与障碍物之间最近的距离。
    dmin⁡(Yk,Z)d_{\min}(Y_k, Z)
  3. 冲突指示当最小距离小于安全阈值时记 1,否则记 0。
    I(⋅)\mathbb{I}(\cdot)
  4. 冲突总概率按每条轨迹的概率加权,得到当前场景的整体风险水平。
    PconflictP_{\text{conflict}}

AI 应用场景

高速公路匝道汇入预测

阶段:感知融合 → 预测决策 → 规控执行

解决的问题:在高速匝道汇入场景中,自车需要知道主路车辆是会减速让行、保持直行,还是突然变道避让。传统方法只能按最近几帧速度简单外推,遇到犹豫的驾驶员容易误判。

具体案例:主路后方车辆距离 50 米,模型输出三条候选:六成概率直行、三成概率向左让道、一成概率减速。规划模块利用这组概率,决定“继续提速汇入”还是“在匝道末端等待”,从而避免让行冲突。

城市路口行人过街预测

阶段:行为预测 → 风险量化 → 主动安全

解决的问题:城市路口行人过街意图复杂,行人在路边停步、低头看手机、突然小跑,都是规划系统最难处理的场景。轨迹预测的多模态输出可以反映这种“犹豫”。

具体案例:行人站在斑马线边缘,模型给出三条未来轨迹:直行过街概率 45%,在路边等待概率 40%,折返回去概率 15%。AEB 系统将“直行过街”的低概率情况也纳入风险计算,提前准备制动。

高价值数据筛选

阶段:数据闭环 → 场景挖掘 → 模型迭代

解决的问题:量产车队每天产生海量路测数据,但大多数场景平淡无奇。轨迹预测模型可以用“预测概率分散度”和“预测误差”作为线索,筛选出真正有挑战的交互场景。

具体案例:某辆测试车在路口遇到多车同时变道,模型输出的 K 条轨迹概率非常接近、且与真值误差较大。系统自动把这段数据回传到云端,加入训练集,成为下一版模型的困难样本。

Python 演示

python68 行
import math  def point_dist(a, b):    return math.hypot(a[0] - b[0], a[1] - b[1])  class MiniTrajectoryPredictor:    def __init__(self):        self.targets = []        self.scores = []     def cluster_targets(self, future_points, k=3):        # 用最远点采样初始化三个终点簇中心,模拟多模态终点        centers = [future_points[0]]        while len(centers) < k:            farthest = max(future_points, key=lambda p: min(point_dist(p, c) for c in centers))            centers.append(farthest)        # 简单迭代聚类,让终点更稳定        for _ in range(5):            groups = [[] for _ in centers]            for p in future_points:                idx = min(range(k), key=lambda i: point_dist(p, centers[i]))                groups[idx].append(p)            centers = [tuple(sum(x[i] for x in g) / len(g) for i in range(2)) for g in groups]        self.targets = centers        return centers     def candidate_trajectories(self, history, steps=8):        start = history[-1]        candidates = []        for target in self.targets:            traj = []            for i in range(1, steps + 1):                alpha = i / steps                x = start[0] + (target[0] - start[0]) * alpha                y = start[1] + (target[1] - start[1]) * alpha                traj.append((x, y))            candidates.append(traj)        return candidates     def assign_probabilities(self, candidates, true_future=None):        if true_future is None:            self.scores = [1.0 / len(candidates)] * len(candidates)            return self.scores        distances = []        for traj in candidates:            dist = sum(point_dist(traj[i], true_future[i]) for i in range(len(true_future)))            distances.append(dist)        inv = [1.0 / (d + 1e-6) for d in distances]        total = sum(inv)        self.scores = [s / total for s in inv]        return self.scores  if __name__ == "__main__":    history = [(0.0, 0.0), (1.0, 0.2), (2.0, 0.4), (3.0, 0.6)]    future_samples = [        (5.0, 0.6), (5.5, 2.5), (4.5, -2.0),        (5.2, 0.4), (5.8, 2.8), (4.2, -1.8)    ]    true_future = [(4.0, 0.8), (5.0, 1.0), (6.0, 1.2)]    model = MiniTrajectoryPredictor()    model.cluster_targets(future_samples, k=3)    candidates = model.candidate_trajectories(history)    probs = model.assign_probabilities(candidates, true_future)    for idx, traj in enumerate(candidates):        print("candidate", idx + 1, "->", traj[-1], "prob", round(probs[idx], 3))
目的:用最简方式演示“终点聚类 → 候选轨迹生成 → 概率分配”的多模态轨迹预测流程,对应正文中轨迹评分与输出不确定性的核心思想。
  1. def cluster_targets(self, future_points, k=3):用最远点采样和迭代聚类,从历史终点样本中提炼出 K 个“可能目的地”。
  2. candidate_trajectories(self, history, steps=8):把每条候选轨迹看作从当前位置到某个终点的一段线性插值,模拟多模态轨迹生成。
  3. assign_probabilities(self, candidates, true_future=None):根据候选轨迹与真值轨迹的接近程度分配概率,相当于简化版的轨迹评分。
  4. model.cluster_targets(future_samples, k=3)决定预测 3 条候选轨迹,对应模型输出端 K 条多模态轨迹。
  5. for idx, traj in enumerate(candidates):逐条打印候选轨迹终点和概率,方便直观观察“哪条结果更接近真值”。

常见误区

误区“预测模块应该直接告诉我前车 3 秒后在哪,输出一条最准的轨迹就够了,多条候选反而让人不知道听谁的。”

正解真实驾驶场景充满多模态:前车既可能直行,也可能因为前方障碍变道。如果模型只给一条轨迹,规划模块一旦信错就会毫无退路。正确的做法是输出多条候选并带概率,像王婶同时准备“五成烤串、三成奶茶、两成拍照”的预案一样,让下游决策保留安全余量。

为何常见:日常生活中的“预测”往往被理解成猜一个确定结果,比如预测明天温度。但轨迹预测要服务的是连续决策,必须把不确定性显式表达出来。

误区“要让模型看清路况,就应该把高精地图渲染成高清图片,或者把所有图层都堆进去,信息越多越准。”

正解像素级地图数据量太大,且包含大量与驾驶无关的冗余信息。VectorNet 的设计哲学是矢量化:把车道中心线、停止线、轨迹等抽象成有序点序列和折线。这样模型既能保留几何拓扑,又能用极小的参数量完成高效推理。堆像素不仅浪费算力,还容易让模型抓不住关键结构。

为何常见:人眼习惯于看图像,容易下意识认为“越清晰的图越有用”,但车载系统需要的是结构化、低延迟、可推理的语义输入。

误区“SceneTransformer 不是有全局注意力吗?那把 VectorNet 的图卷积省掉,直接让所有点和线两两交互不就行了?”

正解直接用全局注意力处理海量原始点,会带来巨大的计算开销,也缺少折线固有顺序的先验。实际做法是先用矢量化折线编码把局部几何压缩成紧凑 token,再用 Transformer 在 token 层面做全局交互。局部抽象和全局注意力是互补关系,而不是替代关系。

为何常见:Transformer 在 NLP 和视觉上太出名,容易让人误以为它万能,忽略了工程上“先提取结构,再做全局融合”的必要性。

误区“只要让预测轨迹和真值轨迹的像素点越接近,模型就越准,所以回归损失才是最重要的。”

正解轨迹预测不仅要“位置准”,还要“概率对”。如果模型把高概率给了错误候选,即使某一条候选碰巧回归误差很小,也无法为规划提供可靠依据。因此训练必须同时包含分类概率损失和回归损失,并借助负对数似然让概率分布整体更合理。

为何常见:回归误差是直观可见的数字,容易让人忽略概率分布这种看不见却决定安全性的质量指标。

误区“只要把轨迹预测精度从 90% 提到 99%,车就不会出事,安全全靠预测模型。”

正解预测精度再高也有极限,而且要保护的是小概率高风险场景。真正的安全来自系统冗余:预测模块输出概率,规划模块用冲突概率做保守决策,功能安全模块再设置多层兜底。王婶再会看人流,也不会把整个摊子押在一个方向上,只盯着“准”而忽略“留一手”是非常危险的。

为何常见:技术评估时刻强调准确率指标,容易让人误以为“精度上去了就能直接实现无人驾驶”,忽略了量产系统整体安全架构的重要性。

面试题

Q1. 轨迹预测模型最合理的输出形式是什么?

单选题 · easy

  • A.唯一确定的未来轨迹
  • B.多条候选轨迹及概率← 正确答案
  • C.一张预测热力地图
  • D.直接输出方向盘转角

答案:B。真实驾驶场景存在多种可能走向,模型应当输出多条候选轨迹并附概率,让规划模块有冗余可依。唯一轨迹太绝对,热力地图损失拓扑信息,方向盘转角属于规划控制输出。

Q2. VectorNet 处理高精地图时,主要采用什么表示方式?

单选题 · easy

  • A.像素级高清图像
  • B.激光雷达原始点云
  • C.折线与点序列向量← 正确答案
  • D.文本描述文件

答案:C。VectorNet 的核心是矢量化,将车道中心线、轨迹等地图与运动元素抽象成有序点序列和折线,而不是像素或原始点云。这样保留了几何拓扑,同时计算更高效。

Q3. SceneTransformer 最主要的建模机制是什么?

单选题 · easy

  • A.卷积神经网络
  • B.循环门控单元
  • C.自注意力机制← 正确答案
  • D.梯度提升决策树

答案:C。SceneTransformer 依赖 Transformer 的多头自注意力,让场景中所有折线 token 互相观察、全局交互。卷积适合局部特征,循环结构适合序列生成,与题目不符。

Q4. 轨迹预测的训练损失通常包括哪些部分?

多选题 · mid

  • A.候选轨迹分类损失← 正确答案
  • B.轨迹点回归损失← 正确答案
  • C.图像语义分割损失
  • D.负对数似然损失← 正确答案

答案:ABD。模型既要学会把概率分配给真实轨迹,也要让预测点贴近真值,并经常用负对数似然校准整个概率分布。语义分割是视觉感知任务,不属于轨迹预测主损失。

Q5. 在多模态轨迹输出中,softmax 的作用是什么?

单选题 · mid

  • A.把轨迹坐标归一化
  • B.把轨迹得分变成概率← 正确答案
  • C.过滤掉低置信度轨迹
  • D.把历史轨迹编码成向量

答案:B。softmax 将模型为每条候选轨迹给出的原始得分转化成 0 到 1 之间的概率,并且保证所有候选概率之和为 1。归一化坐标和过滤轨迹由其他模块完成。

Q6. minFDE 指标表示什么含义?

单选题 · easy

  • A.最小最终点位移误差← 正确答案
  • B.最小帧延迟误差
  • C.最大前向距离误差
  • D.平均速度偏差

答案:A。minFDE 指在 K 条候选轨迹中,找一条终点最接近真值终点的轨迹,计算最终点误差。它衡量模型“最接近正确的那条候选”能达到多准,是轨迹预测常用指标。

Q7. 关于消息传递,下列说法正确的是?

单选题 · mid

  • A.它只更新地图节点
  • B.它让相邻节点交换信息← 正确答案
  • C.它替代了所有损失函数
  • D.它只能处理直线轨迹

答案:B。图神经网络通过消息传递让中心节点从邻居收集并融合信息,从而建模智能体之间、智能体与地图之间的交互。它不局限于地图节点,也不替代损失函数。

Q8. 下列哪些方法可以用于量化轨迹预测的不确定性?

多选题 · hard

  • A.输出多条候选轨迹← 正确答案
  • B.每条轨迹附带概率← 正确答案
  • C.使用高斯混合分布← 正确答案
  • D.只输出一条最优轨迹

答案:ABC。多候选轨迹、概率评分、分布参数化都能表达“未来有多种可能”。只输出一条轨迹等于放弃不确定性,无法支撑后续安全决策。

Q9. VectorNet 和 SceneTransformer 的核心区别是什么?

单选题 · hard

  • A.前者做全局注意力,后者做图卷积
  • B.前者做局部图聚合,后者做全局自注意力← 正确答案
  • C.前者输出控制信号,后者输出感知结果
  • D.前者处理图像,后者处理激光雷达

答案:B。VectorNet 用图神经网络在折线层级做局部信息聚合,SceneTransformer 用自注意力在场景 token 层级做全局交互。二者常结合使用,前者抓结构,后者看全局。

Q10. 轨迹预测量产落地时,需要重点考虑哪些因素?

多选题 · hard

  • A.车端算力与推理延迟← 正确答案
  • B.遮挡导致的感知不确定性← 正确答案
  • C.预测概率与规划决策融合← 正确答案
  • D.大量场景验证与安全冗余← 正确答案

答案:ABCD。量产预测模块必须在有限算力下实时运行,还要应对遮挡、稀疏感知,并与规划模块形成安全冗余。任何单独亮点都无法支撑落地,必须系统化考虑这些工程因素。