返回列表

2nd Place Solution Summary (Private: 0.202 / Public: 0.205)

347. Lyft 3D Object Detection for Autonomous Vehicles | 3d-object-detection-for-autonomous-vehicles

开始: 2019-09-12 结束: 2019-11-12 自动驾驶感知 数据算法赛
第二名解决方案摘要 (Private: 0.202 / Public: 0.205)

第二名解决方案摘要 (Private: 0.202 / Public: 0.205)

作者: Kyle Lee | 比赛排名: 第2名

在我描述我的解决方案之前(我将仅作口头总结),我想感谢组织者和主办方举办了这场有趣、组织良好的比赛,比赛提供了丰富的多数据源数据集,提供了多种解决途径。当然,我也想感谢参赛者对本次比赛的贡献,并祝贺所有获奖者和奖牌获得者。

另外,抱歉没有早点写出来,因为比赛结束后我忙于多项事务——但迟做总比不做好。特别是,我的解决方案采用了一种稍微不同的方法,我实际上有效地使用了2D图像(相比于其他仅使用LIDAR的方法),所以这可能会引起大家的兴趣。

方法

这些是我的主要方法:

方法 1. 与大多数分享的高分解决方案一样,我使用的一种方法是基于带有 PointPillars 的 Voxelnet (https://github.com/traveller59/second.pytorch)。我之所以从这个开始,是因为它似乎是获得初步解决方案的最快途径——NuScenes 格式、多类别、相似类别等。特别是,我重用了配置的多头版本,并简单地将现有的 NuScenes 类别映射到 Lyft 类别(除了一些新类别,我只是做了一个最接近的匹配,例如将 other_vehicle 映射到 trailer)。在这里,我发现以下参数影响最大:

  • point_cloud_range - [-100, -100, -5, 100, 100, 3]
  • voxel_size - 在最终实现中,我使用了体素大小从 0.1x0.1 到 0.25x0.25 不等的模型集成,表现最好的单一模型为 0.2x0.2。
  • feature_map - 这必须更改以匹配上面的 voxel_size
  • max_number_of_voxels - 我发现最好将其设置得尽可能大,例如 > 200k(取决于可用的 GPU 内存)。

除了翻转增强之外,我没有发现额外增强有任何优势,我也没有花时间改变架构参数。我将单一模型的 NMS 参数保留为默认值,并没有调整阈值,尽管下游集成使用了旋转 soft-NMS。

在外部数据方面,我确实通过在 NuScenes 数据集上从头开始训练来启动我的第一个模型,这有助于 在 NuScenes 评分上验证存储库的结果是否可接受(平均而言是的,但每个类别的分数与报告的有些出入) 加速后续训练周期作为 Lyft 数据集的预训练模型。赛后分析表明,使用 NuScenes 数据集作为初始预训练模型可能不是必须的,但这对我来说验证存储库的完整性仍然很有帮助。

我最好的模型使用 0.2x0.2 的体素大小,Private/Public 分数为 0.170/0.173。包括该模型的测试时增强。通过测试时增强(如下所述),这对 Private/Public 分数贡献了 0.185/0.188。

对于最终集成,我使用了 8 个不同体素大小的模型组合(其中一些使用了全数据而不是 train/val,其中一个增加了一些额外的增强,例如缩放)。这个仅 LIDAR 的集成给出了 0.188/0.191 的 Private/Public 分数,这与最佳模型 TTA 相比并没有好多少。

方法 2. 此外,我使用了一种利用 Frustum ConvNet (https://github.com/zhixinwang/frustum-convnet) 的 2D->3D 方法,通过使用来自传统目标检测器的 2D 框/提议。由于该存储库适用于 KITTI 格式,因此需要对 KITTI 转换器进行一些修正:

  1. 旋转必须是 pi 而不是 pi/2(这由 Kaggle 社区修正)
  2. 必须考虑 LIDAR 和相机之间的自我姿态差异(参见 PR:https://github.com/lyft/nuscenes-devkit/pull/75

对于目标检测器,我使用了 Detectron 2 和 Tensorflow Object Detection API,并在将标签从 KITTI 转换为 COCO 格式后进行训练。这些目标检测器使用的预训练模型包括 Detectron 2 的 Faster-RCNN with X101-FPN 和 TF object detection API 的 Faster-RCNN with Inception ResNet V2 (Atrous)。

我还编写了一个从 KITTI 回到 Lyft 提交格式的反向转换器,并忽略相机视图之间重叠的框,因为它们将通过稍后描述的集成过程(即旋转 soft-NMS)进行修正。

对于 Frustum-ConvNet 训练过程,我按照原始存储库保留了 3 个类别(

同比赛其他方案