405. Lyft Motion Prediction for Autonomous Vehicles | lyft-motion-prediction-autonomous-vehicles
恭喜所有的获胜者,也感谢主办方举办了这场非常有趣的比赛。我必须承认,起初我根本没指望能拿奖。有段时间我差点就放弃了,因为训练过程慢得让人痛苦,而且我就是拿不到一个合理的分数。这个结果给了我极大的动力,让我在未来继续尝试。
如果我的术语使用不当,请见谅。非常欢迎任何反馈。
据我理解,这不是一个寻找三条最可能的未来路径的问题,那等同于寻找一条最可能的路径,因为第二条最可能的路径总是那条最可能的路径偏移一纳米后的结果。相反,这是一个寻找三条能最好地代表概率分布的路径的问题。理想情况下,我们希望包含那些可能性较低但仍典型的路径。对我们分数造成最大损害的可能就是那些可能性较低但非常与众不同的路径。因此,我们需要预测的多样性,简单的集成可能不起作用。
我的工作基于 @corochann 分享的模型。虽然这种实现多模态预测的简单方法出奇地有效,但有一件事让我觉得不合理,我大部分时间都在和这个问题作斗争:
在每一步训练中,所有三个预测的坐标都被拉向真值。最接近真值的预测的置信度会增加,而其他两个预测的置信度会降低。因此,对于另外两个相对远离真值的预测,我们正在降低它们的置信度值(意味着现在我们认为它们不太可能),但却把它们的坐标推向真值(意味着让它们变得更有可能)。虽然在早期训练阶段这应该不是什么大问题,模型能够收敛,但我无法相信它能收敛到一个最优解。
其他模型如分类模型或NLP模型不会有这个问题,因为目标可能性是固定且有限的。这里我们基本上是在给移动的目标分配置信度值。
我想到了几个解决方案:
所以,我的最终解决方案对大多数人来说可能出奇地简单。我只用了老式的 Resnet18,非常小的图像设置 150x150,只有 5 个历史帧,这使我能够将 512 个样本的批次放入我的 8G 显存中。优化器同样是老式的 Adam,学习率从 0.0001 开始,每 50000 步减半。我在完整的数据集上进行了训练,不是因为我认为我需要这么多数据,而是为了减轻样本重叠的问题。
我训练了 40 万步,断断续续地花了我 15 天多的时间!!!在这之后,我和我的电脑都筋疲力尽,所以我们没有尝试其他模型或优化器。
(我尝试过累积梯度来增加有效批次大小,但训练还是太慢了,早期的结果也不太理想,可能是因为与批归一化不兼容。)
我想,如果我们能把批次做得更大,图像做得稍大一点,训练时间更长,或者也许使用更复杂的模型,有很大的潜力进一步提高分数。
顺便说一句,我从来没有真正解决我的训练损失和验证损失之间的偏差问题。在移除了我模型中一些有问题的部分,并按照验证数据集设置了最小未来和历史帧后,问题只解决了一部分。我的训练损失已经降到了 10 以下,但验证损失从未低于 12.10。这还不算太坏,但我知道你们中有些人的对齐做得更好。你们是怎么做到让分数对齐的?