返回列表

2nd place solution

612. BirdCLEF 2024 | birdclef-2024

开始: 2024-04-03 结束: 2024-06-10 生命科学 数据算法赛
第二名解决方案 - BirdCLEF 2024

第二名解决方案

作者: adsr (mariotsaberlin)
发布日期: 2024-06-14
竞赛: BirdCLEF 2024
排名: 第 2 名

首先,感谢组织者举办这次比赛,恭喜所有获奖团队!

摘要

  • 仅使用每条录音的前 5 秒进行训练
  • EfficientNet B0 骨干网络
  • 通过使用目标域的伪标签提升性能
  • 6 个模型的集成
  • 通过不同的 Mel 参数、数据子集、图像大小和添加伪标签的概率实现模型多样性

初步实验

今年比赛的开端并不容易。起初使用去年的模型和训练方法效果不佳。几乎所有能提升本地 CV 的尝试都无法提高甚至降低了公开榜分数,我无法让单模型超过 0.64 AUC 或集成模型超过 0.69。

在几乎想要放弃的时候,我从头开始,使用了 @salmanahmedtamu 的公开 Notebook,并遵循了 @lihaoweicvch 讨论的 方法。感谢分享!

这使得单模型性能达到了 0.65/0.66 AUC。
原始 Notebook 使用了:

  • 仅使用训练文件的前 5 秒,不使用其他来源的额外文件或类别
  • 模型输入:调整大小为 256x256 的 3 通道 Mel 频谱图
  • 骨干网络:eca_nfnet_l0
  • Mel 参数:
    • n_fft = 2048
    • hop_length = 512
    • n_mels = 128
    • f_min = 20
    • f_max = 16000
  • 训练参数:
    • 带有 5 个 warmup epoch 的 CosineAnnealingLR 调度器
    • 峰值学习率 1e-4
    • 100 个 epoch,如果 AUC 在 7 个 epoch 内未提升则早停
    • Batch size 64
    • BCE 和 FocalLoss 的平均值
    • GEM 池化
  • 数据增强:
    • 水平翻转 (HorizontalFlip)
    • 随机丢弃 (CoarseDropout)
    • 训练批次内 Mel 频谱图的 Mixup

从这个基线开始,我尝试了不同的骨干网络、超参数、增强方法和图像大小。该模型的一个主要缺点是提交时间相对较长(> 1 小时)。因此,除了提高分数外,另一个目标是减少推理时间以容纳更多集成模型。为此,我 switched 到 EfficientNet B0 骨干网络 (tf_efficientnet_b0_ns) 并减小了图像大小。结果表明,关于 LB 分数 (0.62-0.66) 的结果相当不稳定,并且对 Mel 参数和输入大小的不同组合很敏感。但经过进一步调整,我能够创建推理时间低于 12 分钟的模型,同时保持约 0.65 AUC 的分数。

