返回列表

36th place solution

399. Cornell Birdcall Identification | birdsong-recognition

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

第36名方案

作者:Maxwell
比赛排名:第36名

首先,祝贺获胜者和所有完成本次比赛的参与者。同时感谢 @shonenkov 亲切地发布了提交内核。

在比赛初期,我担心私有排行榜会出现剧烈抖动。但我继续参加了这次比赛,并改变了想法,认为它相对稳定。我认为这项任务与现实问题相关,非常有趣。我要感谢 @stefankahl@tomdenton@holgerklinck 和 Kaggle。

所以请允许我厚着脸皮分享一个简单的解决方案。
下图是我的模型流程概览。由于我确信已经有一些很棒的解决方案出现了,而且未来还会有更多,所以我只想分享我自己的一些要点。

模型流程图

1) 事件感知提取

正如参与者所注意到的,并非音频的所有时间段都有鸟叫声。因此,如果我们随机提取音频的某些部分(例如 5 秒左右),可能根本就没有鸟鸣声,从而导致训练数据的一种误标记形式。为了缓解这种情况,我使用了一种简单的算法来提取音频的信号部分,如下所示。

事件感知提取示意图

2) LogMel Mixup(混合)

当我混合 2 个 LogMel 时,我先将它转换回功率域,然后再进行一次对数变换。这是因为 LogMel 是对数值,简单的线性求和并不等于功率之和。
a * log(X1) + b * log(X2) != log(a * X1 + b * X2)
标签并没有使用特征中使用的混合系数进行缩放,而是采用了它们的并集。

3) 二元模型

我制作了一个二元模型 (ResNet18) 来分类有叫声/无叫声的音频块。这在公共排行榜上略微提高了我的分数,但结果证明,它在私有排行榜上带来了巨大的提升。

4) 多标签模型(多任务学习)

虽然本次比赛的数据中提供了主要标签,但很明显,背景中实际上还有其他属于比赛预测标签范围内的鸟叫声。因此,在训练模型时,我通过将模型顶部一分为二进行了多任务学习,一部分用于主要标签,另一部分用于背景。我按照以下学习策略训练了模型。

  • 步骤1:仅主要标签
  • 步骤2:主要标签 + 背景
  • 步骤3:使用背景预测进行伪软标签标记

最后的步骤3分别在公共排行榜和私有排行榜上提高了 0.004 和 0.006 的分数。

这就是我要分享的内容。我们会在下一场比赛的某个地方再见。
直到下次!

同比赛其他方案