admin管理员组

文章数量:1589951

车辆轨迹/行为预测方向硕士在读,以后会经常更新该方向的经典论文精读,感兴趣的朋友可以点个关注,有不准确的地方还请各位大佬批评指正!


摘要:

改进了之前提出的GRIP方案。(GRIP:使用图结构来表示接近对象的交互,应用多个图卷积块来提取特征,然后使用编码器解码器LSTM模型进行预测。


1.引言:

不同traffic agents具有不同的运动模式它们行为也会相互影响;

提出了GRIP++,利用固定图和动态图来捕捉不同类型traffic agents之间的复杂交互(并且编码器解码器改用了GRU),以提高轨迹预测的准确性。


2.相关工作

传统的经典轨迹预测方法:(贝叶斯网络、蒙特卡洛模拟隐马尔可夫模型很少考虑对象之间的交互和环境上下文信息;

目前基于深度学习的预测模型:

LSTM-CNN:缺点:计算成本高

CNN:将鸟瞰 LiDAR 数据作为输入,并处理跨空间和时间的 3D 卷积缺点:拥堵环境表现不佳

LSTM:输入为TV和SV的轨迹历史,输出为机动分类;缺点:机动类型分类错误时对模型性能影响较大。


3.问题表述

一句话描述就是:根据场景中所有对象的历史轨迹数据去预测场景中所有对象的未来位置

输入:X(场景中所有可观测对象的历史轨迹数据)过去的th个时间步

输出:Y所有可观测对象的未来位置 从th+1到th+tf共tf个时间步


4.解决方案

GRIP++由三部分组成:(1) 输入预处理模型,(2) 图卷积模型,和 (3) 轨迹预测模型。

(1) 输入预处理模型

①输入表示:

过去第 th 个时间步观察到交通场景中的 n 个对象,我们将这些信息表示在一个大小为 (n×th×c) 的 3D 数组 Finput 中。(其中c=2来指示对象的x,y坐标)。预测物体的速度比预测其位置更容易,我们在将数据输入模型之前计算速度 (pt+1 −pt);

图构建

G={V,E}

节点集V是n个智能体在th个时间步上的状态集合:

边集E包含两部分:空间边集Es和帧间边集Ef 

其中D是一个范围,只有traffic agents之间的距离小于Dclose时,才说它们属于D

使用邻接矩阵 A = {A0, A1} 表示该图,其中 A0 是表示时间空间中的自连接的单位矩阵 I,A1 是空间连接邻接矩阵(A0和A1均为nxn的方阵。因此,在任何时间 t,

(2)图卷积模型

在该Graph Convolutional Model中的每个Graph Operation层的末尾添加一个Temporal Convolution层,以在空间和时间上交替处理输入数据;

首先第一个卷积层用来将二维输入数据(x,y 坐标)映射到更高维空间,这有助于模型学习轨迹预测任务的良好表示;

批量归一化层用于提高我们模型的训练稳定性;

跳跃连接(绿色折线)用于确保模型可以将更大的梯度传播到初始层。

①图操作层

用于考虑traffic agents之间的交互,包含两部分:

        “固定图”(图 1 中的蓝色图形符号)

        “可训练图”(图1中Graph Operation层后的红色图形)

将固定图A进行归一化:

之后进行如下运算:

其中Fgraph是图操作层的输出,fconv是上一卷积层的输出。

②时间卷积层

将时间卷积层的内核大小设置为 (1 × 3),以强制它们沿时间维度(第二维度)处理数据。

(3)轨迹预测模型

输入:图卷积模型的输出(即图特征);

输出:对象在未来所有预期时间步 (tf) 的位置。

使用序列到序列(Seq2Seq)的结构

每一个解码步骤,都会添加一个“Last History”作为输入,(即上一时间步对象的坐标)

在解码器 GRU 的每个单元格的输入和输出之间添加残差连接(图 1 中的蓝色虚线)来强制模型预测速度的变化。因为很少有交通对象以恒定速度移动

在每个时间步对结果(预测速度)进行平均因为有多个编码器-解码器块,对这些块的结果进行平均。在得到平均预测速度后,我们将它们 (Δx, Δy) 添加回上一个历史位置 (p(th)),将预测结果转换为 (x, y) 坐标。


GRIP++ 和 GRIP 之间的主要区别是

• GRIP++ 将速度 (Δ x, Δ y) 作为输入,而 GRIP 将 (x,y) 坐标作为输入

• GRIP++ 考虑固定图和可训练图,而 GRIP 仅考虑图卷积中的固定图子模块。

• GRIP++ 在图形卷积模型中使用 3 个块并添加批量归一化,而 GRIP 在图形卷积模型中使用 10 个块而没有批量归一化层。此外,GRIP++ 使用跳连接。

• GRIP++ 使用 GRU 网络,而 GRIP 使用 LSTM 网络。 GRIP++ 还使用三个编码器-解码器块进行轨迹预测并对结果进行平均,而 GRIP 仅使用单个编码器-解码器块进行轨迹预测。

(4)实现细节

使用python和pytorch库

处理的是EV附近±90英尺的交通场景(大概±27.5米)

Dclose=25英尺(7.6米)

在每次图操作后执行了dropout,概率是0.5

编码器和解码器都是双层GRU(门控循环单元)网络。我们将这两个 GRU 的隐藏单元数设置为输出维度的 r 倍(r×2×n,其中 r 用于提高表示能力,n 是对象的数量,2 是 x,y 坐标).选择 r = 30 以获得最佳性能

将模型训练视为回归任务,loss为:

Batchsize设为64


5.实验

Ubuntu 16.04、4.0GHz Intel Core i7 CPU、32GB 内存和 NVIDIA Titan Xp

在三个数据集上进行了训练和评估:NGSIM I-80、US-101、ApolloScape Trajectory

这部分太多,主要挑一些我认为的比较重要的点来说一说:

Dclose是之前设置的阈值,当对象之间小于这个阈值时我们认为它们可以相互影响。RMSE(均方误差)是模型准确性的评价指标,越小越好 

从图中我们可以看出,当Dclose为0时(即不考虑对象之间的交互),误差会很大,当设为25或50英尺时,误差明显变小,但两者差距甚微,说明只有近距离的对象才会互相产生影响。

你可以把这张图理解为车道的俯瞰图,车道方向为左右方向,0的位置为EV(自车)的位置。可以发现对后方对象的预测误差要明显小于前方对象的误差,这说明对于模型来说,观察前方对象比后方对象更重要。

从上到下可以看作调优的过程,也是GRIP++的进化历史

计算时间相较于其他模型缩短了很多。


总结

使用历史轨迹数据作为输入并将原始数据抽象为图结构添加在网络的训练中,使模型既能够考虑对象之前的运动模式又能够考虑到对象之间的相互影响和交互,并且图结构的数据处理时间相较于BEV或原始图像数据可以大大缩短,使得预测时间大大缩短,并且能够预测场景内所有对象的轨迹,模型的性能也极为优秀。


论文源码:GitHub - xincoder/GRIP

本文标签: 论文GraphBasedGRIPEnhanced