对原始 Notebook 的主要更改包括:

  • 骨干网络:tf_efficientnet_b0_ns
  • fc 层前有 5 个 dropout 层(灵感来自 BirdCLEF2023 第 4 名BirdCLEF2021 第 2 名
  • 更高的学习率 (1e-3),更少的 warmup epoch (3) 和更少的 epoch (50)
  • 不同的 Mel 参数 (n_mels, hop_length)
  • 额外的增强:通过调整部分和整个图像的大小,在 Mel 频谱图上执行局部和全局时间/频率拉伸
  • 创建检查点平均 (checkpoint soup) 而不是使用早停

创建检查点平均遵循 model soups 的思想。但在这里,如果同一模型在不同 epoch (13-50) 的检查点权重在其中一个跟踪指标 (LRAP, cMAP, F1, AUC) 上显示出本地 CV 分数的提升,则对这些权重进行平均。这导致了更稳定甚至有时更好的 LB 分数。
通过上述所有修改,我现在能够创建一个由 6 个模型组成的集成,在公开榜上达到 0.70 AUC。虽然不是很好,但足以开始尝试使用从未标记数据集创建的伪标签。

使用伪标签提升性能

使用来自测试域的伪标签及其在训练过程中的处理是进入 leaderboard 前 10 名的关键要素。伪标签是通过将具有最佳公开榜分数的模型集成应用于未标记数据,为每个文件的每个 5 秒间隔创建预测而生成的。
之后,在下一阶段的训练期间,从未标记测试集中随机选择的 5 秒音频片段以 25% 到 45% 的概率添加到训练样本中。在混合两个音频信号之前,两个波形的振幅都乘以一个随机因子。
训练样本的目标向量(主要和次要物种位置为 1.0,其余全为零)与伪标签(包含预测概率的向量)结合,通过取两者的最大值形成新的目标向量。

这种使用伪标记测试数据的方法结合了几个优势:

  1. 噪声增强: 通过将训练样本与来自目标域的样本混合,模型学习物种在测试地点栖息地的环境背景噪声中听起来如何。这有助于解决 Xeno-Canto 录音和测试声景之间的域偏移。
  2. 额外的训练数据: 模型获得更多代表目标域噪声特征和物种分布的训练样本。
  3. 知识蒸馏: 由于伪标签源自更强模型(或本例中的模型集成)的预测,其知识在训练期间转移到较小的模型。

集成伪标签后,LB 分数显著增加。然后再次使用新的集成来创建一组新的伪标签。这个循环重复了 3 次,以迭代提高模型/集成性能。LB 分数 (公开 | 私有) 的进展如下表所示:

阶段 伪标签 单模型 (ID 4) 集成
0 - 0.65735 | 0.59270 0.70065 | 0.61738
1 来自阶段 0 集成 0.69165 | 0.66119 0.71090 | 0.67084
2 来自阶段 1 集成 0.69936 | 0.67445 0.72528 | 0.69035 *
3 来自阶段 2 集成 (归一化) 0.71154 | 0.67683 0.71716 | 0.69527

在第 2 次迭代后,伪标签需要一些归一化(缩放到 0…1 范围),以便进行稳定的模型训练,因为标签最小值变得太大。此外,阶段 3 集成未被选用于最终排名,因为不幸的是公开榜分数没有显示出预期的改进。
第 2 名集成(上表中的第 2 阶段)的模型性能和参数如下表所示:

参数/模型 ID 1 2 3 4 5 6
seed 42 42 42 42 70 42
n_folds 5 5 5 5 10 5
fold 4 1 4 4 0 4
dataset bc24 bc24 bc24 bc24 bc24+ bc24
n_mels 128 128 128 64 64 64
hop_length 512 512 1024 1024 1024 1024
image_height 256 256 128 64 64 64
image_width 256 256 128 128 128 64
pseudoLabelChance 35 % 40 % 45 % 30 % 30 % 25 %
ampExpMin -0.5 -1.0 -0.5 -0.5 -0.5 -0.5
ampExpMax 0.1 0.2 0.1 0.1 0.1 0.1
推理时间 ~ 50 分钟 ~ 50 分钟 ~ 17 分钟 ~ 12 分钟 ~ 12 分钟 ~ 11 分钟
公开 LB 分数 0.73270 0.71975 0.71104 0.69936 0.69124 0.69309
私有 LB 分数 0.68521 0.68533 0.68116 0.67445 0.64543 0.65862

集成中的模型多样性是通过不同的 Mel 参数、数据子集、图像大小、添加伪标签的概率以及改变训练和伪标签数据之间音量关系的振幅因子来实现的。参数 ampExpMinampExpMax 提供了乘以训练和伪标签样本以改变混合中音量的随机振幅因子的范围:ampFactor = 10**(random.uniform(ampExpMin,ampExpMax))
模型 5 是唯一使用外部数据的模型。为此,从 Xeno-Canto 下载了竞赛中 182 个物种的额外文件,并将每个文件的前 5 秒部分添加到训练集中(如果太短则用零填充)。

后处理

模型集成 simply 通过取每个单模型预测的平均值(sigmoid 输出的概率)来实现。最后一步,对于每个文件,给定窗口的预测与相邻两个窗口的预测相加,因子为 0.5。此后处理方法由 @theoviel 及其团队在 Cornell Birdcall Identification 竞赛的 第 3 名解决方案 中使用。

推理优化

  • 通过多线程并行预处理测试音频文件
  • 预计算不同版本的 Mel 频谱图并在不同模型间重用
  • 添加使用较小图像大小作为输入的模型
  • 设置 2 小时计时器以防止大型集成提交超时

无效的方法

太多的事情了 ;) 不幸的是,我在比赛较晚的时候才发现使用伪标签的好方法。一些截止期后的提交表明,如果包含伪标签,许多起初无效的方法实际上非常有利于提高私有榜分数。希望在下一届比赛中继续这些实验……

推理 Notebook

工作笔记

Lasseck M (2024) Improving Bird Recognition using Pseudo-Labeled Recordings from the Target Location. In: CEUR Workshop Proceedings.

同比赛其他方案