返回列表

congrats to Guanshuo Xu! and [14th place] solution

391. ALASKA2 Image Steganalysis | alaska2-image-steganalysis

开始: 2020-04-27 结束: 2020-07-20 网络安全 数据算法赛
祝贺 Guanshuo Xu!以及第14名解决方案

祝贺 Guanshuo Xu!以及第14名解决方案

作者: Μαριος Μιχαηλιδης KazAnova (Competition Grandmaster)
比赛排名: 第14名

这是一场非常精彩的比赛,论坛里大家分享了很多想法——感谢 Kaggle 和组织者举办这次比赛。

我想祝贺我的同事(来自 h2o.aiGuanshuo Xu恭喜他赢得了比赛并成为新的 Kaggle 排名第一。取得这样的成就需要付出大量的辛勤工作和奉献精神——做得好!

我的解决方案相当简单。我认为我做得最好的一点是,我从未情绪化,也从未尝试那些我在验证集中没有看到效果的东西。

我使用了一个单一的留出集(20%)进行验证(按类型分层)。我训练了 2 个模型——在 80% 的训练数据上分别训练了 EfficientNet b3 和 b4,另外在 100% 的数据上训练了 2 个模型。所以总共有 4 个模型。使用余弦学习率调度,所有模型(小模型和完整模型)的表现都非常相似。

我从这些模型中的每一个生成了多个检查点预测(超过 10 个)。我逐步增加了更多的数据增强,更换了优化器,(降低了)学习率和批量大小。每当我看到验证性能停滞不前时,我就会做出改变。每一次,我都从这些调整中获得了改进。总的来说,我训练了 b3 模型 150 个 epoch,b4 模型 120 个 epoch。

分阶段的数据增强:

  • 垂直和水平翻转
  • 垂直和水平 + 转置 + 旋转
  • 垂直和水平 + 转置 + 旋转 + Cutout (1 个洞, 大小 80)
  • 垂直和水平 + 转置 + 旋转 + Cutout (2 个洞, 大小 64)
  • 垂直和水平 + 转置 + 旋转 + Cutout (4 个洞, 大小 64)

对于 TTA(测试时增强),我使用了垂直、水平以及垂直 + 水平翻转。

我的模型都是用 PyTorch 编写的。有一次,我尝试用 Keras (TF) 运行 EfficientNet b3,使用相同的批量大小、优化器和增强方式,但性能明显更差(不知道为什么)。

我从堆叠中获益良多——LB 提升了大约 +0.003-4。在堆叠的测试预测中,我使用了 25% 来自小模型(80% 数据训练)的预测和 75% 来自全量数据训练模型的预测。

一个带有 2 个隐藏层、LeakyReLU 激活函数和少量 L2 正则化的神经网络(NN)为我提供了最好的 CV 分数(0.936)。使用 dart 模式的 Lightgbm 紧随其后。ExtraTreesClassifier(极端随机树) 也增加了一点提升。

同比赛其他方案