返回列表

3rd Place Solution: Baseline + Set Transformer

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

开始: 2020-08-24 结束: 2020-11-25 自动驾驶决策规划 数据算法赛
第三名方案:基线 + Set Transformer

第三名方案:基线 + Set Transformer

作者:heartkilla (Dmytro Poplavskiy, Artem.Sanakoev)
比赛排名:第 3 名

更新:关于我们方案的 YouTube 视频 https://youtu.be/3Yz8_x38qbc

太长不看版 (TL;DR)

  • 基线 CNN 回归
  • 六个 3 模式模型,基于:Xception41, Xception65, Xception71, EfficientNetB5
  • 一个 16 模式 Xception41 模型
  • Set Transformer 作为第二级聚类模型用于集成

我们的代码已在 GitHub 上公开。

详细方案

1. 数据预处理

第一级模型使用了与 l5kit 生成的相同栅格格式,设置如下:

raster_size=[224, 224]
pixel_size=[0.5, 0.5]
ego_center=[0.25, 0.5]

历史帧在帧偏移量 0, 1, 2, 4, 8 处渲染。

我们发现 l5kit 栅格化器的显著时间消耗在于为 opencv 渲染准备坐标,这是由于对小型 numpy 数组进行了大量操作,因此我们将多个阶段(如变换点和 CV2 偏移)合并为单个、经过 numba 优化的函数。

这使我们能够将性能提高约 1.6 倍。

另一个改进是解压 zarr 文件,这对于随机访问特别有用。

接下来的改进是将缓存的栅格和每个训练样本的所有相关信息保存为 numpy 压缩 npz 文件。特别是对于完整数据集,我们保存了每第 N 帧用于训练,因为随后的帧通常非常相似。

所有优化结合在一起,将训练期间的 CPU 负载提高了约 6 倍,并允许同时训练多个模型。完整数据集的缓存训练样本使用了大约 1.3TB 的空间。高速 nvme SSD 驱动器很有用。

2. 第一级 CNN 模型

我们尝试了许多方法,但无法超越使用 imagenet 预训练 CNN、平均池化或可训练加权池化以及全连接层直接预测轨迹位置和置信度的基线方案。

产生更大差异的是训练参数。我们使用了 SGD,学习率相对较高为 0.01,梯度裁剪为 2,批量大小约为 64-128。

我们使用了修改后的 CosineAnnealingWarmRestarts 调度器,从 16 个 epoch(每个 200000 个样本)的周期开始,每个周期将周期长度增加 1.41421 倍。

我们使用了以下模型:

  • Xception41, 平均池化, 批量大小 64
  • Xception41, 平均池化, 批量大小 128 - 性能与批量大小 64 相似
  • Xception41, 可学习加权池化
  • Xception41, 预测 16 种模式而不是 3 种
  • Xception65
  • Xception71 - 似乎是表现最好的模型,但由于时间不足,训练程度不如 Xception41
  • EfficientNet B5

最初,基于 EfficientNet 的模型表现不如 Xception41,但随着批量大小从 64 增加到 128,性能显著提高,结果与 Xception 持平。

模型在完整训练数据集上进行了训练,每个模型在单个 GPU(2080ti,较大模型使用 3090)上训练了大约 5-7 天。

更长时间的训练可能会提高分数,例如 Xception41 模型在最后 3 个周期达到以下验证损失:11.31, 10.86, 10.37

训练曲线图

3. 集成(第二级模型)

由于我们不能简单地平均不同模型的预测,我们使用了一种方法

同比赛其他方案