返回列表

Things I have tried and my final solution

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

开始: 2020-08-24 结束: 2020-11-25 自动驾驶决策规划 数据算法赛
我尝试过的方法及最终解决方案

我尝试过的方法及最终解决方案

作者:Frank Pan
发布时间:2020-11-26

恭喜所有的获胜者,也感谢主办方举办了这场非常有趣的比赛。我必须承认,起初我根本没指望能拿奖。有段时间我差点就放弃了,因为训练过程慢得让人痛苦,而且我就是拿不到一个合理的分数。这个结果给了我极大的动力,让我在未来继续尝试。

如果我的术语使用不当,请见谅。非常欢迎任何反馈。

据我理解,这不是一个寻找三条最可能的未来路径的问题,那等同于寻找一条最可能的路径,因为第二条最可能的路径总是那条最可能的路径偏移一纳米后的结果。相反,这是一个寻找三条能最好地代表概率分布的路径的问题。理想情况下,我们希望包含那些可能性较低但仍典型的路径。对我们分数造成最大损害的可能就是那些可能性较低但非常与众不同的路径。因此,我们需要预测的多样性,简单的集成可能不起作用。

我的工作基于 @corochann 分享的模型。虽然这种实现多模态预测的简单方法出奇地有效,但有一件事让我觉得不合理,我大部分时间都在和这个问题作斗争:

在每一步训练中,所有三个预测的坐标都被拉向真值。最接近真值的预测的置信度会增加,而其他两个预测的置信度会降低。因此,对于另外两个相对远离真值的预测,我们正在降低它们的置信度值(意味着现在我们认为它们不太可能),但却把它们的坐标推向真值(意味着让它们变得更有可能)。虽然在早期训练阶段这应该不是什么大问题,模型能够收敛,但我无法相信它能收敛到一个最优解。

其他模型如分类模型或NLP模型不会有这个问题,因为目标可能性是固定且有限的。这里我们基本上是在给移动的目标分配置信度值。

我想到了几个解决方案:

  • 我在损失函数中构建了一个“多样性”因子。它基本上是三个预测之间的平均距离。通过将其添加到损失中,我希望我能温和地将三个预测彼此推开,减少三个预测被拉在一起的影响。然而,我的实验没有成功。模型要么完全忽略了这个因子,要么把这个因子作为获得更低损失的唯一途径。我没有尝试很多次,因为每次实验花费的时间太长了。
  • 使坐标空间离散且有限,并在每一步为该空间中的每个可能点分配一个置信度值。然后随机生成许多可能的未来路径。最后进行k-means聚类,将路径聚成三组,取每组的中心作为最终预测。我甚至没有完成这个想法的实现,因为所需的计算能力超出了我的能力范围。
  • 非常大的批次大小。直到比赛很晚的时候,我才突然意识到,也许增加批次大小可以缓解(当然不能解决)这个问题。通过让模型在每一步看到尽可能多的未来可能性,模型可能会学会保持其三个预测的多样性。它确实奏效了,虽然老实说我不确定这是否仅仅是因为我上面提到的问题。

所以,我的最终解决方案对大多数人来说可能出奇地简单。我只用了老式的 Resnet18,非常小的图像设置 150x150,只有 5 个历史帧,这使我能够将 512 个样本的批次放入我的 8G 显存中。优化器同样是老式的 Adam,学习率从 0.0001 开始,每 50000 步减半。我在完整的数据集上进行了训练,不是因为我认为我需要这么多数据,而是为了减轻样本重叠的问题。

我训练了 40 万步,断断续续地花了我 15 天多的时间!!!在这之后,我和我的电脑都筋疲力尽,所以我们没有尝试其他模型或优化器。

(我尝试过累积梯度来增加有效批次大小,但训练还是太慢了,早期的结果也不太理想,可能是因为与批归一化不兼容。)

我想,如果我们能把批次做得更大,图像做得稍大一点,训练时间更长,或者也许使用更复杂的模型,有很大的潜力进一步提高分数。

顺便说一句,我从来没有真正解决我的训练损失和验证损失之间的偏差问题。在移除了我模型中一些有问题的部分,并按照验证数据集设置了最小未来和历史帧后,问题只解决了一部分。我的训练损失已经降到了 10 以下,但验证损失从未低于 12.10。这还不算太坏,但我知道你们中有些人的对齐做得更好。你们是怎么做到让分数对齐的?

同比赛其他方案