返回列表

[4th place] Definitely it's overfitting to the public LB. (0.948->0.930)

391. ALASKA2 Image Steganalysis | alaska2-image-steganalysis

开始: 2020-04-27 结束: 2020-07-20 网络安全 数据算法赛
[第4名] 绝对是过拟合了公共 LB

[第4名] 绝对是过拟合了公共 LB。(0.948->0.930)

作者:Johnny Lee
比赛排名:第4名

绝对是过拟合了公共 LB(Public Leaderboard)。但对我来说,单人金牌已经足够好了。也许对我来说这是最好的结果,因为不需要提交我那乱糟糟的源代码 :)
祝贺这次比赛中的每一个人。我们从中学到了很多。

以下是我的方案简介。

■ 使用 Tensorflow 和 TPU

■ 数据准备

  • 将 DCT(512x512x16) 保存为 png 格式存入 .tfrec 文件(无损)。
  • 将质量因子保存到 .tfrec 文件中。
  • 将有效载荷草稿保存到 .tfrec 文件中。(如果 8x8 区域内有任何变化,则计为 1)
  • 在训练时以 TF 的方式将 DCT 转换为 YCbCr。通过这种方法,我可以在 15~20 分钟内完成 Effnet B0/B1 的一个 epoch 训练,B6/B7 则需要 30~45 分钟。使用 YCbCr 的原因见这里

■ 数据增强

所有的数据增强都是以 TF 的方式实现的。(也许这里有些问题)

  • 左右/上下翻转(Flip LR/UD)
  • +/- 翻转(IMO 使用 YCbCr 是可行的)
  • 乘以随机数(0.98~1.02)。(我们在检测小波的变化)
  • 随机打乱 24x24 / 32x32 / 40x40 的块。IMO(我认为)这可以让模型关注块的小波而不是图像的内容。保留边界(16像素)因为 UERD 总是改变这个区域。
Shuffle Visualization
  • 没有使用 Rot90,因为量化表不是对角对称的。(也许我错了)

■ 模型

在 DCT 中改变一个像素 +/-1 会导致 YCbCr 中 8x8 块的变化,有很多模式需要学习,所以我尝试了 B6/B7/B8,最终结果是它们的集成。最佳单模型是 B6(本地/公共/私有分数:0.940/0.940/0.929)

  • 多分类(4) + 辅助损失(payload, mae)
  • 质量因子作为输入,而非目标。
  • 在最后阶段使用较小的学习率。
  • TTA(测试时增强): LR/UD/+-, 每张图 8 次。(见数据增强部分)

■ 训练

我只专注于一个折(fold)并在所有数据上进行了微调。遗憾的是,这对公共 LB 造成了过拟合。通过观察公共/私有 LB,我认为除了获胜者之外,许多人都和我一样。再次祝贺大家。

如果我训练更多的折也许我可以…… :) (这需要很长时间,现在就算了)

■ 更新

7/22 添加了最佳单模型的链接。

同比赛其他方案