返回列表

5th place solution

399. Cornell Birdcall Identification | birdsong-recognition

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

第5名解决方案

作者:Oleg Yaroshevskiy (Grandmaster)
比赛:Birdsong Recognition

这是一段伟大的旅程,感谢主办方!现在每当我四处走动时,都能听到更多的鸟叫声 :) 几年前我从语音处理开始了我的机器学习之旅,很高兴能再次接触它。再次感谢并提及 @hidehisaarai1213,是他带领我们走出了这里的黑暗。

从一开始,我就明白这个问题可以分解为两个主要问题:

  • 域偏移(这非常棘手,因为我们没有目标测试集)
  • 从片段级到帧级分类的过渡(这也给我们引入了对结果影响巨大的额外“无叫声”类别,以及标签噪声)

解决这两个问题需要一个在信噪比(SNR)和“无叫声”分布方面尽可能接近目标分布的验证/测试集。

验证

信不信由你,利用来自这里的6条记录和2个示例音频,尽管只包含500-800个片段,我也能够获得与LB(Public Leaderboard)的一定相关性。但更重要的是,我能够控制“无叫声”的百分比并根据它们选择正确的阈值。最后两天,我将这些片段分成了三个测试集,分别包含50%、60%、80%的“无叫声”,以查看私有排行榜上可能出现的场景(感谢主办方,私有排名几乎等于公共排名),并用我的第二次提交来确保分数。

作为目标指标,我使用了 @cpmp 指出的 average="samples" 的 F1 分数。最后,我还监控了验证集(默认CV分割)的主要+次要 F1 分数,作为我的另一个决策指标。仅靠主要 F1 或 mAP 是不够的。

Validation Chart

添加单独的“无叫声”类对我来说不知为何不起作用。
是的,我也相信排行榜。

域偏移

假设我们没有过渡问题,这可能仅通过增强即可解决。我在这方面花了太多时间,现在我明白那是没有效率的。我的最终模型包含不同的增强配置:

  • 背景噪音(均来自外部数据线程)
  • 粉红噪音和棕色噪音
  • 音高偏移
  • 低通滤波
  • Spec增强(时间和频率掩蔽)

由于主办方通知我们可以基于两个测试样本进行训练,我尝试从中收集Batch Norm统计数据作为一种域适应技术,但效果不佳。

从片段级到帧级的过渡 p.1

这是我最喜欢的部分!
我们在这里面临的情况是——每次我们裁剪5秒的片段时,都有可能裁剪出一个“无叫声”片段。所以标签变得非常嘈杂。更难的是裁剪出次要类别。简单的解决方法?标签平滑 0.2。我不记得我是什么时候成为标签平滑的粉丝的,但在实践中它对有噪声的标签很有效。但这并不够严谨。

这里的人们通过基于能量的切割来解决这个问题。而且确实有效。所以我尝试了两种方法:软方法和硬方法。软方法是指基于能量的随机采样,硬方法是指去除低于归一化能量阈值的所有内容。

但是,如果我们可以用我们的模型来提取这些标签呢?拥有 avg/map pooling 头有机会获得免费的分割:

Segmentation Example

你可以将其用作软标签或硬二值化标签。这些方法对于主要标签显示出了非常棒的性能。对于次要标签,我保留了标签平滑 :)

从片段级到帧级的过渡 p.2(最重要的部分)

我发现 SED 模型在5秒片段上训练相对较弱,但当我在更长的片段(10-30秒)上训练它们时,我注意到由于标签噪声的减少,它们显示出更好的训练损失/mAP。此外,可以在5秒片段上运行推理并获得不错的性能。所以我采用了 B4 EffNet,添加了同样的 Attention �

同比赛其他方案