返回列表

Place 38 | 0.902 AUC score

654. BirdCLEF+ 2025 | birdclef-2025

开始: 2025-03-10 结束: 2025-06-05 环境监测 数据算法赛
Place 38 | 0.902 AUC 分数 - BirdCLEF 2025 竞赛总结

第 38 名 | 0.902 AUC 分数

作者: Max Melichov ( collaborator: Ariel Karelin)

竞赛: BirdCLEF 2025

发布日期: 2025-06-06

最终排名: 41 / 2162 (私人 leaderboard)

这是我的提交代码:https://www.kaggle.com/code/maxmelichov/bird25-0-902-auc

Model Evolution

长话短说:我在 BirdCLEF+ 2025 Kaggle 竞赛的 2,162 支队伍中获得了第 41 名。

非常感谢 Ariel 一路以来的支持和建议!

以下是实际有效的方法概述(幕后其实有很多失败的实验):


数据与挑战

  • train_audio/:短录音,每条录音仅包含单一鸟类、两栖动物、哺乳动物或昆虫物种。
  • train_soundscapes/:来自与测试数据相同录音地点的未标记音频,但通常包含多个重叠物种。
  • 关键区别: 测试数据每条录音包含多个物种,而大多数训练数据仅包含一个。

步骤 1:预处理

  • 使用 snakers4/silero-vad 进行语音活动检测 (VAD),以去除训练数据中的人声。

模型 1:带有重度增强的 EfficientNet-B0 CNN

  • 频谱图设置:
    N_FFT=1024, HOP_LENGTH=64, N_MELS=148, FMIN=20, FMAX=16000

  • 增强方法:

    • 时间掩蔽 (Time masking),频率掩蔽 (frequency masking)
    • 随机亮度/对比度
    • 高频增强
    • 动态范围压缩/扩展
    • 频移 (Frequency shift)
    • 细微背景噪声(宽带和中频)
    • 时间方向轻微模糊,混合原始版本和模糊版本
  • 训练设置:

    • EfficientNet-B0 骨干网络
    • Mixup (α = 0.15)
    • BCE 损失 (主要标签 = 1, 次要 = 0.75),多标签/多分类
    • 在每个剪辑的中间 5 秒进行训练(尝试过基于能量和随机片段,但表现较差)
  • 结果:

    • 0.817 AUC (曲线下面积;模型将真实标签排名高于虚假标签的能力)
  • 伪标签 (Pseudo-labeling):

    • 对所有 train_soundscapes 进行推理(分成 5 秒块,平均预测,用作新标签)
    • 性能提升至 0.835 AUC
    • 将骨干网络切换到 EfficientNetV2-S 达到 0.843,但最佳伪标签结果仍来自 EfficientNet-B0。

模型 2:增强的池化和 Mixup

  • 架构:

    • EfficientNet-B0 骨干网络
    • 在第 3 层和第 4 层的特征上添加 GeM 池化层
    • Mixup α = 0.5
  • 替代实验:

    • 尝试了自适应池化、去噪增强和更高级的方法(NatureLM-audio 片段提取、3 通道 Mels、cutmix、教师 - 学生),但没有额外的改进。
  • 最佳模型 2 结果: 0.855 AUC


集成 (Ensembling)

结合了我最好的三个 CNN 模型:

  1. GeM 池化(无去噪器)
  2. GeM 池化带去噪器
  3. 自适应池化(无去噪器)
  • 集成 AUC: 0.868

在此之后,大多数进一步的调整(更大的骨干网络、更多的 mixup 策略、新的伪标签技术、更重的增强)都无法提高验证结果。我遇到了瓶颈,曾考虑放弃。


探索 SED (声音事件检测):我的第一步

在这两个月竞赛的最后三周,基于 SED 的方法开始出现在 Kaggle 论坛上。这是我第一次尝试 SED 模型。由于学习曲线陡峭且时间有限,我无法将自己的 SED 模型提高到 0.841 AUC 以上。

为了继续前进,我利用了论坛上其他人分享的顶级 SED 模型预测:

  • 使用了单个 SED 模型结果(NFNet 骨干网络,0.86 AUC)和一个三重 SED 集成(0.85 AUC,带有低秩功率调整),来自公共 Kaggle 内核和帖子。
  • 使用 Quantile-Mix 集成 (α = 0.5) 将这些模型与我的三个 CNN 模型结合,将分数推高至 0.893 AUC。

最后冲刺:在 BirdCLEF 2021–2024 上预训练

  • 在所有三个 CNN 模型上使用 2021–2024 年的 BirdCLEF 数据进行预训练,然后在 2025 数据上进行微调。
  • 结果: 单模型 AUC 从 0.855 提高到 0.868。
  • 最终集成(3 个 CNN + SEDs)在公共 leaderboard 上得分 0.894 AUC(第 45 名)。
  • 在最终私人 leaderboard 上:0.902 AUC,位于第 41 名
  • 作为参考,第 1 名 finished at 0.930 AUC—仅差 3%!

关键收获:

  • 强大的预处理(VAD, MelSpectrogram, 重度增强)至关重要。
  • 如果片段选择谨慎,对未标记的声音景观进行伪标签可以提供显著提升。
  • 池化策略和标签权重调整可以为 CNN 带来几分提升。
  • SED 是多物种数据的强大方法,但如果你是新手(像我一样!),会有学习曲线。
  • 在历史 BirdCLEF 数据上预训练真的很有帮助。
  • Kaggle 社区是一个不可思议的资源——利用公共笔记本和共享解决方案非常有价值,尤其是在时间紧迫时。

在这次竞赛中我学到了很多——关于音频建模、新架构以及克服瓶颈。再次感谢 Ariel、论坛中的每个人以及所有分享代码和内核的人。我已经期待明年,希望能进入前 10 名!


如果你想聊聊技术细节、查看代码或询问关于流程的任何问题,请随时联系我!

同比赛其他方案