返回列表

4-th place solution

399. Cornell Birdcall Identification | birdsong-recognition

开始: 2020-06-15 结束: 2020-09-15 环境监测 数据算法赛
第4名解决方案
作者:Volodymyr (Grandmaster) | 比赛排名:第4名

大家好,Kagglers!

这是一场精彩的比赛!我很高兴分享帮助我们获得LB第4名的训练技巧。

数据准备

我们使用了重采样至32,000采样率并经过归一化处理的音频。

和大多数参赛者一样,我们使用了频谱特征——Logmels(对数梅尔频谱)。

对于我的大多数模型,我们添加了外部的xeno-canto数据集:

非常感谢 @rohanrao

我们还使用了RMS修剪(RMS trimming),以便获取包含鸟叫声的片段。更多细节可以在我们的Notebook中找到。

特征提取

由于我们使用的是预训练的CNN,我们需要为其提供3通道输入(或者替换第一层卷积层)。

有效的尝试:

  • 将Logmel重复3次 —— 这是一个很好的基线选项。
  • 使用deltas(差分) —— 我们使用了Logmel、一阶差分和二阶差分的拼接。效果最好。
  • 在训练中加入 secondary_labels(次要标签)。

效果不佳的尝试:

  • 时间和频率编码 —— 最初由 @ddanevskyiFreesound比赛中使用。但在这里效果不好。
  • 添加更多特征,如响度和频谱质心。

验证方案

我们所有的模型都是在交叉验证模式下训练的。所以我们有一个折叠用于验证。我们还使用了 example_audio 作为另一个验证集。总的来说,我们跟踪了以下指标:

  • loss(损失)
  • 一个验证折叠的MaP分数 - map_score
  • 测试集上阈值为0.5的原始比赛F1指标 - f1_test_median
  • 测试集上最佳阈值的原始比赛F1指标
  • 验证折叠上阈值为0.5的原始比赛F1指标(如果使用 secondary_labels
  • 验证折叠上最佳阈值的原始比赛F1指标(如果使用 secondary_labels

我们根据MaP分数进行早停和学习率调度,因为它是所有指标中最后收敛的一个。

然后我们根据 f1_test_median 选取了3个最好的检查点,并对每个折叠的权重矩阵进行平均 —— 类似于SWA(随机权重平均)。然后融合5个模型(5个折叠)并在测试集(example audio)上评估。在LB达到0.607分之前,这个分数与LB相关性很好。在这个点之后,测试集几乎就没用了 :)

模型

我们使用了不同的EfficientNets(B3, B4, B5),并在noisy student上进行了预训练。

我们尝试了一些分类器头部。但“2层 Dropout->Linear->Relu”效果最好。此外,Multi-Sample Dropout 略微提升了性能并增加了稳定性。

我们尝试了SeResnexts,但对我们来说完全不起作用。我们也尝试了 @ddanevskyi 在这里提出的模型,但效果更差。

训练过程

我们使用了 Adam 优化器、ReduceLRO