作者 | 一根呆毛 编辑 | 汽车人
原文链接:https://zhuanlan.zhihu.com/p/682073656
点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【轨迹预测】技术交流群
本文只做学术分享,如有侵权,联系删文
个人觉得这篇paper非常适合学习,因为
文章写得很清楚,没有跳步。
源码也很清楚,容易看懂。
详细介绍了很多复杂预测模型的基本原理,看完再看别的会更好理解。
原文链接:
https://openaccess.thecvf.com/content/CVPR2022/papers/Zhou_HiVT_Hierarchical_Vector_Transformer_for_Multi-Agent_Motion_Prediction_CVPR_2022_paper.pdf
Abstract
向量化地图能很好把握复杂的交互信息,但以往的方法缺乏对于对称性的使用(以每个agent为中心来看,应该是相同的建模),因此增加了很多运算。因此本文把预测问题解耦成agent的局部特征提取再全局的交互两步。场景表示是平移不变的,学习模块是旋转不变的,这样便可以应对几何变化,使得agent被一次性处理。对于小model来说,是很好的选择。
Introduction
对与agent的意图预测,很重要的就是利用好复杂交互。相比rasterized地图,向量地图的主要问题是在融合feature时不具备旋转平移不变性。以前的办法是把feature都转到agent的坐标系,这导致了在大量agent的情况下,算力吃不消的问题,因为需要在每个坐标系下去算相同向量的feature,有很多重复计算的部分。在时间和空间维度上,以前是一起处理的,这样运算量也很大。本文采取了多阶段的做法。
第一阶段:避免一口气处理interaction,只在agent local取feature
第二阶段:使用local feature的位置信息进行global的transformer交互
第三阶段:decoder处理local和global的feature来获得未来轨迹
为了利用好对称性,使用了平移不变的场景表示,然后又用了旋转不变的cross attention来处理空间上的交互。以上做法有这么几个好处:
通过local特征提取和global交互,实现了逐步融合信息,可以处理大量的元素。
此办法具有旋转平移不变性。
相比老办法会更加快且更加准。
Approach
Overall
第一步是对agent平移到自己的坐标系,连带着周围的信息。这样来提取agent自己的feature。
第二步是对不同agent进行全局的交互。
第三步是解码获得多模轨迹。

Scene Representation
所有场景元素都平移到agent自己的坐标系。

另外代码里也支持了旋转。
Hierarchical Vector Transformer
为了学习复杂的时空交互,采用transformer来处理。直接做时空的transformer的话,复杂度相当高,达到 O), 因为N个agent有T帧feature,然后L条lane也得放进来,这所有的token在transformer的矩阵乘法里会再平方一下。对于local特征来说,为了降低复杂度,把时空拆开,对于空间,只做每个时刻的local的融合。同时,也把空间分割成N个局部空间,每个空间是每个agent中心的local特征。
对于每一个空间,对agent和附近的agent在每个时刻cross mha融合。
然后进行时间维度的再一次mha融合,提取出agent的local feature。
再是agent和lane之间在当前帧的cross mha融合,这样得到了和周围各种信息充分融合的agent local feature。
总的复杂度是O(++NL). 第一项是对每个时刻的agent间交互,不做时间的交互。第二项是对每个agent的不同时刻交互。第三项是agent和lane的cross交互。
如果考虑到agent中心的某个范围,故而只选了附近的物体的话,总复杂度可以进一步下降。
Local Encoder
上面讲到的3步详细的介绍。
Agent-Agent Interaction
采用了旋转不变的cross attention来处理中心agent和附近agent交互。使用agent的最接近当前帧的位移作为朝向来旋转所有的物体。对于然后每一帧的位置和别的一些语义feature一起进入MLP获得这个agent在某个时刻的feature。

对于周围agent和当前agent的交互,叠加上周围agent和当前agent的相对位置,再过MLP提取交互的feature。

然后就可以做当前agent和附近agent的cross mha。

具体的做法是先计算当前agent在周围agent feature上的权重(可以理解为和哪些agent关系比较密切)。然后加权取周围agent上的feature。这就算是融合了agent和周围agent的交互信息。

然后使用了gate的概念来融合上面的交互信息和agent自己的信息。先是将交互信息和agent的信息融合起来过sigmoid,获得0-1的一个值,作为agent自己feature的比重。再加权在agent自己的feature和上面的交互feature,有效控制最后的agent feature中两种feature的比例。

以上步骤都是在每帧并行做的。
Temporal Dependency


Agent-Lane Interaction
lane的信息可以很好的引导意图的学习。先把地图信息根据agent的朝向旋转,每一帧包含了旋转后的lane线段向量,旋转后的lane起始点相对agent在T时刻的位置,以及地图元素的语义信息,对于每一帧都并行提取。

这样获得的多个lane和agent的交互feature作为key和value,而上一步的结果作为query,这样进行cross mha。最后的就能得到agent的融合后feature了。
Global Interaction Module


然后进行cross mha,其中和分别表示上一步得到的融合后的agent local feature。对于agent i来说,就是用i作为query去加权获得其和另一个别的agent的交互结果。

Multimodal Future Decoder

Laplace分布
相比normal dist,不使用平方,而使用绝对值来处理目标值和平均值的差,这个分布在目标值附近会更集中,尾部会更平。

Training
先计算所有模态里和gt的距离最近的预测结果,计算方式是每个时刻的误差加起来,得到[F, N]的结果,对每个agent选出最小结果,我们只优化离gt最近的预测模态。loss由两部分组成

回归loss的计算方式为

直白的解释的话就是把gt转到agent坐标系,然后计算gt和学到的laplace分布的差(把gt坐标代入laplace分布求值)。因为假设了时间独立,agent独立,因此需要把这个loss乘起来,所以用log后求和来避免特小值。负号确保越接近gt的loss是越小的。
分类loss控制模态概率学习。做法是计算每个模态和gt的差之和,离gt越近的模态算到的值越小,所以取负号使得越接近的模态值越高,然后用softmax计算出一个soft过的one hot label。于是就可以和预测概率去算交叉熵loss了。
投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!
① 全网独家视频课程
BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、车道线检测、轨迹预测、在线高精地图、世界模型、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、大模型与自动驾驶、Nerf、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习)

② 国内首个自动驾驶学习社区
近2400人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)
④【自动驾驶之心】平台矩阵,欢迎联系我们!