UniAD概览
BEV特征提取
采用BEVFomer模型结构,对环视图像提取BEV特征,如下图所示
数据流过程:
-
时刻的张环视图像,经过图像Backbone(例:ResNet-101)得到张图像对应的特征:,其中表示时刻的第个视角的图像的特征;
-
时刻的BEV特征和BEV queries (预先定义的维度与BEV特征一致的可学习参数),经过时序自注意力机制(TSA, temporal self-attention)模块,得到经过TSA后的BEV queries
- TSA后的BEV queries 和,经过空间交叉注意力机制(SCA, Spatial Cross-Attention)模块,得到经过SCA后的BEV queries
- 经过6个(TSA+Norm+SCA+Norm+FF+Norm)的组合模块之后,输出时刻的BEV特征.
其中表示,以为查询向量信息源,为键的信息源,为值的信息源的Deformable Attention机制算子。
TrackFormer
TrackFormer基于MOTR模型的整体结构,将原模型中每帧的2D图像输入,改为BEV特征作为输入,如下图所示
TrackFormer将上图中的Video Stream的每一帧图像和Enc模块,替换为上一步由BEV特征提取模块得到的,即每帧的BEV特征。
从时序的BEV特征输入,经过MOTR模型推理,到输出目标轨迹,需要经过以下步骤:
-
时刻的BEV特征,与Detect Query 一起作为输入,经过Transformer Decoder解码器,得到Hidden States(隐状态),同时输出帧的目标和轨迹;
-
Hidden States再经过QIM(查询交互模块)得到帧的Tracked Query ;
-
Detect Query 与帧的Tracked Query 进行拼接,与帧的图像特征,一起输入到Transformer Decoder解码器,得到帧的Hidden States,同时输出帧的目标和轨迹;
-
循环执行上述步骤,根据帧的状态信息,进行帧的轨迹预测,
Detect Query和Track Query
Detect Query是一个可学习的查询向量,维度为,为最大检测目标个数,长度固定,为负责每个目标的查询向量长度。它负责检测第一次出现的目标。
Track Query是一个可学习的查询向量,维度为,为当前存在目标轨迹个数,长度随着目标轨迹的产生和消失而变动,为负责每个目标轨迹的查询向量长度。它负责维护目标的轨迹信息。
Detect Query和Track Query拼接起来,一起作为查询向量,结合由BEV特征产生的键和值,参与到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的输出;
- 与个 Things Queries,输入Location Decoder模块,得到个 location-aware Things Queries;
- 个 location-aware Things Queries和个 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预测的占用区域,以避免碰撞。