391. ALASKA2 Image Steganalysis | alaska2-image-steganalysis
这是一场非常精彩的比赛,论坛里大家分享了很多想法——感谢 Kaggle 和组织者举办这次比赛。
我想祝贺我的同事(来自 h2o.ai)Guanshuo Xu,恭喜他赢得了比赛并成为新的 Kaggle 排名第一。取得这样的成就需要付出大量的辛勤工作和奉献精神——做得好!
我的解决方案相当简单。我认为我做得最好的一点是,我从未情绪化,也从未尝试那些我在验证集中没有看到效果的东西。
我使用了一个单一的留出集(20%)进行验证(按类型分层)。我训练了 2 个模型——在 80% 的训练数据上分别训练了 EfficientNet b3 和 b4,另外在 100% 的数据上训练了 2 个模型。所以总共有 4 个模型。使用余弦学习率调度,所有模型(小模型和完整模型)的表现都非常相似。
我从这些模型中的每一个生成了多个检查点预测(超过 10 个)。我逐步增加了更多的数据增强,更换了优化器,(降低了)学习率和批量大小。每当我看到验证性能停滞不前时,我就会做出改变。每一次,我都从这些调整中获得了改进。总的来说,我训练了 b3 模型 150 个 epoch,b4 模型 120 个 epoch。
对于 TTA(测试时增强),我使用了垂直、水平以及垂直 + 水平翻转。
我的模型都是用 PyTorch 编写的。有一次,我尝试用 Keras (TF) 运行 EfficientNet b3,使用相同的批量大小、优化器和增强方式,但性能明显更差(不知道为什么)。
我从堆叠中获益良多——LB 提升了大约 +0.003-4。在堆叠的测试预测中,我使用了 25% 来自小模型(80% 数据训练)的预测和 75% 来自全量数据训练模型的预测。
一个带有 2 个隐藏层、LeakyReLU 激活函数和少量 L2 正则化的神经网络(NN)为我提供了最好的 CV 分数(0.936)。使用 dart 模式的 Lightgbm 紧随其后。ExtraTreesClassifier(极端随机树) 也增加了一点提升。