553. BirdCLEF 2023 | birdclef-2023
首先,感谢主办方 Sohier Dane、Stefan Kahl、Tom Denton、Holger Klinck 以及所有参与的机构(Kaggle、Chemnitz University of Technology、Google Research、K. Lisa Yang Center for Conservation Bioacoustics at the Cornell Lab of Ornithology、LifeCLEF、NATURAL STATE、OekoFor GbR 和 Xeno-canto)。
今年的比赛相比以往是一个受欢迎的改变。cMAP 评估指标省去了阈值调优的需求,而推理时间限制则鼓励我们关注在准确性和速度之间取得良好平衡的高效模型。
在这篇文章中,我将简要介绍我的解决方案的一些方面。更详细的描述将在后续更新或即将发布的工作笔记中提供。
我还尝试了 resnet50、resnet152、tf_efficientnet_b2_ns、tf_efficientnet_b3_ns、tf_efficientnet_b4_ns、efficientformer_l3、tf_efficientnetv2_m_in21k、densenet121 和 eca_nfnet_l0,但这些模型均未包含在推理集成中,因为在我的情况下,它们的性能与推理时间之间的权衡不如 EffNetB0 或 EffNetV2s 好。
所有模型均使用预训练的 ImageNet 权重,并作为特征提取器与自定义分类头结合使用。作为分类器,我使用了修改后的 SED 头,在频率带上应用注意力机制,而非时间帧。其思路是,声景中的物种通常占据不同的频率带。在原始 SED 架构中,代表频率带的特征图通过均值池化进行聚合,并在代表时间帧的特征上应用注意力。如果将注意力改为应用于频率带,则有助于区分同时发声但音高不同的物种。该修改可以通过在将梅尔频谱图输入原始 SED 网络前,将其旋转 90 度来实现。
在声景中,鸟类通常从远处被录制,导致声音较弱且混响较多,高频部分衰减(与大多数 Xeno-canto 文件相比,这些文件的声音通常更清晰,因为麦克风直接对准鸟类)。为了解释训练数据与测试数据之间的这种差异(领域偏移),我使用脉冲响应为训练文件添加了混响,这些脉冲响应录制自 Valhalla Vintage Verb 音频效果插件。在训练过程中,我以 20% 的概率随机选择脉冲响应,并使用干湿混合控制(范围从 0.2(几乎干信号)到 1.0(仅混响))将其与音频信号进行卷积。
我没有使用先预训练再微调的方法,而是对所有 2021 和 2023 物种以及 nocall(共 659 个类别)进行训练。背景物种的目标值为 0.3。推理时,预测结果被过滤为仅 2023 物种(264 个类别)。
由于运行推理笔记本的硬件和 CPU 存在差异,能够集成的模型数量也有所不同。为防止提交超时,我在笔记本中设置了一个计时器,以确保在 2 小时内完成。如果计时器达到约 118 分钟,推理将停止,并收集截至该时间点已预测的模型和文件部分的结果。未完成模型和文件部分的结果在平均预测前会被屏蔽。使用这种方法,我无法确定可以集成的确切模型数量。在早期提交中,我只能集成 3 个模型而不冒超时风险。后来,我优先考虑推理速度而非模型多样性,使用具有相同输入的模型(FFT 大小、梅尔带数量等均无变化)。现在,我可以提前为所有测试文件预计算并将梅尔频谱图图像保存到 RAM 中,供所有模型重复使用。我还将模型转换为 TorchScript。通过这些优化,我至少可以集成 7 个模型,具体取决于架构(例如,4×EfficientNetB0 + 3×EfficientNetV2s),而无需设置计时器。
我的最佳单模型使用了 EfficientNetV2s,在公开排行榜上得分为 0.83386(私有排行榜为 0.74104)。在私有排行榜上得分最高的最佳单模型使用了 ResNet50 骨干网络(私有排行榜 0.7482 / 公开排行榜 0.83288)。我在私有排行榜上的最佳集成(0.76365)由 8 个模型混合而成(5×EfficientNetB0 + 3×EfficientNetV2s),并对单模型预测结果进行简单平均。