返回列表

22nd place journey : a completely different motion prediction approach

405. Lyft Motion Prediction for Autonomous Vehicles | lyft-motion-prediction-autonomous-vehicles

开始: 2020-08-24 结束: 2020-11-25 自动驾驶决策规划 数据算法赛
第22名之旅:一种完全不同的运动预测方法

第22名之旅:一种完全不同的运动预测方法

作者: kkiller (Master) | 排名: 第22名 | 发布时间: 2020-11-26

首先,非常感谢 Kaggle 团队和 Lyft 团队举办了这次比赛,并祝贺所有的获胜者!也要感谢我的队友,特别是 @doanquanvietnamca,感谢他在过去这艰辛的3个月里的辛勤工作和付出。

利用 PointNet 架构预测智能体运动...

我们的想法主要基于 PointNet 架构。我们完全抛弃了 L5kit 包,直接处理原始数据,将其转换为形状为 (num_mini_scenes, max_agents_on_frame, num_backward_frames, num_features) 的 4D 张量。这些张量在 n_batches 场景上进行拼接,并输入到 PointNet 架构中。通过使用单个 PointNet 模型,我们能够达到 21.xx 的分数,但随后事情变得更难,我们陷入了瓶颈。

突破性的想法

为了稍微提升模型性能,我们设法堆叠了许多 PointNet 模型。这是可行的,因为 PointNet 非常轻量级。每个模型会回顾智能体历史中有限的时间步长,并输出场景的嵌入,然后将这些嵌入投影到较低维度的空间并进行拼接。一个简单的全连接层负责输出最终的 300+3 个预测。

我们最好的模型由 4 个堆叠模型组成,分别回顾智能体历史中的 10、5、3 和 1 帧。对于没有足够帧数的智能体,我们使用简单的零填充。凭借那个巨大的 PointNet 模型(约 4000 万参数),我们在公共排行榜上达到了 13.353 分,在私人排行榜上达到了 12.912 分。

自定义损失函数与训练

我们实现了竞赛损失函数的自定义版本,当智能体离开场景时,其损失将被忽略。这个自定义损失允许我们尝试诸如样本权重、惩罚等措施。我们使用 pytorch-lightening 来简化流程。我们主要在 Colab 上进行训练,考虑到竞赛数据集的巨大规模,Colab 简直太棒了。优化器是经典的 Adam,配合阶梯式学习率调度器,没有什么花哨的东西。

那些没起作用的方法

  • 样本权重
  • Bagging(装袋):我们尝试了很多想法,但都失败了 :(
  • RNN:我们尝试在时间堆叠模型上使用 LSTM,但没有成功
  • 更长的历史:增加历史步长导致结果变差(可能是因为我们的零填充策略带来了太多的零值)

我们模型的优势

  • 模型非常快,单模型的整个推理过程仅需 14 分钟,堆叠十几个模型也不到 30 分钟。
  • 在 Colab Tesla-V100 单 GPU 上,使用轻量级 PointNet 模型训练整个 train_full 只需 30 分钟,使用 4 个堆叠模型只需 1 小时 30 分钟。

模型的缺点

  • 我们的 PointNet 实现完全忽略了车道线信息,尽管我们在某种程度上设法结合了红绿灯信息。

我们想尝试的事情

  • 从 PointNet 转向其他点云模型或基于体素的模型(如 PointCNN、Point-Voxel、ShapeNet 等)。
  • 堆叠与迁移学习:使用我们最好的模型作为嵌入器,并在其之上训练一个简单的模型。
  • 将我们的模型与其他图像栅格化模型结合(这可能使 PointNet 能够感知车道线)。
  • 3D 卷积。

PS:由 @doanquanvietnamca 编写的推理代码可在 这里 找到。

同比赛其他方案