返回列表

2nd place solution

419. Rainforest Connection Species Audio Detection | rfcx-species-audio-detection

开始: 2020-11-17 结束: 2021-02-17 环境监测 数据算法赛
第二名解决方案

第二名解决方案

作者:Selim Seferbekov
原文发布时间:2021-02-19

概述

我使用 Logmel 频谱图训练了简单的分类模型(24个二分类类别):

  1. 引导阶段(Bootstrap stage):使用带有掩码 BCE 损失的 TP/FP 数据训练模型。
  2. 生成伪标签:使用 0.5 秒的滑动窗口生成软伪标签。
  3. 重新训练:使用伪标签训练模型,并以 p=0.5 的概率采样 TP/FP 位置的数据——这在一定程度上解决了确认偏差问题。

伪标签和重新训练(第2、3点)的循环重复进行,直到公共排行榜上的分数不再提高。根据设置的不同,大约需要 4-10 轮才能收敛。

我最初仅使用 TP/FP 数据训练的模型得分为 0.86,通过伪标签技术轻松达到了 0.96x。取得这次成功后,我休息了 5 周,因为失去了继续提高分数的动力 :) 后来令我惊讶的是,即使改进了第一阶段的模型,也很难突破 0.97 的大关。

Mel 频谱图参数

  • 256 个 Mel bins
  • 512 hop length(跳跃长度)
  • 原始采样率 (SR)
  • 4096 nfft

FreqConv(频率维度的 CoordConv)

在我第一次成功的伪标签实验在公共 LB 上达到 0.969 之后,我尝试仅更换编码器并融合模型,但这并没有带来任何改进。

因此,我可视化了不同类别的数据,并意识到在处理此任务的 Mel 频谱图时,我们不需要平移不变性,而且类别确实同时取决于频率和模式。

我在 CNN 输入中添加了一个通道,其中包含缩放到 0-1 的 Mel bin 编号。这显著改善了验证指标,在此更改后,第一轮伪标签训练后 TP 附近裁剪区域的 log loss 约为 0.04(FP 附近区域相同)。尽管这仅略微提高了 LB 上的结果。

第一阶段

对于第一阶段,我使用了所有的 TP/FP 信息,没有进行任何采样,并在信号中心周围进行裁剪。

数据增强

  • 时间扭曲
  • TP/FP 信号下方的随机频率掩码
  • TP/FP 信号上方的随机频率掩码
  • 高斯噪声
  • 音量增益
  • 频谱图上的 Mixup

对于频谱图上的 Mixup —— 我使用了常数 alpha (0.5) 和裁剪到 (0,1) 的硬标签。同时也添加了掩码。

伪标签阶段

以 p=0.5 的概率采样 TP/FP,否则从完整频谱图中随机裁剪。

如果不进行 TP/FP 采样,标签会变得非常软,分数会在 2 或 3 轮后下降。
在训练了 4 折的 Effnet/Rexnet 之后,我生成了 OOF(Out-of-Fold)标签并集成了它们的预测结果。然后从头开始重复训练。

数据增强

  • 高斯噪声
  • 音量增益
  • Mixup
  • 时间扭曲
  • SpecAugment
  • 频谱图上的 Mixup

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 折:

  • Rexnet-200(
同比赛其他方案