预测问题-机动车轨迹预测

此处提供了一个针对“预测问题-机动车轨迹预测任务”的上手示例,示例针对SinD数据集采用LSTM模型进行训练,最终采用FDE、ADE作为指标进行轨迹预测结果评价。完整项目的下载链接为:https://pan.baidu.com/s/1JFcVBdt22TW14haRBn1Oxg?pwd=n3gq

以下给出了模型介绍代码解读,点击右侧在线运行代码。

模型介绍

1. 模型概述:

LSTM Encoder-Decoder是最常见的sequence-to-sequence(seq2seq)模型,最早由2014年的经典论文《Sequence to Sequence Learning with Neural Networks》提出,被引量已经过万。该模型的基本思想是用一个RNN网络(编码器)来将输入的序列编码为一个固定长度的向量(context vector),该向量可以被视为整个输入序列的一个抽象表示,然后将该向量作为另一个RNN网络(解码器)的初始输入,并输出任意长度的目标序列。在机动车的轨迹预测任务中,输入为观测到的车辆历史轨迹信息,输出为预测的未来车辆轨迹。

2. 模型架构:

  • Encoder采用了一层全连接层,四层LSTM,并且采用了dropout来降低过拟合;
  • Decoder的结构和Encoder的结构基本一致,区别在于Decoder每次接受输入的序列长度只有1,然后每次Decoder的输出都作为下一个时间点的预测。
  • 最终的Seq2Seq模型结合了Encoder和Decoder,Encoder将输入的所有历史时间步的轨迹编码为一个context vector,然后将其作为Decoder的初始输入,并将Encoder最终的hidden state和cellstate作为Decoder初始的hidden state和cell state,重复使用Decoder来预测下一个时间点的预测,最终输出所有未来时间步的预测轨迹。

3. 具体实现:

  • 数据预处理:主要是从csv格式的数据中提取和整理轨迹信息,采用前后时刻的位移矢量而非绝对坐标作为模型输入。
  • 训练:采用常用的teacher-forcing技巧,即训练的时候Decoder的输入按照一定概率为上一次的输出或者真实的当前时间点的数据,使得网络能够一定程度上避免时序预测的缺陷(初始预测偏离而导致后续结果受到影响)。
  • 测试/评估:使用训练好的模型对所有测试数据进行预测,计算出所需的评价指标。为了保证评估结果的客观性,不使用teacher-forcing。
  • 可视化:使用训练好的模型对部分测试数据进行预测,绘制出历史轨迹、真实轨迹和预测轨迹。

代码解读

0. 准备工作:

  • 设备要求:Windows/Linux环境下运行,预装Anaconda/Miniconda;
  • 若有英伟达的独立显卡且配置好cuda核,默认采用独立显卡进行训练,否则采用cpu进行;
  • 单张4070Ti训练500轮大概需要8min,项目中给出了训练好的案例模型,即results/model/example_best_seq2seq.pt
  • 采用的是SinD数据集中提取的部分左转车辆的轨迹片段,数据量较小,代码中的data文件夹已经给出,不需要额外进行下载。

1. 环境配置:

Copy to Clipboard

2. 数据预处理:

Copy to Clipboard
  • dataset_path: 原始数据存放路径
  • hist_len: 历史轨迹步数
  • fut_len: 预测的未来轨迹步数
  • output_path: 预处理好的存放路径

3. 模型训练:

Copy to Clipboard
  • input_path: 经过预处理的数据的存放路径
  • model: 采用的模型
  • epochs: 训练轮数
  • saved_model_path: 训练好的模型的存放路径

4. 模型评估:

Copy to Clipboard
  • input_path: 经过预处理的数据的存放路径
  • saved_model_path: 训练好的模型的存放路径
  • metrics: 评价指标

5. 部分场景可视化:

Copy to Clipboard
  • input_path: 经过预处理的数据的存放路径
  • saved_model_path: 训练好的模型的存放路径
  • vis_id: 可视化的场景编号

完整DEMO

Copy to Clipboard
Copy to Clipboard