553. BirdCLEF 2023 | birdclef-2023
祝贺获胜者,也感谢创建这些年度比赛的主办方。👌
在2小时CPU推理窗口期内完成了12个模型的联合推理。
5种不同的TensorFlow CNN模型,采用SOTA技术,使用往届比赛数据进行训练,并通过本届数据进行微调,最后转换为ONNX格式。与以下模型集成:1)最新版BirdNet TFlite模型(包含264种鸟类中的124种);2)使用BirdNet嵌入在竞赛数据上训练的自定义分类TensorFlow头部;3)使用BirdNet嵌入在竞赛数据上训练的5折XGB模型。此外还使用了BirdNet的非鸟类类别,如果在5秒窗口内非鸟类类别的概率更高,则将鸟类类别的概率降低50%。这对当前指标没有帮助,但实现起来很有趣。
我使用了@awsaf49的BirdCLEF23预训练代码作为起点。该代码使用TensorFlow进行TPU训练,集成W&B日志记录和最新的SOTA音频技术,包括SpecAug(如时频掩码)和音频增强(如高斯噪声、随机裁剪填充、CutMix和MixUp)。
方法论 🎯
在本笔记本中,我们将探索如何使用TensorFlow识别鸟类叫声。具体包括:
- 如何使用tf.data处理音频任务及读取TensorFlow中的.ogg文件
- 如何在TPU/GPU上从原始音频提取频谱图特征,显著减少CPU瓶颈,在P100 GPU上比先前笔记本提速约4倍
- 不同于之前的教程,本笔记本将在GPU/TPU上执行频谱图增强(如TimeFreqMask和归一化),在CPU上对音频数据执行CutMix和MixUp
- 演示在BirdCLEF-2020、2021、2022及Xeno-Canto扩展数据集上进行预训练如何提升迁移学习性能。像EfficientNet这样的CNN骨干网络即使使用ImageNet预训练权重,处理频谱图数据时仍表现不佳,因为对音频数据不熟悉。在音频数据集(如BirdCLEF)上预训练可缓解此问题,使本地验证提升约5%,排行榜提升约2%。本笔记本兼容GPU、TPU和新的TPU-VM设备,会自动选择设备,无需手动分配。
感谢@awsaf49的贡献
训练使用的TF CNN模型:
Efficientnetb1, Efficientnetb0, Efficientnetv1b1ns, Efficientnetv2m, Efficientnetv2s —— 部分使用全部数据训练,部分使用单折训练,许多模型在预训练阶段使用2-5个检查点权重的加权平均来提升泛化能力。所有模型在测试模式下转换为ONNX格式。选择模型时综合考虑了速度和性能,例如是否可转换为ONNX以及在ONNX格式下的CPU推理速度。
BirdNet:
使用BirdNET-Analyzer的代码和模型,采用最新的V2.3 tflite模型以获得最佳推理速度。在模型的3000个类别中找到了264种竞赛鸟类中的124种,以及一些其他有趣的类别。
我使用BirdNet创建了4个模型集成到CNN中:
然后将所有CNN和BirdNet变体进行加权平均集成。
以下是不同模型/解决方案在竞赛指标上的进展(非最终提交,仅为另一种集成权重,截止日期后测试的最佳分数):
| Private | Public | Models |
|---|---|---|
| .71621 | .81447 | 仅CNN |
| .72391 | .81885 | CNN + BirdNet分类器(提取124种鸟) |
| .72250 | .81873 | CNN + BirdNet嵌入 + 自定义分类头 |
| .72459 | .81996 | CNN + BirdNet嵌入 + 5折XGB |
| .73132 | .82337 | 以上全部加权集成 |
就是这样!