第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 秒片段上使用 stage1 和 stage2 模型进行预测。
- 再次筛选
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 秒噪声片段,数据集链接在 这里。
- 我们知道本次比赛的主要目标是预测混合的鸟叫声。
- 现在是主要部分,最后我们有了 stage1、stage2 模型,带有伪标签的 1 秒 数据集,以及 1 秒噪声数据。我们利用所有这些训练了 stage3 模型。
- 现在摆在我们面前的任务是构建 CV(交叉验证),并训练一个在预测混合鸟叫声方面更可靠的模型。
[交叉验证 (CV)]
- 我们基于 1 秒鸟叫声 和 1 秒噪声数据 创建了 cv。
- 最终我们需要预测 5 秒 的片段,所以我们取 5 个随机的鸟叫声和噪声,将它们堆叠起来,并根据鸟叫声片段赋予标签。
call_paths_list = call_df[["paths", "pred_code"]].values
nocall_paths_list