347. Lyft 3D Object Detection for Autonomous Vehicles | 3d-object-detection-for-autonomous-vehicles
大家好,这篇帖子可能发得有点晚。感谢组织者,也祝贺大家!
作为记录,我想说明一下,我真的是 Kaggle 新手,实际上也是机器学习新手。我 9 个月前才开始接触机器学习。我的背景是 3D 计算机图形学,所以我更多地是从 3D 视角而不是机器学习视角来看待这些问题。如果我在机器学习方面犯了什么愚蠢的错误,请多多包涵。
在这次比赛之前,我在 CVPR 2019 由百度举办的 WAD-Beyond Single-Frame Perception 比赛中获得了第二名,主题类似:激光雷达点云的 3D 检测 (http://wad.ai/2019/challenge.html)。我们使用的技巧正是基于那场比赛。所以我们只是采用并修改了这些技巧,并不清楚如果没有这些技巧性能会如何。
我们的方法基于 Voxelnet (traveller59)。但我们的技巧可以应用于任何其他网络。我尝试过 PointRCNN,但运气不佳。
基础设置:
在 second 中实现了两种类型的 voxelnet:FHD 和 PointPillars。我们都使用了。基于“集成差异更大的模型会带来更好结果”的想法,我们使用不同的设置来训练一组模型。例如,我们在 PointPillar 中使用了体素大小 0.1, 0.125, 0.2, 0.25,在 FHD 中使用了 0.1 和 0.125。不同的模型还使用了不同的体素特征提取器(例如 PillarFeatureNet, PillarFeatureNetRadius, PillarFeatureNetRadiusHeight)。RPN 被修改为最终分辨率为 200 X 200 或 250 X 250。
我们方法的关键在于测试时增强 (TTA) 和带有特定 3D 框融合方法的模型集成。
我们将点云转换为几个副本。每个副本被输入网络并获得预测框。然后预测框被转换回来。例如,我们可以将点云旋转 20 度。在我们获得预测框(经过 NMS 后)后,我们将预测框旋转 -20 度(中心位置和偏航角都会改变)。我们对许多副本执行此操作并融合结果。在比赛期间,我们只使用了 4 个副本:原始、x 翻转、y 翻转、x 和 y 翻转。我们尝试了更多带有旋转、缩放和平移的副本。这给出了稍好的结果,但需要更多的推理时间。
我们使用 TTA 获取每个模型的预测框并融合结果。
最佳单模型 (无 TTA): >0.175 (我只得到了一个 TTA 分数为 0.193 的模型的分数。但我得到了一个更好的模型,TTA 分数为 0.197)
最佳单模型 (TTA): 0.197
集成 7 个最佳模型: 0.220
在我们获得几份预测框(来自 TTA 或模型集成)后,我们需要融合它们。我们选择具有相同标签且 IOU > 0.6 的框融合为一个。比赛结束后,我们尝试了加权框融合:目标检测模型的集成框。它实际上给出了更好的结果 (Public LB 0.222) 但速度较慢。为了融合框,中心点和尺寸直接进行加权平均。关键在于偏航角。如果你预测了方向并且可以信任它。你可以使用 sin 和 cos 插值。

然而,在我们的实现中,我们没有使用方向分类器(它不会影响分数,而且它不能 100% 准确)。我们需要处理一个歧义:偏航角与 偏航角 + 180 度是相同的。假设对于一个框,一个预测可能给出偏航角 175 度或 -5 