405. Lyft Motion Prediction for Autonomous Vehicles | lyft-motion-prediction-autonomous-vehicles
首先,这是一次组织得非常好的比赛。论坛上 @lucabergamini 和 @iglovikov 的参与堪称典范,可以看出 @iglovikov 在这次比赛中纠正了他自己作为参赛者时可能遇到的问题,做得很好。其次,我认为 Lyft 投资并组织 Kaggle 竞赛并不是一件理所当然的事情。他们不仅提供了数据和大量的时间,还向参赛者公开了他们专有的 l5kit 库。我希望这能通过 Kagglers 产生的想法得到一定程度的回报,无论如何感谢 Lyft 所做的一切,请继续加油。
最终我的解决方案出奇地简单,因为那些花哨的想法效果都不好。然而,有几件事帮到了我,我在下面描述了一切。对我来说,这再次是一个坚持扎实基础的教训。我记得3个月前我开始时,我很兴奋尝试 GANs,因为它似乎是最先进的技术。结果我却离它越来越远。
数据集参数是 min_history_steps = 0 和 min_future_steps = 10,这是标准的,可能也是用于切割测试数据的参数。我还添加了另一层过滤——基于状态索引。状态索引是场景内帧的计数,范围从0到250。在测试中,状态索引总是99。如果决定在切割后的数据集上训练,基本上就把自己限制在了状态索引99。但这会削减太多数据,所以我建立了一个类似于现有掩码的掩码,并要求 min_state_history = 30 和 min_state_future = 50。我相信这个改变提高了我的分数。如果没有它,我会得到状态索引从0开始的样本,这并不好。
从一开始我就使用了完整的训练 zarr,在结束前两周我添加了切割后的验证集和测试集 zarr。最后这部分起初听起来可能令人惊讶。基本上我们在测试和验证中有100帧,通过我的状态索引过滤,我只看第30到50帧进行训练。这是合法的训练数据,我的动机是让模型接触测试数据集的任何特性,比如雨天。经过所有过滤后,我有这么多数据用于训练:
[0,1,2,3,4,5,8,10,13,16,20,30]87% 的时间)。在此讨论。[256,192],其余参数为默认值上述所有修改都有助于提高分数。
我们有大量的训练数据,所以我有幸确保在整个训练过程中没有重复访问同一个样本。基本上我在训练前生成了顺序,并从中按顺序选取索引。
集成3个模型,来自 timm package
| 模型 | 训练集得分 | 验证集得分 | LB 公开榜 |
|---|---|---|---|
| mixnet_m, 3 条轨迹 | 12.10 | 12.62 | 12.976 |
| mixnet_l, 3 条轨迹 | 11.48 | 12.02 | 12.285 |
| mixnet_l, 6 条轨迹 | 6.88 |