论文阅读:端到端自动驾驶UniAD详解(一)

UniAD概览

BEV特征提取

采用BEVFomer模型结构,对环视图像提取BEV特征,如下图所示

数据流过程:

  1. t t t时刻的 N N N张环视图像,经过图像Backbone(例:ResNet-101)得到 N N N张图像对应的特征: F t = { F t i } i = 1 N F_t=\{F_t^i\}^{N}_{i=1} Ft={Fti}i=1N,其中 F t i F^i_t Fti表示 t t t时刻的第 i i i个视角的图像的特征;

  2. t − 1 t-1 t−1时刻的BEV特征 B t − 1 B_{t-1} Bt−1和BEV queries Q b e v Q_{bev} Qbev (预先定义的维度与BEV特征一致的可学习参数),经过时序自注意力机制(TSA, temporal self-attention)模块,得到经过TSA后的BEV queries Q b e v Q_{bev} Qbev

Q b e v = D e f o r m A t t e n ( Q b e v , B t − 1 , B t − 1 ) Q_{bev}=\mathrm{DeformAtten}(Q_{bev},B_{t-1},B_{t-1}) Qbev=DeformAtten(Qbev,Bt−1,Bt−1)

  1. TSA后的BEV queries Q b e v Q_{bev} Qbev 和 F t { F t i } i = 1 N F_t\{F_t^i\}{i=1}^{N} Ft{Fti}i=1N,经过空间交叉注意力机制(SCA, Spatial Cross-Attention)模块,得到经过SCA后的BEV queries Q b e v Q{bev} Qbev

Q b e v = D e f o r m A t t e n ( Q b e v , F t , F t ) Q_{bev}=\mathrm{DeformAtten}(Q_{bev},F_{t},F_{t}) Qbev=DeformAtten(Qbev,Ft,Ft)

  1. 经过6个(TSA+Norm+SCA+Norm+FF+Norm)的组合模块之后,输出 t t t时刻的BEV特征 B t B_t Bt.

其中 D e f o r m A t t e n ( Q , K , V ) \mathrm{DeformAtten}(Q,K,V) DeformAtten(Q,K,V)表示,以 Q Q Q为查询向量信息源, K K K为键的信息源, V V V为值的信息源的Deformable Attention机制算子。

TrackFormer

TrackFormer基于MOTR模型的整体结构,将原模型中每帧的2D图像输入,改为BEV特征作为输入,如下图所示

TrackFormer将上图中的Video Stream的每一帧图像和Enc模块,替换为上一步由BEV特征提取模块得到的 B B B,即每帧的BEV特征。

从时序的BEV特征输入,经过MOTR模型推理,到输出目标轨迹,需要经过以下步骤:

  1. T 1 T_1 T1时刻的BEV特征 B t 1 B_{t_1} Bt1,与Detect Query q d q_d qd一起作为输入,经过Transformer Decoder解码器,得到Hidden States(隐状态),同时输出 T 1 T_1 T1帧的目标和轨迹;

  2. Hidden States再经过QIM(查询交互模块)得到 T 2 T_2 T2帧的Tracked Query q t r q_{tr} qtr;

  3. Detect Query q d q_d qd与 T 2 T_2 T2帧的Tracked Query q t r q_{tr} qtr进行拼接,与 T 2 T_2 T2帧的图像特征,一起输入到Transformer Decoder解码器,得到 T 2 T_2 T2帧的Hidden States,同时输出 T 2 T_2 T2帧的目标和轨迹;

  4. 循环执行上述步骤,根据 T i T_i Ti帧的状态信息,进行 T i + 1 T_{i+1} Ti+1帧的轨迹预测, i = 2 , 3 , 4 , ... i=2,3,4,\dots i=2,3,4,...

Detect Query和Track Query

Detect Query是一个可学习的查询向量,维度为 N d e t ∗ d N_{det}*d Ndet∗d, N d e t N_{det} Ndet为最大检测目标个数,长度固定, d d d为负责每个目标的查询向量长度。它负责检测第一次出现的目标。

Track Query是一个可学习的查询向量,维度为 N t r ∗ d N_{tr}*d Ntr∗d, N t r N_{tr} Ntr为当前存在目标轨迹个数,长度随着目标轨迹的产生和消失而变动, d d d为负责每个目标轨迹的查询向量长度。它负责维护目标的轨迹信息。

Detect Query和Track Query拼接起来,一起作为查询向量,结合由BEV特征 B B B产生的键和值,参与到Transformer Decoder模块,负责检测新出现的目标和维护已有目标的轨迹。

QIM(查询交互模块)

此模块负责目标轨迹的产生和消失,维护轨迹的生命周期。

训练阶段,通过匈牙利匹配算法,Detect Query与Ground Truth中第一次出现的目标,根据两者的IoU大小进行Bipartite matching配对,确定每个位置负责检测的目标框;Track Query与Ground Truth中对应轨迹ID的目标,根据两者IoU大小进行进行Bipartite matching配对。

推理阶段,Detect Query根据检测框的阈值大小来确定要保留的检测,而Track Query中,需某个目标轨迹的阈值持续低于某个值一段时间后,才进行删除。

MapFormer

采用Panoptic SegFormer模型结构的transformer encoer模块、location decoder模块和mask decoder模块,对环视图像的BEV特征进行全景分割,得到map信息: lanes,、boundaries、pedestrian crossings和 drivable area.

数据流过程:

  • 环视图像的BEV特征,经过Flatten之后,作为Featue Token,输入到Transformer Encoder模块,得到Encoder的输出 F F F;
  • F F F与 N t h N_{th} Nth个 Things Queries,输入Location Decoder模块,得到 N t h N_{th} Nth个 location-aware Things Queries;
  • N t h N_{th} Nth个 location-aware Things Queries和 N s t N_{st} Nst个 Stuff Queries,输入Mask Decoder模块,得到每类的分割mask和对应的分类;

MotionFormer、OccFormer和Planner

除了上述模块之外,UniAD还包括MotionFormer模块、OccFormer模块和planner模块,我将在此系列文章的第二篇中进行详细讲解:

  • MotionFormer捕获B+物体+地图之间的交互信息(作为k和v),并预测每个物体的未来轨迹,由于场景中每个物体的行动可能会对其他物体产生重大影响,该模块为所有考虑的物体做出联合预测。
  • 同时,我们设计了一个自车查询,以明确地对自车进行建模,并与其他物体交互。
  • OccFormer使用BEV特征B作为查询,物体motion信息作为k和v,并且预测物体未来occupancy的情况
  • 最后,Planner使用来自MotionFormer的表达性自车查询来预测规划结果,并通过避开OccFormer预测的占用区域来避免碰撞。
  • Planner 利用来自MotionFormer的自车查询来预测规划结果,并将其自身远离OccFormer预测的占用区域,以避免碰撞。
相关推荐
benben04411 分钟前
强化学习之DQN算法族(基于gymnasium开发)
算法
code_pgf1 小时前
端到端自动驾驶 BEV stack
人工智能·机器学习·自动驾驶
何以解忧,唯有..1 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
Godspeed Zhao2 小时前
Level 4自动驾驶系统设计3——功能与场景3
人工智能·机器学习·自动驾驶
想吃火锅10052 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室3 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8213 小时前
算法复键——树状数组
数据结构·算法
H178535090963 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
Godspeed Zhao3 小时前
现代智能汽车系统——智驾SoC之框架版图
人工智能·机器学习·自动驾驶·汽车·soc