照片做视频模板下载网站,西安网,重庆律师网站,婚纱影楼网站模板一、解决了什么问题#xff1f;
当前的自动驾驶方案大致由感知#xff08;检测、跟踪、建图#xff09;、预测#xff08;motion、occupancy#xff09;和规划三个模块构成。 为了实现各种功能#xff0c;智驾方案大致包括两种路线。一种是针对每个任务都部署一个模型
当前的自动驾驶方案大致由感知检测、跟踪、建图、预测motion、occupancy和规划三个模块构成。 为了实现各种功能智驾方案大致包括两种路线。一种是针对每个任务都部署一个模型该范式能降低各团队间的研发困难度但由于各个优化目标是孤立的会引发模块之间信息丢失、错误累加和特征不对齐的问题。另一种是多任务的设计路线多个任务 heads 共享一个特征提取器该范式能节省边缘计算平台的资源消耗并且扩展性强但会带来“负迁移”的问题。
端到端运动规划
自从 Pomerleau 提出使用一个网络直接预测控制信号端到端运动规划受到越来越多的关注。后续研究通过闭环仿真、多模态输入、多任务学习、强化学习以及专家模型蒸馏的方式取得了长足进展。但是考虑到鲁棒性和安全性这些方法直接从传感器数据输出控制信号、从合成场景迁移到实际应用仍有问题。因此学者们试图显式地构造出一个网络的中间表征预测场景是如何变化的。
二、提出了什么方法
本文认为应该围绕着规划这一最终的目标来设计整体架构于是提出了 UniAD。UniAD 在一个网络中包括了全栈的自动驾驶任务它能充分利用各模块的优势从全局的角度为各 agents 之间的交流提供互补的特征抽象并且它以统一的 query 接口来连接所有的模块推动各模块向规划这一目标对齐。
UniAD 遵循一切为规划服务的原则核心构成就是 query-based 的接口设计连接各个模块。与经典的边框表征相比queries 得益于更大的感受野能减轻上游任务预测所带来的复合错误的影响而且能灵活地编码和建模 agents 之间的交流。
任务定义
检测和跟踪
检测和跟踪是自动驾驶领域两个重要的任务在 3D 空间对它们做表征以支持下游任务。3D 检测负责定位每个时刻周围的物体坐标、长宽高、偏航角等跟踪目的是找到不同时刻物体之间的对应关系在时域内将它们串联起来。本文使用多目标跟踪来表示检测和跟踪的过程。最终输出是每帧内的一组 3D 框它们对应的特征 Q A Q_A QA 会输入运动模块。此外有一个特殊的自车 query 用于下游任务在预测框和 ground-truth 框的匹配过程中不会包括自车 query。
在线建图
地图体现了环境的几何和语义信息。在线建图是利用车载传感器数据分割出有价值的道路元素以替代离线标注的高精地图。在 UniAD在线地图建模了四种元素车道线、可行驶区域、间隔物、人行横道。在 BEV 视角下对它们做分割。运动预测模块使用 map queries Q M Q_M QM 来建模 agent-map 关系。
运动预测
运动预测将感知和规划连接起来在整个自动驾驶系统扮演重要角色确保最终的安全。通常运动预测是一个独立模块利用高精地图和检测到的边框来预测 agent 未来的轨迹。现有的运动数据集边框都是 ground-truth 标注这在车载场景不现实。本文运动预测模块将之前编码的稀疏 queries( Q A Q_A QA和 Q M Q_M QM)和密集 BEV 特征 B B B 作为输入预测各 agent 在未来 T T T 时刻的 K \mathcal{K} K 个可能轨迹这些预测的轨迹是各 agent 的相对当前位置的偏移。Agent 特征编码了过去和未来的信息会输入占用模块来理解未来的场景。
自车 query 预测未来时刻自车的运动它实际上是比较粗糙的规划估计planner 会利用该特征来生成最终的目标路径点。
占用预测
占用网格图是离散化的 BEV 表征每个网格表示它是否被占用的置信度。占用预测任务用于发现网格图在未来 T o T_o To 时刻是如何变化的。运动预测依赖于稀疏的 agents占用预测则是全场景密集表征的。为了研究场景和稀疏 agents 是如何变化的占用模块的输入是 BEV 特征 B B B 和 agent 特征 G t G^t Gt。完成多步骤 agent-scene 交流后对占用特征和密集场景特征做矩阵乘得到实例级的概率图 O ^ A t ∈ R N a × H × W \hat{O}_A^t \in \mathbb{R}^{N_a\times H\times W} O^At∈RNa×H×W。然后使用逐像素的 arg max \argmax argmax 操作将各时刻的概率图融合得到保留了 agent ID 的全场景占用 O ^ t ∈ R H × W \hat{O}^t \in \mathbb{R}^{H\times W} O^t∈RH×W。
规划
规划模块是最终的目的输入是上述模块的输出。传统的规划方法都是 rule-based由各种 if-else 状态机组成用检测和预测的结果来描述各类场景。而本文提出的 learning-based 模型则以上游的自车 query、密集的 BEV 特征 B B B 作为输入预测全部 T p T_p Tp 时刻的轨迹 τ ^ \hat{\tau} τ^。然后用上游预测的未来占用 O ^ \hat{O} O^ 来优化预测轨迹 τ ^ \hat{\tau} τ^以防发生碰撞确保安全。
概览
UniAD 包括四个基于 transformer decoder 的感知与预测模块以及一个 planner。Queries Q Q Q 将整个流程串联起来建模驾驶场景中各实例间的不同关系。下图展示了 UniAD 的流程设计上非常精妙遵循规划导向的思想。作者探索了感知和预测各模块的作用充分发挥节点协同优化的优势。 首先将多相机图像输入特征提取器通过 BEVFormer 的 BEV 编码器将透视视角的特征变换为 BEV 特征 B B B。 然后在 TrackFormer 中track queries 从 B B B 中查询各 agents 的信息进行检测和跟踪。 在 MapFormer 中map queries 作为道路元素车道线、间隔物的语义抽象并进行 maps 的全景分割。 MotionFormer 获取各 agents 和 maps 之间的关系预测每个 agent 未来的轨迹。在场景里面各 agent 的行为会彼此影响所以 MotionFormer 对所有的 agents 做联合预测。 OccFormer 以 BEV 特征 B B B 作为 queries将 agent 的信息作为 keys 和 values预测未来多步的占用网格图保留 agents 的 IDs。 最终Planner 利用 MotionFormer 给出的自车 query 来预测出规划结果并让自车远离 OccFormer 预测的被占用区域以防碰撞发生。
1. 感知跟踪和建图
1.1 TrackFormer
它协同完成检测和多目标跟踪任务没有不可微的后处理操作。除了目标检测任务用到的检测 queries它还包含了跟踪用的 track queries。在每一时刻新初始化的检测 queries 负责检测首次被感知到的 agents而 track queries 则对之前帧检测到的 agents 持续建模。检测 queries 和 track queies 都是通过关注 BEV 特征 B B B 来获取各 agents 的信息。随着场景的变化当前时刻的 track queries 通过一个自注意力模块与之前时刻的 queries 进行交流聚合时域信息直到相应的 agents 完全消失在画面中。TrackFormer 包括 N N N 层最终的输出 Q A Q_A QA 提供 N a N_a Na 个有效 agents 的信息供下游任务使用。除了编码自车周围 agents 的 queries作者还增加了一个自车 query显式地建模自车本身规划模块会用到。
1.2 MapFormer
作者基于 2D 全景分割方法 Panoptic SegFormer 设计 MapFormer。将道路元素稀疏地表征为 map queries编码了位置和结构信息从而帮助下游的运动预测。本文将车道线、间隔物和人行横道设为 things将可行驶区域设为 stuff。MapFormer 也有 N N N 层最后一层的 queries Q M Q_M QM 会输入 MotionFormer 做 agent-map 交流。
2. 预测运动预测
有了 TrackFormer 和 MapFormer 分别提供的动态 agents 的 queries Q A Q_A QA 和静态图 Q M Q_M QMMotionFormer 就可以预测所有 agents 未来的多模态运动了即 top-k 个可能的轨迹。同时作者将 TrackFormer 中的自车 query 传入 MotionFormer让自车和其它 agents 产生交流。输出的运动状态表示为 { x ^ i , k ∈ R T × 2 ∣ i 1 , . . . , N a ; k 1 , . . . , K } \{\hat{\mathbf{x}}_{i,k} \in \mathbb{R}^{T\times 2}| i1,...,N_a; k1,..., \mathcal{K}\} {x^i,k∈RT×2∣i1,...,Na;k1,...,K}其中 i i i 表示 agent 的索引 k k k 表示轨迹模态的索引 T T T 是预测的长度。
2.1 MotionFormer
包括 N N N 层每层都获取到三种交互关系agent-agent, agent-map, agent-goal point。对于每个 motion query Q i , k Q_{i,k} Qi,k它和其它 agents Q A Q_A QA 或地图元素 Q M Q_M QM 的关系可以表示如下 Q a / m MHCA ( MHSA ( Q ) , Q A / Q M ) Q_{a/m}\text{MHCA}(\text{MHSA}(Q), Q_A/Q_M) Qa/mMHCA(MHSA(Q),QA/QM)
上面的 MHCA \text{MHCA} MHCA 和 MHSA \text{MHSA} MHSA 表示多头跨注意力和多头自注意力。同时我们也要关注目标点goal point优化预测轨迹本文基于可变形注意力设计了一个 agent-goal point 注意力 Q g DeformAttn ( Q , x ^ T l − 1 , B ) Q_g \text{DeformAttn}(Q, \hat{\mathbf{x}}_T^{l-1}, B) QgDeformAttn(Q,x^Tl−1,B)
其中 x ^ T l − 1 \hat{\mathbf{x}}_T^{l-1} x^Tl−1 是上一层预测轨迹的路径点。 DeformAttn ( q , r , x ) \text{DeformAttn}(q,r,x) DeformAttn(q,r,x) 是可变形注意力输入为 query q q q、参考点 r r r 和空间特征 x x x。它对参考点周围的空间特征应用稀疏注意力。这样预测轨迹能进一步感知到路径点周围的环境。
这三种交互关系的建模是同时进行的然后将生成的 Q a , Q m , Q g Q_a, Q_m, Q_g Qa,Qm,Qg concat 到一起输入一个 MLP得到 query context Q c t x Q_{ctx} Qctx。然后将 Q c t x Q_{ctx} Qctx 输入后续的层做优化或者在最后一层就解码为预测结果。
2.2 Motion queries
MotionFormer 每一层的输入 queries 记作 motion queries包括两个部分前一层输出的 query context Q c t x Q_{ctx} Qctx 和 query position Q p o s Q_{pos} Qpos。 Q p o s Q_{pos} Qpos 整合了四重的位置信息
场景级 anchor I s I^s Is 的位置agent 级 anchor I a I^a Ia 的位置第 i i i 个 agent 的当前位置预测的 goal point。 Q p o s MLP ( PE ( I s ) ) MLP ( PE ( I a ) ) MLP ( PE ( x ^ 0 ) ) MLP ( PE ( x ^ T l − 1 ) ) Q_{pos}\text{MLP}(\text{PE}(I^s)) \text{MLP}(\text{PE}(I^a)) \text{MLP}(\text{PE}(\hat{\mathbf{x}}_0)) \text{MLP}(\text{PE}(\hat{\mathbf{x}}_T^{l-1})) QposMLP(PE(Is))MLP(PE(Ia))MLP(PE(x^0))MLP(PE(x^Tl−1))
这里的正弦位置编码 P E ( ⋅ ) PE(\cdot) PE(⋅) 后跟着一个 MLP 用于编码位置点第一层的 I s I^s Is 设为 x ^ T 0 \hat{\mathbf{x}}_T^0 x^T0。场景级 anchor 代表了全局视角下之前时刻的运动统计agent 级 anchor 则在局部坐标捕捉可能的意图。它们都通过 k-means 算法对 ground-truth 轨迹的路径点做聚类从而缩小预测结果的搜索空间。起始点提供每个 agent 的位置编码而预测出的路径点则作为动态 anchor逐层不断地优化。
2.3 非线性优化
直接从一个不准确的检测位置或偏航角回归 ground-truth 的路径点会产生不真实的轨迹预测曲率和加速度可能会非常大。于是作者采用了一个非线性平滑方法来调节目标的轨迹使它们更加合理。该过程如下 x ~ ∗ arg min x c ( x , x ~ ) \tilde{\mathbf{x}}^\ast \argmin_{\mathbf{x}}{c(\mathbf{x}, \tilde{\mathbf{x}})} x~∗xargminc(x,x~)
其中 x ~ \tilde{\mathbf{x}} x~ 和 x ~ ∗ \tilde{\mathbf{x}}^\ast x~∗ 表示 ground-truth 和平滑后的轨迹 x \mathbf{x} x 通过 multiple-shooting 产生代价函数为 c ( x , x ~ ) λ x y ∥ x , x ~ ∥ 2 λ g o a l ∥ x T , x ~ T ∥ 2 ∑ ϕ ∈ Φ ϕ ( x ) c(\mathbf{x}, \tilde{\mathbf{x}})\lambda_{xy}\left\| \mathbf{x}, \tilde{\mathbf{x}} \right\|_2 \lambda_{goal} \left\| \mathbf{x}_T, \tilde{\mathbf{x}}_T \right\|_2 \sum_{\phi\in \Phi}{\phi(\mathbf{x})} c(x,x~)λxy∥x,x~∥2λgoal∥xT,x~T∥2ϕ∈Φ∑ϕ(x)
其中 λ x y \lambda_{xy} λxy 和 λ g o a l \lambda_{goal} λgoal 是超参数动力学函数集合 Φ \Phi Φ 有五项包括 jerk, curvature, curvature rate, acceleration, lateral acceleration。这个代价函数对目标轨迹起到正则的作用使其遵守动力学约束条件。目标轨迹优化只在训练时进行不影响推理。
3. 预测占用预测
占用网格图是离散化的 BEV 表征每个格子都有一个置信度表示该格子是否被占用。占用预测任务用于预测网格图在未来是如何变化的。OccFormer 从两个方面融合了场景级和 agent 级的语义信息
通过一个精心设计的注意力模块从密集场景特征学到 agent 级的特征对 agent 级特征和密集场景特征做矩阵乘法输出实例占用。
OccFormer 由 T o T_o To 个序列模块组成 T o T_o To 表示预测的长度。由于占用网格图过于密集这里的 T o T_o To 通常要小于运动任务中的预测长度 T T T。每个模块的输入包括丰富的 agent 特征 G t G^t Gt 和前一层的状态密集特征 F t − 1 F^{t-1} Ft−1然后输出 t t t 时刻的状态 F t F^t Ft。为了得到 agent 特征 G t G^t Gt我们在模态维度对 MotionFormer 的 motion queries 做最大池化记作 Q X ∈ R N a × D Q_X \in \mathbb{R}^{N_a\times D} QX∈RNa×D D D D 是特征维度。然后通过一个时域 MLP 将它与上游的 track query Q A Q_A QA 及当前位置编码 P A P_A PA 融合 G t MLP ( [ Q A , P A , Q X ] ) , t 1 , . . . , T o G^t \text{MLP}([Q_A, P_A, Q_X]), t1,..., T_o GtMLP([QA,PA,QX]),t1,...,To [ ⋅ ] [\cdot] [⋅] 表示 concat 操作。对于场景级信息出于计算效率考虑BEV 特征 B B B 会缩小到 1 / 4 1/4 1/4 分辨率作为第一个模块的输入 F 0 F^0 F0。为了进一步节约训练时内存占用每个模块都遵循下采样-上采样的方式在中间有一个注意力模块在 1 / 8 1/8 1/8 大小的特征记作 F d s t F_{ds}^t Fdst上进行 pixel-agent 交流。
3.1 Pixel-agent 交流
在预测未来占用网格图时Pixel-agent 交流用于统一对场景和 agents 的理解。将密集特征 F d s t F_{ds}^t Fdst 作为 queries实例级特征作为 keys 和 values 不断更新密集特征。 F d s t F_{ds}^t Fdst 输入一个自注意力层建模网格间的响应然后用一个跨注意力层建模 agent 特征 G t G^t Gt 和各网格的特征之间的关系。为了对齐 pixel-agent 的对应关系作者用一个注意力 mask 来约束跨注意力每个像素只关注于 t t t 时刻占据它的 agent。密集特征的更新过程如下 D d s t MHCA ( MHSA ( F d s t ) , G t , attn_mask O m t ) D_{ds}^t \text{MHCA}(\text{MHSA}(F_{ds}^t), G^t, \text{attn\_mask}O_m^t) DdstMHCA(MHSA(Fdst),Gt,attn_maskOmt)
注意力 mask O m t O^t_m Omt 语义上类似于占用网格图用一个额外的 agent 级特征和密集特征 F d s t F_{ds}^t Fdst 相乘得到我们将这个 agent 级特征叫做 mask 特征 M t MLP ( G t ) M^t \text{MLP}(G^t) MtMLP(Gt)。经过上述交流过程 D d s t D_{ds}^t Ddst 就上采样到了 B B B 的 1 / 4 1/4 1/4 大小。我们将 D d s t D_{ds}^t Ddst 通过残差连接加到模块输入 F t − 1 F^{t-1} Ft−1 上得到的结果 F t F^t Ft 再输入进下一模块。
3.2 实例级占用
它表示的是保留了每个 agent ID 的占用网格图。它可以通过简单的矩阵乘法提取。为了得到 BEV 特征 B 原始大小为 H × W H\times W H×W 的预测占用场景级特征 F t F^t Ft 通过一个卷积解码器上采样为 F d e c t ∈ R C × H × W F_{dec}^t \in \mathbb{R}^{C\times H\times W} Fdect∈RC×H×W其中 C C C 是通道维度。
对于 agent 级特征我们通过另一个 MLP 进一步将粗糙的 mask 特征 M t M^t Mt 更新为占用特征 U t ∈ R N a × C U^t \in \mathbb{R}^{N_a\times C} Ut∈RNa×C。实验表明 U t U^t Ut 要比 G t G^t Gt 带来更优的表现。最终 t t t 时刻的实例级占用表示为 O ^ A t U t ⋅ F d e c t \hat{O}_A^t U^t \cdot F_{dec}^t O^AtUt⋅Fdect
4. 规划
不带高精地图的规划一般需要高层级的指令来表示往哪个方向走。作者将原始的导航信号左转、右转、保持前进转换为三个可学习的 embeddings叫做 command embeddings。由于 MotionFormer 的自车 query 已经表达了多模态意图作者用 command embeddings 补充它得到 plan query。然后将 plan query 关注到 BEV 特征 B B B使它感知周围环境然后将其解码得到未来的路径点 τ ^ \hat{\tau} τ^。
为了避免碰撞只在推理时基于牛顿法来优化 τ ^ \hat{\tau} τ^ τ ∗ arg min τ f ( τ , τ ^ , O ^ ) \tau^\ast \argmin_{\tau}{f(\tau, \hat{\tau}, \hat{O})} τ∗τargminf(τ,τ^,O^)
其中 τ ^ \hat{\tau} τ^ 是原始的规划预测 τ ∗ \tau^\ast τ∗ 表示优化后的规划最小化代价函数 f ( ⋅ ) f(\cdot) f(⋅) 得到。 O ^ \hat{O} O^ 是经典的二值占用网格图从 OccFormer 的实例占用预测融合得到。代价函数如下 f ( τ , τ ^ , O ^ ) λ c o o r d ∥ τ , τ ^ ∥ 2 λ o b s ∑ t D ( τ t , O ^ t ) f(\tau, \hat{\tau}, \hat{O}) \lambda_{coord}\left\| \tau, \hat{\tau} \right\|_2 \lambda_{obs}\sum_t \mathcal{D}(\tau_t, \hat{O}^t) f(τ,τ^,O^)λcoord∥τ,τ^∥2λobst∑D(τt,O^t) D ( τ t , O ^ t ) ∑ ( x , y ) ∈ S 1 σ 2 π exp ( − ∥ τ t − ( x , y ) ∥ 2 2 2 σ 2 ) \mathcal{D}(\tau_t, \hat{O}^t)\sum_{(x,y)\in \mathcal{S}} \frac{1}{\sigma \sqrt{2\pi}}\exp(-\frac{\left\| \tau_t - (x,y) \right\|_2^2}{2\sigma^2}) D(τt,O^t)(x,y)∈S∑σ2π 1exp(−2σ2∥τt−(x,y)∥22)
这里 λ c o o r d , λ o b s \lambda_{coord}, \lambda_{obs} λcoord,λobs 和 σ \sigma σ 是超参数 t t t 是未来时刻的索引。考虑到周围的位置受到 S { ( x , y ) ∣ ∥ ( x , y ) − τ t ∥ 2 d , O ^ x , y t 1 } \mathcal{S}\left\{ (x,y) | \left\| (x,y)-\tau_t \right\|_2 d, \hat{O}_{x,y}^t1 \right\} S{(x,y)∣∥(x,y)−τt∥2d,O^x,yt1} 的限制 l 2 l_2 l2 代价函数将轨迹拉向原来预测的位置而碰撞项 D \mathcal{D} D 则将其推离开被占用的网格。
5. 学习
UniAD 训练包括两个阶段。首先协同训练感知部分即跟踪和建图模块训练 6 6 6 个 epochs。然后端到端训练感知、预测和规划模块共 20 20 20 个 epochs。
5.1 共享匹配
UniAD 包括实例建模所以在感知和预测任务上需要将预测结果和 ground-truths 配对。与 DETR 相似在跟踪和在线建图阶段它使用了二分匹配算法。至于跟踪检测 queries 的候选框会和新出现的 ground-truth 物体做配对track queries 的预测则会继承之前帧的配对结果。跟踪模块的匹配结果会在运动和占用节点复用从而持续地对历史跟踪的 agents 和未来的运动之间做建模。
6. 实现细节
6.1 检测和跟踪
继承了 BEVFormer 的大多数检测设计通过一个 BEV 编码器将图像特征变换为 BEV 特征 B B B再使用一个可变形 DETR 头对 B B B 做检测。为了避免繁琐的匹配后处理作者引入了一组 track queries持续地跟踪之前检出的实例。跟踪过程细节如下
6.1.1 训练阶段
训练开始时所有的 queries 默认为检测 queries预测新出现的目标这和 BEVFormer 一样。通过匈牙利算法将检测 queries 和 ground-truths 匹配起来。将它们保存起来在下一时刻通过 query interaction 模块QIM更新为 track queries。在下一时刻track queries 会根据对应的 track ID 直接匹配到部分的 ground-truth 目标而检测 queries 会匹配到其余的 ground-truths新出现的目标。为了让训练稳定采用 3D IOU 来过滤匹配到的 queries。只保存和更新那些与 ground-truth 框的 3D IOU 大于一定阈值的预测框。
6.1.2 推理阶段
推理时序列帧按顺序送入网络track queries 存在的时间可能要长于训练时的。另一区别就是 query 更新推理时使用分类得分来过滤 queries而非 3D IOU因为没有 ground-truths 了。此外为了避免由遮挡引发的短时间轨迹中断的情况在推理阶段使用了生命周期机制。对于每个 track query若它的分类得分低连续在 2 s 2s 2s 内于 0.35 0.35 0.35它就被认为完全消失则被移除。
6.2 在线建图
Map queries 被分为 thing queries 和 stuff queries。Thing queries 建模实例级的地图元素即车道线、边界、人行横道通过二分匹配来关联到 ground-truthsstuff queries 只负责语义元素即可行驶区域通过固定类别分配来处理。Thing queries 个数为 300 300 300stuff query 个数为 1 1 1。堆叠了 6 6 6 个位置解码层和 4 4 4 个 mask 解码层。选取位置解码器后的 thing queries 作为 map queries Q M Q_M QM 供下游任务用。
6.3 运动预测 MotionFormer 用 I T a , I T s , x ^ 0 , x ^ T l − 1 ∈ R K × 2 I_T^a, I_T^s, \hat{x}_0, \hat{x}_T^{l-1}\in \mathbb{R}^{\mathcal{K}\times 2} ITa,ITs,x^0,x^Tl−1∈RK×2 来编码 query 位置用 Q c t x l − 1 Q_{ctx}^{l-1} Qctxl−1 作为 query context。通过 k-means 算法对训练数据中所有的 agents 做聚类得到 anchors K 6 \mathcal{K}6 K6 与输出模态个数一样。为了编码场景先验根据各 agent 的当前位置和偏航角将 anchor I T a I_T^a ITa 旋转和平移到世界坐标系下记作 I T s I_T^s ITs I i , T s R i I T a T i I^s_{i,T} R_i I_T^a T_i Ii,TsRiITaTi
其中 i i i 是 agent 的索引。作者也使用了前一层预测的 goal point x ^ T l − 1 \hat{x}_T^{l-1} x^Tl−1使得更加准确。同时将 agent 当前的位置广播到其它模态记作 x ^ 0 \hat{x}_0 x^0。然后对每个先验位置信息应用 MLP 和正弦位置编码记作 query position Q p o s ∈ R K × D Q_{pos}\in\mathbb{R}^{\mathcal{K}\times \mathcal{D}} Qpos∈RK×D形状与 Q c t x Q_{ctx} Qctx 一样。 Q c t x Q_{ctx} Qctx 和 Q p o s Q_{pos} Qpos 一起构建了 motion query。在 MotionFormer 中 D 256 \mathcal{D}256 D256。
MotionFormer 有三个 transformer 模块agent-agent, agent-map, agent-goal point 关系模块。Agent-agent 和 agent-map 模块用标准的 transformer 解码层构建包括一个多头自注意力层、一个多头跨注意力层和一个前馈网络内部还有多个归一化层和残差连接。作者也在 Q A Q_A QA 和 Q M Q_M QM 中加入了正弦位置编码然后跟着 MLPs 层。Agent-goal 模块用可变形跨注意力层构建将之前预测轨迹的 goal point R i x ^ i , T l − 1 T i R_i\hat{x}_{i,T}^{l-1} T_i Rix^i,Tl−1Ti作为参考点使用如下图所示。每条轨迹的采样点点个数为 4 4 4每个 agent 有 6 6 6 条轨迹。将每个关系模块的输出特征 concat 到一起用 MLP 层映射成维度 D 256 \mathcal{D}256 D256。然后使用高斯混合模型构建每个 agent 的轨迹其中 x ^ l ∈ R K × T × 5 \hat{x}_l\in\mathcal{R}^{\mathcal{K}\times \mathcal{T}\times 5} x^l∈RK×T×5。预测时长 T 12 T12 T12约 6 6 6 秒。最终输出轨迹是最后一个维度的前两个值即 x , y x, y x,y。此外也要预测每个模态的得分 s c o r e ( x ^ l ) ∈ R K score(\hat{x}_l)\in \mathcal{R}^\mathcal{K} score(x^l)∈RK。将该模块堆叠 N 3 N3 N3 次。 6.4 占用预测
给定 BEV 特征首先用卷积层将其下采样 / 4 /4 /4然后输入 OccFormer。OccFormer 由 T o T_o To 个序列模块组成如下图所示。 T o 5 T_o5 To5 是时间长度包括当前和未来帧每个模块负责生成一帧的占用。该方法融合了密集场景特征和稀疏的 agent 特征。密集场景特征来自于最后一个模块的输出用卷积层进一步下采样 / 8 /8 /8降低 pixel-agent 的计算量。将 track query Q A Q_A QA, agent positions P A P_A PA 和 motion query Q X Q_X QX concat 到一起输入一个时域 MLP。计算像素级的自注意力对剧烈变化的场景所需的长期依赖关系做建模然后将每个像素点关注到对应的 agent做 scene-agent 融合。为了增强 agents 和像素之间的位置对齐用一个注意力 mask 来约束跨注意力该注意力 mask 通过计算 mask 特征和下采样后的场景特征的矩阵乘得到用一个 MLP 来编码 agent 特征以得到 mask 特征。然后将密集特征上采样到与输入 F t − 1 F^{t-1} Ft−1 相同的分辨率 / 4 /4 /4用残差连接将它和 F t − 1 F^{t-1} Ft−1 相加。得到的特征 F t F^t Ft 输入下一模块和卷积解码器以预测占用。复用 mask 特征输入另一个 MLP得到占用特征。对占用特征和解码的密集特征 F d e c t F_{dec}^t Fdect 做矩阵乘得到实例级的占用。注意在所有的 T o T_o To 模块中共享 mask 特征的 MLP 层、占用特征的 MLP 层和卷积解码器其它的组件则是独立的。在 OccFormer 中所有的密集特征和 agent 特征的维度都是 256 256 256。 6.5 规划
如下图planner 的输入是跟踪和运动模块预测的自车 query用蓝色三角和黄色矩形表示。用 MLP 层编码这俩 queries 和 command embedding然后是一个对模态维度做的 max-pool 操作选取并聚合模态最显著的特征。BEV 特征模块用标准的 transformer 解码层构建堆叠 N 3 N3 N3 层。它用聚合后的 plan query 对密集的 BEV特征做跨注意力。为了嵌入位置信息作者在 plan query 中加入了学到的位置编码在 BEV 特征中加入了正弦位置编码。然后用 MLP 层回归轨迹记作 τ ^ ∈ R T p × 2 \hat{\tau} \in \mathcal{R}^{T_p\times 2} τ^∈RTp×2。这里 T p 6 T_p6 Tp6 3 3 3 秒。此外根据预测占用 O ^ \hat{O} O^ 和轨迹 τ ^ \hat{\tau} τ^作者设计了碰撞机制。 Q A e g o Q_A^{ego} QAego 和 Q c t x e g o Q_{ctx}^{ego} Qctxego 是跟踪预测模块和运动预测模块。用 MLP 层对它们和 command 做编码然后是一个 max-pool 层选取并聚合最显著的模态特征。
6.6 训练细节
协同学习
UniAD 训练分两个阶段。第一阶段预训练感知任务包括跟踪和在线建图来稳定感知的预测。为了快速收敛加载了 BEVFormer 的主干、FPN、BEV 编码器和检测解码器的权重除了 object query embeddings。取消主干网络的梯度回传以降低内存占用训练 UniAD 共 6 6 6 个 epochs损失如下 L 1 L t r a c k L m a p L_1 L_{track} L_{map} L1LtrackLmap
第二阶段冻结图像主干和 BEV 编码器负责图像视角变换到 BEV 视角进一步降低内存消耗。这时UniAD 训练包括了所有的损失有跟踪、建图、运动预测、占用预测和规划训练 20 20 20 个 epochs。 L 2 L t r a c k L m a p L m o t i o n L o c c L p l a n L_2 L_{track} L_{map} L_{motion}L_{occ} L_{plan} L2LtrackLmapLmotionLoccLplan
检测和跟踪损失
对于每对结果采用匈牙利损失即类别标签的 Focal loss 和 3D 边框定位的 l 1 l_1 l1 损失的线性组合。匹配策略是用二分匹配将新出现的 queries 与 ground-truth 目标配对track queries 的预测结果则继承其上一帧的 ground-truth 索引。 L t r a c k λ f o c a l L f o c a l λ l 1 L l 1 L_{track}\lambda_{focal} L_{focal} \lambda_{l_1}L_{l_1} LtrackλfocalLfocalλl1Ll1
其中 λ f o c a l 2 , λ l 1 0.25 \lambda_{focal}2, \lambda_{l_1}0.25 λfocal2,λl10.25。
在线建图损失
包括一个 thing 损失车道线、间隔物和一个 stuff 损失可行驶区域。分类损失用的 focal lossthing 边框损失用的 l 1 l_1 l1 损失分割用的 Dice loss 和 GIOU loss。 L m a p λ f o c a l L f o c a l λ l 1 L l 1 λ g i o u L g i o u λ d i c e L d i c e L_{map}\lambda_{focal}L_{focal} \lambda_{l_1}L_{l_1} \lambda_{giou}L_{giou} \lambda_{dice}L_{dice} LmapλfocalLfocalλl1Ll1λgiouLgiouλdiceLdice
其中 λ f o c a l λ g i o u λ d i c e 2 , λ l 1 0.25 \lambda_{focal}\lambda_{giou}\lambda_{dice}2, \lambda_{l_1}0.25 λfocalλgiouλdice2,λl10.25.
运动预测损失
用高斯混合建模多模态轨迹使用 multi-path loss包括一个分类得分损失 L c l s L_{cls} Lcls 和一个 negative log-likelihood 损失 L n l l L_{nll} Lnll。为了确保轨迹是连续平滑的首先预测每一时刻各 agent 的速度然后随着时间不断累积它们得到最终的轨迹。 L m o t i o n λ c l s L c l s λ r e g L n l l L_{motion}\lambda_{cls}L_{cls} \lambda_{reg} L_{nll} LmotionλclsLclsλregLnll
其中 λ c l s λ r e g 0.5 \lambda_{cls}\lambda_{reg}0.5 λclsλreg0.5.
占用预测损失
输出的实例级的占用预测是每个 agent 的二值分割因此采用了二值交叉熵和 Dice loss 作为占用损失。 L o c c λ b c e L b c e λ d i c e L d i c e L_{occ} \lambda_{bce}L_{bce} \lambda_{dice}L_{dice} LoccλbceLbceλdiceLdice
其中 λ d i c e 1 , λ b c e 5 \lambda_{dice}1, \lambda_{bce}5 λdice1,λbce5.
规划损失
安全是规划的最重要因素因此除了朴素的 imitation l 2 l_2 l2 损失还用了一个碰撞损失让预测轨迹远离障碍物 L c o l ( τ ^ , δ ) ∑ i , t IOU ( b o x ( τ ^ , w δ , l δ ) , b i , t ) L_{col}(\hat{\tau}, \delta) \sum_{i,t}\text{IOU}(box(\hat{\tau}, w \delta, l\delta), b_{i,t}) Lcol(τ^,δ)i,t∑IOU(box(τ^,wδ,lδ),bi,t) L p l a n λ i m i ∣ τ ^ , τ ~ ∣ 2 λ c o l ∑ ( ω , δ ) ω L c o l ( τ ^ , δ ) L_{plan}\lambda_{imi}|\hat{\tau}, \tilde{\tau}|_2 \lambda_{col}\sum_{(\omega,\delta)}\omega L_{col}(\hat{\tau}, \delta) Lplanλimi∣τ^,τ~∣2λcol(ω,δ)∑ωLcol(τ^,δ)
其中 λ i m i 1 , λ c o l 2.5 \lambda_{imi}1, \lambda_{col}2.5 λimi1,λcol2.5 ( ω , δ ) (\omega,\delta) (ω,δ)是额外安全距离的权重值 b o x ( ⋅ , ⋅ , ⋅ ) box(\cdot,\cdot,\cdot) box(⋅,⋅,⋅)表示自车框在 t t t 时刻变大以保持较大的安全距离 b i , t b_{i,t} bi,t 表示场景中预测的每个 agent。实际使用时 ( ω , δ ) (\omega,\delta) (ω,δ)设为 ( 1 , 0 ) , ( 0.4 , 0.5 ) , ( 0.1 , 1 ) (1,0), (0.4, 0.5), (0.1, 1) (1,0),(0.4,0.5),(0.1,1)。