405. Lyft Motion Prediction for Autonomous Vehicles | lyft-motion-prediction-autonomous-vehicles
感谢组织者,并祝贺所有参赛者。
我还要感谢我的队友 @zaburo、@qhapaq49、@charmq 的辛勤工作,我非常享受这次比赛!
由于数据量巨大,本次比赛的公共榜非常稳定,我们可以在不用担心大幅震荡的情况下专注于改进模型。
我们从我的基线内核 Lyft: Training with multi-mode confidence 开始。
以下是我们所做的主要更改:
[更新 2020/12/9] 我们已发布代码:

发布的基线训练流程实际上已经非常强大。
只需修改
仅训练1个epoch就足以赢得奖项。
对于深度学习模型训练,更大的数据几乎总是更好的。我们使用了 Lyft Full Training Set。
然而其大小确实很大,AgentDataset 包含了 1.91亿条数据。
实际上我们需要进行以下修改才能实时训练这个大数据集:
我们使用 torch.distributed 实现了分布式训练。
使用8个GPU时,通常需要大约5天才能完成1个epoch。
当我们运行分布式训练并设置 DataLoader 的 num_workers 进行多进程数据加载时,问题就出现了。
在分布式训练中,8个进程并行运行,每个进程又启动 num_workers 个子进程。因此启动了 8 * num_workers 个子进程,并且 AgentDataset 数据在每个子进程中都被复制了一份。
此时会发生内存溢出(OOM)错误,因为 AgentDataset 内部持有一个非常大的 cumulative_sizes 属性 (代码)。
相反,我们预先计算了 track_id, scene_index, state_index 并保存为 zarr 格式。这样我们可以从磁盘加载每个数据,从而减少内存占用。
在此阶段,公共分数约为 25.742 kernel。
正如讨论 We did it all wrong 中所述,在比赛初期使用的 l5kit==1.0.6 版本中,图像被旋转了,但目标值没有旋转。
一旦 l5kit 1.1.0 版本发布,我们就更新了版本,修复了这一行为。
随着这次更新,公共榜分数跃升至 15.874。
正如“验证策略