419. Rainforest Connection Species Audio Detection | rfcx-species-audio-detection
我使用 Logmel 频谱图训练了简单的分类模型(24个二分类类别):
伪标签和重新训练(第2、3点)的循环重复进行,直到公共排行榜上的分数不再提高。根据设置的不同,大约需要 4-10 轮才能收敛。
我最初仅使用 TP/FP 数据训练的模型得分为 0.86,通过伪标签技术轻松达到了 0.96x。取得这次成功后,我休息了 5 周,因为失去了继续提高分数的动力 :) 后来令我惊讶的是,即使改进了第一阶段的模型,也很难突破 0.97 的大关。
在我第一次成功的伪标签实验在公共 LB 上达到 0.969 之后,我尝试仅更换编码器并融合模型,但这并没有带来任何改进。
因此,我可视化了不同类别的数据,并意识到在处理此任务的 Mel 频谱图时,我们不需要平移不变性,而且类别确实同时取决于频率和模式。
我在 CNN 输入中添加了一个通道,其中包含缩放到 0-1 的 Mel bin 编号。这显著改善了验证指标,在此更改后,第一轮伪标签训练后 TP 附近裁剪区域的 log loss 约为 0.04(FP 附近区域相同)。尽管这仅略微提高了 LB 上的结果。
对于第一阶段,我使用了所有的 TP/FP 信息,没有进行任何采样,并在信号中心周围进行裁剪。
数据增强
对于频谱图上的 Mixup —— 我使用了常数 alpha (0.5) 和裁剪到 (0,1) 的硬标签。同时也添加了掩码。
以 p=0.5 的概率采样 TP/FP,否则从完整频谱图中随机裁剪。
如果不进行 TP/FP 采样,标签会变得非常软,分数会在 2 或 3 轮后下降。
在训练了 4 折的 Effnet/Rexnet 之后,我生成了 OOF(Out-of-Fold)标签并集成了它们的预测结果。然后从头开始重复训练。
数据增强
Mixup
我使用了常数 alpha (0.5) 并添加了来自两个样本的软标签。这虽然稍微增加了 FP 上的 log loss,但同时显著提高了 TP 上的召回率。
本地验证与公共排行榜的相关性不高。TP 上的 Log loss 有某种程度的相关,但仍然不够稳健。
因此,在没有适当验证的情况下,我决定不选择最佳检查点,而是使用 CosineLR 和 AdamW 优化器训练了 60 个 epoch(每个 epoch 大约 200 个 batch)。
我在验证集上最好的模型 —— AUC 0.999,log loss 0.03 —— 并没有产生很好的结果(0.95)。然而,比赛结束后发现,通过后处理可以轻松将它们提高到 97x-98x 的范围。
我使用了来自 Effnet 和 Rexnet 系列(https://arxiv.org/abs/2007.00992 轻量级且性能极佳的模型)的 4 个模型,每个模型 4 折: