第13名方案总结
第13名方案总结
作者: MPWARE (Grandmaster)
队友: @tikutiku, @zfturbo
比赛: Birdsong Recognition
排名: 13th Place
这是我第一次参加音频比赛,我非常享受这个过程!感谢组织者和Kaggle举办这次比赛。
感谢我的队友 @tikutiku 和 @zfturbo 的精诚合作,很高兴能与你们并肩作战,我学到了很多。
以下是我们方案的总结。
主要流程
(见下图):
- MEL-Spectrogram (梅尔语谱图):使用 torchaudio,采用不同的设置以捕捉大多数鸟类的频率形状。
- 大多数处理/增强在 GPU 上进行,以加速训练和推理。
时间增强
- 粉红噪声/白噪声
- 时间滚动
- 音量增益
- 音调偏移
- 附加带通滤波器,低切 (1kHz-2.5kHz),高切 (10kHz-15kHz)
- 背景/环境噪声 Mixup
- 其他鸟类 Mixup (2到3种鸟)
语谱图/图像增强
CNN 骨干网络
- EfficientNet B1 和 B2
- SEReseXt26
- ResneSt50
- 可选的 GRU 层用于学习时间序列 (参见 TALNet Sound Event Classifier)
- 不同的池化方式应用 SED 概念,使用注意力块或最大池化
我们还有一个仅基于一维信号的模型 (DensetNet1D)
效果不佳的尝试
(虽然有效果但令人失望):
- Wavegram + MEL-Spectrogram 模型(在 soundscape 数据上表现糟糕)
- 创建 3x2 网格语谱图的大图(在推理时效果不佳)
数据
- 提供的训练音频,移除了时长异常值
- 额外的 xeno-canto 数据(来自 Vopani 数据集,感谢 @rohanrao 的清洗转储)
- 干扰项 10秒切片(来自 freefield1010)
我们通过混合 test_audio/birds/noise/nocall 构建了自己的验证数据,试图与 LB 相关。虽然有一点相关性,但不足以让人信服。遗憾的是,这在这场比赛中是关键。
训练过程
- 阶段1:训练几个模型,随机选取 5秒 切片,然后在 CV OOF 上保存鸟类概率,集成所有 OOF 模型结果生成具有高概率的“热”切片。
这使 Public LB 达到了 0.582
- 阶段2:仅使用这些 5秒“热切片”训练更多模型。
这使 Public LB 达到了 0.596
阅读其他人的方案时,我们应该尝试另一个阶段,使用“非常热”的切片来获得超级干净的训练数据集。
最终集成
集成是 8 到 10 个模型的组合,采用联合策略,并在 Public LB 上调整每个模型的阈值(肯定过拟合了)。
联合的想法是为了捕捉大部分的 TP(真阳性,对本次比赛的评估指标有利),缺点是我们也会捕捉到 FP(假阳性)。
推理速度很快,我们将重采样的音频缓存在内存中,且(几乎)全 GPU 流程起到了帮助。运行时间约 1小时30分,所以我们还有空间添加更多模型。
后处理
我们有一个“nobird”多数投票机制,试图移除 FP(强制 nocall),因为有些模型是用 265 个类训练的,而不是 264 个(第 265 类 = nobird)。
我们最终的两次