405. Lyft Motion Prediction for Autonomous Vehicles | lyft-motion-prediction-autonomous-vehicles
首先,非常感谢 Kaggle 团队和 Lyft 团队举办了这次比赛,并祝贺所有的获胜者!也要感谢我的队友,特别是 @doanquanvietnamca,感谢他在过去这艰辛的3个月里的辛勤工作和付出。
我们的想法主要基于 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,配合阶梯式学习率调度器,没有什么花哨的东西。
PS:由 @doanquanvietnamca 编写的推理代码可在 这里 找到。