399. Cornell Birdcall Identification | birdsong-recognition
首先,祝贺获胜者和所有完成本次比赛的参与者。同时感谢 @shonenkov 亲切地发布了提交内核。
在比赛初期,我担心私有排行榜会出现剧烈抖动。但我继续参加了这次比赛,并改变了想法,认为它相对稳定。我认为这项任务与现实问题相关,非常有趣。我要感谢 @stefankahl、@tomdenton、@holgerklinck 和 Kaggle。
所以请允许我厚着脸皮分享一个简单的解决方案。
下图是我的模型流程概览。由于我确信已经有一些很棒的解决方案出现了,而且未来还会有更多,所以我只想分享我自己的一些要点。
正如参与者所注意到的,并非音频的所有时间段都有鸟叫声。因此,如果我们随机提取音频的某些部分(例如 5 秒左右),可能根本就没有鸟鸣声,从而导致训练数据的一种误标记形式。为了缓解这种情况,我使用了一种简单的算法来提取音频的信号部分,如下所示。
当我混合 2 个 LogMel 时,我先将它转换回功率域,然后再进行一次对数变换。这是因为 LogMel 是对数值,简单的线性求和并不等于功率之和。
a * log(X1) + b * log(X2) != log(a * X1 + b * X2)
标签并没有使用特征中使用的混合系数进行缩放,而是采用了它们的并集。
我制作了一个二元模型 (ResNet18) 来分类有叫声/无叫声的音频块。这在公共排行榜上略微提高了我的分数,但结果证明,它在私有排行榜上带来了巨大的提升。
虽然本次比赛的数据中提供了主要标签,但很明显,背景中实际上还有其他属于比赛预测标签范围内的鸟叫声。因此,在训练模型时,我通过将模型顶部一分为二进行了多任务学习,一部分用于主要标签,另一部分用于背景。我按照以下学习策略训练了模型。
最后的步骤3分别在公共排行榜和私有排行榜上提高了 0.004 和 0.006 的分数。
这就是我要分享的内容。我们会在下一场比赛的某个地方再见。
直到下次!