391. ALASKA2 Image Steganalysis | alaska2-image-steganalysis
我们的解决方案总结 - 公开/私有排行榜分数:0.945/0.932
简而言之:相信你的交叉验证(CV)
我使用了按图像大小和质量因子分层的4折交叉验证,并保留了2万个样本作为留出集(5千张载体图像 + 1.5万张对应的含密图像)。我的队友采用了不同的划分方式,没有使用折数但同样保留了留出集。我们使用二级堆叠的排名平均值来融合单个模型为集成模型,并合并它们的预测结果。
我只使用了 EfficientNet B6/B7,而我的队友使用了 B4/B5/B6/B7/MixNet,加上 SRNet 和一些来自“经典”隐写分析的手工特征。
我在 RGB 输入上训练模型(使用 cv2.imread),然后在非取整的 RGB 图像上进行微调(通过手动解码 DCT->YCbCr -> RGB 并省略取整步骤)。最后,我将 Swish 激活函数替换为 Mish,这使得我集成中每个模型的分数平均提高了 +0.00044。
可能和大家一样,我在训练中使用了带有粗粒度丢弃的 D4 增强,在推理过程中也使用了 D4 增强。
我为模型训练了两个头来预测二分类(载体/含密)和多分类(4类)结果。基于早期实验,这被证明效果很好,并且稍微加快了收敛速度。我尝试了不同的损失函数,包括加权 BCE/CE、Focal Loss 以及直接优化 RoC AUC。但事实证明,普通的 BCE/CE 效果最好。
在集成方面,我测试了许多想法,但最终的解决方案是使用我的 B6/B7 模型的预测结果训练 XGBoost 分类器。二级堆叠是使用留出集的预测完成的。特征矩阵大小为 20000x380,由二分类和多分类输出以及来自 TTA 的所有中间 logits 组成。我使用基于 image_id 的 groupkfold 分割进行了 5 折交叉验证,以找到 XGBoost 的最佳超参数,这就是我的集成模型。
我的团队对他们的模型库采用了类似的方法,但训练了 CatBoost 堆叠器。我们根据各自的 CV 分数和斯皮尔曼相关性选择了最终的集成方案。相关性系数越低,我们在公开排行榜上的得分就越高。
为了得出这个解决方案,花了将近两个月的时间。在通往金牌的道路上,有几十次不成功的训练运行和实验。举几个例子: