第一名解决方案 (1/26 详情已更新)
第一名解决方案 (1/26 详情已更新)
作者: outrunner | 发布时间: 2020-01-22
感谢大家,祝贺所有顶尖团队。我正在度假,所以我会在春节后发布详细内容。
简介
- 数据增强:水平翻转、三轴旋转、颜色变换、噪声、模糊。
- 使用 keras hourglass centernet。
- 透视变换以提高效率。
- 回归 yaw, cos(pitch), sin(pitch), rot_pi(roll), x, y, z, r。
- 融合 6 个结果 (2 种类型的头部 * 3 种类型的变换)。
- 通过拟合 LB(排行榜)进行后处理。
特别感谢这些内核:
新年快乐
1/26 详情更新
网络
我的方法基于 keras hourglass centernet。
一些注意事项:
- 6 Dof:回归 yaw, cos(pitch), sin(pitch), rot_pi(roll), x, y, z, distance。
- 最终丢弃了 XY bias 结果。
- 在我的第二个模型中移除了 Car types 和 XY bias。
透视变换
两个目的:
- 缩小小(远)车和大(近)车之间的尺寸差距。
- 在不扩展图像的情况下覆盖更多的异常值。
我发现当我增加输入尺寸时,模型对大车的预测效果不好,所以我让它们变小了。额外的好处是可以包围异常值。
原始图像:
变换后:
覆盖范围比较:(点表示 GT 位置)
带有异常值的验证结果:(红点:GT,绿色:预测热图)
坐标参考
我认为不同位置的相同特征应该得到不同的结果。所以我加入了这一层以获得更好的预测,并在训练时应用随机裁剪。
数据增强
我使用了:水平翻转、相机旋转、颜色变换、噪声、模糊。
相机旋转
这是我方法中最重要的一部分。因为我只有 4001 张训练图像,其中 5 张是坏的,还有 256 张用于验证。如果没有旋转增强,很容易过拟合。
增强效果如下:(中心是原始图像)
详情请参考 这个内核。
训练
- 热图使用 Focal loss。
- 回归使用 Huber loss。
- Adam 优化器。
- 手动调整学习率从 10^-3.5 到 10^-5.5。
- 大约 0.4M 次迭代。
- 训练流程:完整网络 -> 部分 -> 仅头部 -> 完整 ...
- 每次迭代更改输入尺寸(随机裁剪)和批次大小。
- 每次训练使用一块 2080Ti。(我有 2 块)。
- 总共 6 个模型,2 个头部 * 3 个变换(不同的参数和输入尺寸)。
推理