第二名方案
第二名方案
作者: 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 上写更多内容。我很乐意回答大家的问题,因为我几乎没睡,忘记写很多细节了。