kaggle- 鸟声识别竞赛学习笔记

kaggle- 鸟声识别竞赛学习笔记

  • 背景
    • 自身困境
  • 优胜解决方案思路分析
    • 后处理
    • 特征工程
    • 聚合模型
    • 额外数据集
  • 自身提升方向
  • 题外话

背景

是次kaggle比赛英文名叫为"Cornell BirdCall Identification",没有官方中文名称,大概是鸟声识别竞赛。这是本人第一次的kaggle奖金比赛(除了只抄baseline然后啥都没干的比赛 ),也是第一次接触音频识别的数据分析竞赛。结果只是Top15%,不算理想。因此,本文将记录赛后复盘优秀解决方案,分析优秀选手的思路和提分技巧,同时理解自身需要提升的地方。

注意学习笔记,不是赛后讲解,所以详细的比赛规则和数据集的类型等我就不一一详细论述。

自身困境

此部分为自己遇上的困难:

  1. 按照baseline训练模型,并加入竞赛要求的评判标准改善训练结果,反而公开排行榜(Public Leaderboard,下称lb)分数较低。
  2. 聚合不同模型时,结果比单一模型lb分数差
  3. 不能灵活修改模型和训练过程,如:pytorch模型定义格式改为tensorflow的模型定义格式
    4.自定义的音频处理特征工程效果不明显

优胜解决方案思路分析

以下为综合部分Top10选手的notebook/kernel后的共同点,为本人的浅见,。

后处理

为什么我先说后处理(post process)呢?是次比赛特别的地方在于预测结果需要按场景作调整,如: 标签为site3 和 标签为site1和site2的音频不能作相同的处理,也就是说一般训练模型标签音频类型后,还要作后处理去改善预测结果。
举个例子,一个比赛的baseline只是用了基于概率总和和鸟声出现数作后处理,就已经把比赛结束前公开排行榜的分数从0.568提升到0.585分,比赛结束后分数为0.596,接近Top10%(铜牌)的水平。
由此可见,对于我这种小白,除了特征工程,后处理也是日后竞赛要注意的地方。
kaggle- 鸟声识别竞赛学习笔记_第1张图片参考:https://www.kaggle.com/kneroma/the-power-of-postprocessing-resnest50-at-its-best

特征工程

音频识别的特征工程通常是把音频再取样(resampling),即把.mp3转换到.wav,之后通过librosa去生成melspectrogram。简单来说,把输入音频转化成图像数据集,之后用图形识别的方法训练模型。
kaggle- 鸟声识别竞赛学习笔记_第2张图片参考:https://www.kaggle.com/seriousran/mfcc-feature-extraction-for-sound-classification
故此,在音频变成图像前,我们需要处理特征工程。虽然本人了解了librosa的基础音频处理,例如:去掉噪声、提高频率等,但缺乏哪些是有效的音频处理手段的认知,所以到比赛结束时还是没有良好的自定义特征工程。以下是第二名的特征工程节录:
1.加入白噪声(Add white noise)
2.加入粉红噪声(Add pink noise)
3.加入带通噪声(Add bandpass noise)
4.降低频率上限(Lower the upper frequencies)
本人对以上的音频用词毫无概念,不能解释 ,有兴趣的小伙伴自行百度。
第四名的选手则用了Mixup的方法,设置了75%的概率训练音频重叠,从而判断出音频以内中多种的鸟声,提示模型准确性。

聚合模型

kaggle- 鸟声识别竞赛学习笔记_第3张图片
以下为已公开的优秀kernel里的模型:
第一名:
‘PANNsDense121Att’ (多个不同加权权重)
第二名:
‘resnet50’,‘efficientnet-b0’,‘efficientnet-b0’,‘efficientnet-b0’,‘efficientnet-b0’,‘resnet50’
第三名:
“resnest50_fast_1s1x64d”,“resnest101”
第六名:
“resnest”(多个不同加权权重),”efficientnet“(多个不同加权权重)

由此可见,即使使用相同的模型,但分开训练及加权blending后就能提升预测能力。

额外数据集

在是次比赛的讨论区中,官方表明别要爬取xeno-canto网站的音频数据。无可否认,能训练的数据太少,而且Private Leaderboard公布后,许多选手的排名有变动,有的上升了500多名,有的下降了70多名,可见结果的测试集分布与训练集的数据分布不一样。

日后有机会也会去了解爬虫,爬虫有用的数据集作训练,比用GAN生成的靠谱吧。

自身提升方向

  1. 了解相同类型模型,但不同深度的应用场景和区别
  2. 了解如何自定义神经网络结构及每一层的原理
  3. 尝试逐行理解以往相类似竞赛的解决方案,并应用在日后竞赛中
  4. 不要盲目过度训练baseline,选手放出来的就留一手。
  5. 阅读pytorch和tensorflow开发文档,熟悉整个数据挖掘的流程。

题外话

推荐电视剧"黑袍纠察队",目前到第二季。
可能年纪大了,我厌倦了用魔法对抗魔法的剧情,里面的除了社会现象的映射,大家去不妨从人物的心理角度去分析,也挺有意思。希望最后不是The Boys主角团的普通人在极度愤怒的情况下,发现自己拥有同类型超能力,或者捡到虫箭(狗头)。
kaggle- 鸟声识别竞赛学习笔记_第4张图片

你可能感兴趣的:(kaggle,机器学习,深度学习,人工智能,pytorch,神经网络)