391. ALASKA2 Image Steganalysis | alaska2-image-steganalysis
我要感谢 Kaggle 组织了如此有趣的比赛。不幸的是,直到几周前我才开始关注它,我很后悔没有花更多时间在上面。特别是考虑到比赛的模型训练时间真的很长。
像许多其他人一样,在发现了精彩的 Alex Shonenkov 的入门 kernel 后,我决定认真参加这次比赛。我的大部分工作都是建立在他的工作之上,并尝试了不同的网络骨干、训练计划、集成,以及在较小程度上的数据增强。
我的最终集成包含以下三种 EfficientNet 模型架构:
B1 - 我只成功训练了一个这样的网络。最佳结果可以在 这个 kernel 中找到,所有权重都在 这个数据集 中。最佳单模型本地得分为 0.918,公共 LB 得分为 0.925,私有 LB 得分为 0.911。
B2 - 我训练了几个这样的网络,并且在 Alex 的原始模型基础上取得了相当大的改进。然而,这些网络对我最终的融合只做出了微小的贡献。最佳结果可以在 这个 kernel 中找到,所有权重都在 这个数据集 中。最佳单模型本地得分为 0.923,公共 LB 得分为 0.929,私有 LB 得分为 0.916。
B4 - 这些网络是我解决方案背后的主力军。不幸的是,它们的训练速度非常慢,我几乎耗尽了我所有的计算资源来获得最佳解决方案。没有额外的能力(计算 + 时间)来训练更大的模型,我怀疑更大的模型会表现更好。最佳结果可以在 这个 kernel 中找到,所有权重都在 这个数据集 中。最佳单模型本地得分为 0.930,公共 LB 得分为 0.940,私有 LB 得分为 0.925。
这可能是我的网络相对于公共 kernel 中的基础网络最大的改进来源。我从与原始 kernel 相同的训练计划开始,但随后我重新训练了所有权重——两次。第二次我将 LR(学习率)降低到 0.0005,并将 patience 增加到 2。我在增强中添加了 JpegCompression,但在其他方面没有改变任何东西。我还将训练增加到 50 个 epoch,这花了很长时间才能完成,因为每个 epoch 在 V100 GPU 上大约需要 2.5 小时。
对于大多数模型,我坚持使用最初的 80/20 划分,但使用了不同的随机种子。划分的选择在这场比赛中似乎非常重要——最终模型在 LB 上的得分在 0.933 到 0.940 之间。我还用 95/5 的划分训练了几个模型,但由于它们是 B2 网络,它们对最终的集成没有显著贡献。
由于我在训练中使用了不同的划分,因此无法对集成进行一致的本地验证,所以我被迫依赖 LB(排行榜)。同样,因为我只能参加这场比赛不到两周的时间,这没有给我留下很多提交机会来作为验证策略的基础,所以我不得不在很大程度上依赖我的直觉。例如,我没有对在不同划分上训练的同一模型使用等权重平均,而是根据单个模型在 LB 上的表现来确定权重。我最终使用的权重很可能是次优的,但我感到幸运的是,我的两次提交在私有 LB 上都是最好的。