返回列表

2nd place solution

399. Cornell Birdcall Identification | birdsong-recognition

开始: 2020-06-15 结束: 2020-09-15 环境监测 数据算法赛
第二名方案

第二名方案

作者: Kramarenko Vladislav | 比赛排名: 第2名

大家好。这是我第一次参加 Kaggle 比赛,我非常享受参与的过程。
感谢主办方举办了一场有趣的比赛,感谢 @hidehisaarai1213 提供的基础方案,也感谢所有团队带来的精彩激烈的对决。

我的方案

  • 由于电脑性能较弱,为了加快训练速度,我保存了 Mel 频谱图,后续直接使用它们进行训练。
  • 重点!在训练不同的架构时,我手动检查了 2 万个训练文件,并删除了大量没有目标鸟类的片段。如果有需要,我可以将它们放在一个单独的数据集中。
  • 我混合了 1 到 3 个文件。
  • 重点!为了调整对比度,我将图像的像素值进行了 0.5 到 3 次方的幂运算。在 0.5 次方时,背景噪声更接近鸟类声音;而在 3 次方时,相反地,微弱的声音会变得更加微弱。
  • 稍微加速/减慢了录音速度。
  • 重点!添加了不同的非鸟类声音(雨声、噪音、交谈声等)。
  • 添加了白噪声、粉红噪声和带限噪声。增加噪声水平会提高召回率,但会降低精确率。
  • 重点!以 0.5 的概率降低高频部分。在现实世界中,高频部分随距离衰减得更快。
  • 使用了 BCEWithLogitsLoss。对于主要鸟类,标签设为 1。对于背景中的鸟类,标签设为 0.3。
  • 我没有关注训练集上的指标,只关注与测试样本相似的验证文件(见数据集)。效果很好。
  • 添加了 265 个类别的 nocall(无鸟叫),但帮助不大。
  • 最终方案由 6 个模型的集成组成,其中一个模型在 2.5 秒的录音上训练,另一个仅在 150 个类别上训练。但这个模型并不比 3 个模型的集成好多少,后者的所有模型都在 5 秒录音和 265 个类别上训练。
  • 我最好的方案是 3 周前提交的,那本可以让我获得第一名 =)
  • 模型预测值先平方,再平均,最后开根号。与简单的平均相比,评分略有提高。
  • 所有模型的质量相似,但最好的是 efficientnet-b0, resnet50, densenet121。
  • 预训练模型效果更好。
  • 普通频谱图的效果略逊于 Mel 频谱图。
  • 大型网络的效果略逊于小型网络。
  • 参数设置:n_fft = 892, sr = 21952, hop_length=245, n_mels = 224, len_chack 448(或 224), image_size = 224*448
  • 重点!如果片段中有鸟,我会增加在整个文件中找到它的概率。
  • 我尝试了伪标签,在训练文件上预测类别,并使用新标签进行训练,但质量略有下降。
  • 过小的学习率会降低评分。

稍后我会尝试在这里或 GitHub 上写更多内容。我很乐意回答大家的问题,因为我几乎没睡,忘记写很多细节了。

同比赛其他方案