返回列表

21st Place Write-up [Stack-up]

399. Cornell Birdcall Identification | birdsong-recognition

开始: 2020-06-15 结束: 2020-09-15 环境监测 数据算法赛
第21名方案分享 [Stack-up]

第21名方案分享 [Stack-up]

作者: Gopi Durgaprasad | 比赛排名: 第21名

首先,我要感谢 Kaggle 和组织者举办了如此有趣的比赛。

感谢我出色的队友 @seshurajup@tarique7。这是一次很棒的学习和合作经历。

@seshurajup 和我在过去的 20 天里为此付出了辛勤的努力。

[巨大的 Shake-up]

  • Public LB : 0.533 ---> Private LB : 0.632
  • 从第 364 名 ---> 跃升至第 21 名

排名截图

[概要]

  • 将 mp3 音频文件转换为采样率 16k 的 wav 格式,这是因为 Colab 硬盘空间限制以及鸟叫声通常不超过 12kHz。
  • 我们基于 5 秒随机片段训练了 stage1 模型。
  • 该模型在 5 折交叉验证中的平均 AMP 得分为 0.65+。
  • 我们创建了 1 秒音频片段数据集。
  • 在 1 秒数据集上使用 5 折 stage1 模型进行预测。
  • 筛选 df[(df.ebird_code == df.pred_code) & (df.pred_prob >= 0.5)],选出这些 1 秒片段用于 stage3
  • 我们在 stage1 的基础上利用公共数据训练了 stage2 模型。
  • 再次在公共 1 秒片段上使用 stage1stage2 模型进行预测。
  • 再次筛选 df2[(df2.ebird_code == df2.pred_code) & (df2.pred_prob >= 0.5)],选出这些 1 秒片段用于 stage3
  • stage3 数据集由 stage3_df = df.append(df2) 组成,最终我们得到了 61.2 万个带有伪标签的 1 秒片段。
  • 我们使用 PANN Cnn14_16k 模型创建了 1 秒噪声片段。
  • 我们在 1 秒数据集上使用 Cnn14_16k 模型进行预测,并从 PANN 标签中选择了一些噪声标签。
  • 这些标签包括 ['Silence', 'White noise', 'Vachical', 'Speech', 'Pink noise', 'Tick-tock', 'Wind noise (microphone)','Stream','Raindrop','Wind','Rain', ...... ],我们将这些选作噪声标签。
  • 基于这些噪声标签和 stage1 模型的预测概率,我们选择了 1 秒噪声片段数据。
  • noise_df = df[(df.filename.isin(noise_labels_df.filename)) & df.pred_prob < 0.4]
  • 最终我们得到了 10.3 万个 1 秒噪声片段,数据集链接在 这里
  • 我们知道本次比赛的主要目标是预测混合的鸟叫声。
  • 现在是主要部分,最后我们有了 stage1stage2 模型,带有伪标签的 1 秒 数据集,以及 1 秒噪声数据。我们利用所有这些训练了 stage3 模型。
  • 现在摆在我们面前的任务是构建 CV(交叉验证),并训练一个在预测混合鸟叫声方面更可靠的模型。

[交叉验证 (CV)]

  • 我们基于 1 秒鸟叫声1 秒噪声数据 创建了 cv
  • 最终我们需要预测 5 秒 的片段,所以我们取 5 个随机的鸟叫声和噪声,将它们堆叠起来,并根据鸟叫声片段赋予标签。
call_paths_list = call_df[["paths", "pred_code"]].values
nocall_paths_list