返回列表

8th Place solution

419. Rainforest Connection Species Audio Detection | rfcx-species-audio-detection

开始: 2020-11-17 结束: 2021-02-17 环境监测 数据算法赛
第8名解决方案

第8名解决方案

作者: SHINO
比赛排名: 第8名

感谢举办这次比赛。同时,分享的Notebooks和讨论对我帮助很大,谢谢大家!

我的解决方案与获得第7名的 Beluga & Peter 类似。

  • 多类别多标签问题
  • 使用手工标签清洗训练数据
  • SED(声音事件检测)模型

在我的情况下,伪标签效果不佳,所以我没有使用它。

[手工标签]

在观察给定 train__tp.csv 中的 t_min 和 t_max 数据时,我发现有很多不同种类的鸟叫声混合在一起。因此,我决定将其视为一个多类别多标签问题。讨论区也提到,测试集标签最终是由人工仔细标注的。

在给定的 t_min、t_max 范围内的真正例都很容易理解,但在60秒的剪辑中,有许多真正例难以理解且未被标记。我认为最好自己仔细标记它们,以便在测试集中也存在这种难以理解的叫声被标记的情况下,使条件尽可能接近测试集。

我计划在模型准确率提高后进行伪标签处理。

我截取了 train__tp.csv 中 t_min 和 t_max 前后大约 5秒 的片段。手工标注花费了大约一周时间。结果,总共使用了 2428 个剪辑和 5秒 的数据块作为训练数据。

训练数据的类别分布如下:

类别 数量
s31257
s12520
s18512
......
s16100
s17100
s697

我可以看到标签不平衡,特别是 s3、s12 和 s18,因为它们的标签在其他类别的剪辑中共现。

特别是 s3 占主导地位,所以模型倾向于输出高概率,而少数类别输出低概率,我认为这对该评估指标来说是个糟糕的问题。因此,为了实现更平衡的分布,我对少数类进行了过采样,对多数类进行了欠采样。然而,LB(Leaderboard)分数变差了。回想起来,我没想到要去接近测试集的分布,正如 Chris 所指出的那样。

最终,我集成了 15 个使用不同损失函数的模型。

[训练]

单个模型示例:
PANNsDense161 (公开LB 0.95548, 私有LB 0.96300)

我也尝试了 EfficientNet_b0, Dense121 等,但 Dense161 效果最好。

train_data(sr=48000, 5s)
window_size=2048, hop_size=512, mel_bins=256
MultilabelStratifiedKFold 5fold
BCEFocalLoss(α=0.25, β=2)
GradualWarmupScheduler, CosineAnnealingLR(lr=0.001, multiplier=10, epo35)
    

数据增强

GaussianNoise(p=0.5)
GaussianSNR(p=0.5)
FrequencyMask(min_frequency_band=0.0, max_frequency_band=0.2, p=0.3)
TimeMask(min_band_part=0.0, max_band_part=0.2, p=0.8)
PitchShift(min_semitones=-0.5, max_semitones=0.5, p=0.1)
Shift(p=0.1)
Gain(p=0.2)
    

[推理]

stride=1
framewise_output max
No TTA (我在最终的集成模型中使用了它)
    

最后,我上传了我使用的 train_data_wav (sr=48000) 和 csv 文件。

同比赛其他方案