Do not blindly trust anything I say, try to make your own judgement.
目录
1. 自动驾驶任务浅述
自动驾驶任务分为perception、prediction、planning三个阶段,目前大部分工作只单独考虑其中一个阶段,也有的工作在打通两两或三者之间的通路:例如把perception和prediction结合,直接end-to-end地用vision和lidar数据做tracking和prediction,去掉了用原始数据处理成HD map的过程,参考ViP3D;还有将prediction和planning结合,比如用pretrained transformer-based model,在考虑prediction得到的轨迹的基础上做决策,这部分用到RL的场景比较多,参考Imagination-Augmented Agents。
perception的工作我目前主要了解的是用原始数据对地图和位姿建模,有rule-based的SLAM如Lego Loam和Leo Sam,也有learning-based的SLAM,还有2D转3D的工作如DETR3D,但理解不多,等以后再补。
prediction的工作主要是从HD地图数据,包括车和行人的历史轨迹,预测出目标车辆的未来轨迹。prediction目前还都是open-loop的控制,它一次性预测了整条轨迹而没有迭代式的反馈,而只是用ground truth做监督,因此能否使得预测的轨迹具有真实性、自恰性、在交互中的合理性,是当前最大难点;
planning的工作主要是执行close-loop的sequential decision,它一般不会考虑当前状态以前的历史轨迹,方法上一般用到model-based RL:agent与环境交互,学习一个表示环境的model(forward or inverse dynamic model),就可以在每个t时刻,输入当前状态、历史状态以及目标goal点,输出一个序列的actions使得agent从当前点到达目标点。由于sequential decision的建模与NLP任务相似,因此现在都会用transform来做backbone,例如Decision Transformer。
Embodied AI做的工作和planning比较相似,它以vision作为state,用NLP处理指令,用CLIP将指令关联到state上,然后和环境交互,导航到目标goal点,区别是Embodied AI以机器人或游戏agent为载体、以vision为sate,以更高层的文本指令表示goal点、且会用到AI大模型如GPT-3、ViT、CLIP等,目前的工作有LM-Nav、Say Can、MINEDOJO、VPT、LATTE等。
2. 轨迹预测任务
motion prediction task需要对intent和control两个部分建模,intent对长远意图建模,control对实际路线建模。intent的建模比较难,常见方法有:1)人为定义lane change left/right和lane keep等几种意图,2)用goal-based的方法先在heatmap上确定goal点,3)无监督建模intent,4)CVAE生成式模型来对intent建模等。
目前大多数的trajectory prediction的方法主要分为三个模块:agent encoding, map encoding, trajectory decoding。
2.1 agent encoding
agent encoding用于提取轨迹时序信息以及轨迹间的交互信息,常用的模块有LSTM, GAT和Transformer encoder;
2.2 map encoding
map encoding用于提取HD map中车道线和交通灯的信息,常用模块由map represention而定。map representation目前有rasterized map和vectorized map两种:
1) rasterized map(栅格地图)就是给地图中每个pixel赋予一个类别标签,这有利于使用像素层面的处理如CNN或MLP,但对于自动驾驶来说并不是好的表征形式;
2)vecterized map把图中的所有的车道线、车和人的轨迹等对象用polylines表示,这样一个map就是一个polylines集合,而每条polyline包含一个序列的节点,每个节点相当于是polyline的一小段(segment),节点包含了segment的起点和终点以及其他信息,这就表示了节点的连接顺序,便于在GNN中建立交互关系。这样对象化的表示,就方便用GNN和Transformer来提取polyline内的时序信息和polylines之间的交互信息,这就是目前广泛应用的VectorNet的框架。
过往的vecterized map是先将传感器数据处理成rasterized map,然后编写程序处理成vectorized map,而目前有工作采用learning-based的方法直接从传感器数据检测出polylines set生成vectorized map,如HDMapNet, VectorMapNet,前者需要一些hand-designed post-preprocess算法,而后者直接端到端地生成地图。
2.3 trajectory decoding
trajectory decoding用于根据encoder提取的信息,输出预测的轨迹,常用的方法有regression-based, goal-based,heatmap-based,set-based四种。
1)regression-based: 又称variety loss,这种方法在训练的时候输出K条轨迹及对应的可能性logits,然后用离ground truth最近的那条轨迹与ground truth计算regression loss;同时以这条轨迹作为分类任务的label更新分类器(称为hard assignment,强制设置某一个类别为label),当然也可以用soft assignment,直接以K条轨迹到ground truth的距离作为分类概率,就不需要专门训练分类器了。这类模型有Scene Transforemr, Lapred, TPCN等。这种方法的缺点是没有对agent的intent做显示建模,直接端到端地训模型,缺乏可解释性,不适合落地,但在目前官方的metric上模型效果也很好。
2)anchor-based: 先人工定义或在数据集上聚类得到一些anchors,用来表征agents的intent,然后基于每个场景对anchors做分类,从而选取可行的anchors,然后回归anchors每个点的偏移dx, dy。这类模型有Multipath等。这种方法用anchor来表示intent,但始终是有人为定义和筛选的因素在里面,因此不够合理;而multipath++采用可学习的anchor,让模型自己学习特定场景中合适的anchors,类似于DETR中的object query,直接end-to-end输出bounding box而不需要anchors,因此可学习的anchors本质就是可学习的position encoding。
3)heatmap-based或goal-based:先生成一个goal点的heatmap,表示所有可能的goal点的概率,然后用greedy类的算法、或以metric为优化目标求解优化问题、或用神经网络来选取K个最优的goal点,然后训一个轨迹生成器,基于goal点生成轨迹,而这就相当于训了一个inverse dynamic model。这类模型有DenseTNT, GOHOME等。这种方法具有很强的可解释性,但goal点的选取区域会很大程度依赖于车道信息,如果某个车没有沿着车道走,或者车附近的车道线缺失了,就不太好确定goal点,而且稠密的goal点区域也会带来很大的计算量。
4)set-based:输出轨迹的表示形式换成了GMM,未来轨迹的每个点都对应一个Gaussian Model,用均值μ和方差表示该点的分布,loss就从regression loss改成了negative log likelihood,相当于建模成set prediction的任务。这样的好处在于,轨迹预测的不确定性和随机性是非常大的,regression loss训练的模型的variance太小了,过于绝对地拟合到训练集中的轨迹分布,而用negative log likelihood来训练则可以给所有可能的预测结果都分配一个很低的cost,使模型更加鲁棒和泛化。这类模型有WIMP,Multipath++, KEMP,TENET等,基本都是近年各数据集的第一名。用GMM的表示方式也适合用ensemble learning,训练多个模型取最接近ground truth的K个结果。