返回列表

12th place solution

654. BirdCLEF+ 2025 | birdclef-2025

开始: 2025-03-10 结束: 2025-06-05 环境监测 数据算法赛
第 12 名解决方案 - BirdCLEF 2025
比赛: BirdCLEF 2025
排名: 第 12 名
作者: YuYagi
队友: zone0906
发布日期: 2025-06-08

第 12 名解决方案

我想向 BirdCLEF 2025 竞赛的组织者表示诚挚的感谢,同时也感谢所有慷慨分享过往比赛出色解决方案的 competitors。

我也深深感谢我的队友 @zone0906 为我们共同付出的所有努力。参加这次竞赛是一次不可思议的学习经历。

概述

我们的解决方案由三种不同的 pipeline 类型组成的集成,以及总共 12 个转换为 OpenVINO 的 SED 模型。

训练策略

训练是在所有 train_audio(监督)数据和 train_soundscapes(伪标签)数据上进行的,具体 pipeline 如下所述。

通用设置

  • BirdCLEF 2023 第 3 名解决方案 的启发,我们训练了沿频率轴应用注意力的 SED 模型。
  • 未进行本地验证;所有来自 BirdCLEF+ 2025 的可用数据均用于训练。
  • 检查点平均 (Checkpoint Soups)
    • 我们对第 30-50 个 epoch 的权重进行了平均用于提交,避免了早停中的人为偏差,并缓解了稀有类上的 macro-AUC 不稳定性。
  • EMA (衰减 = 0.999)
  • 加权批采样器 (Weighted Batch Sampler)
  • 数据增强
    • 对于原始波形 (Raw Waveform):
      • Gain, GainTransition, AddGaussianNoise, AddGaussianSNR, 时间移位 (Time Shifting)
      • 带有最大标签的 MixUp
        • 应用 MixUp 时,结果标签设置为两个原始标签的最大值
    • 对于梅尔频谱图 (Mel Spectrogram):
      • SpecAugment
      • MixUp
    • 梅尔频谱图参数
      • sample_rate = 32,000
      • window_size = 2048
      • hop_length = 512
      • fmin = 20
      • fmax = 16,000
      • mel_bins = 512
  • 损失函数:二元交叉熵 (BCE)
  • 随机 5 秒裁剪,避开人声片段(由 此代码 检测到的片段)
  • 将次要标签与主要标签同等对待。

第一阶段(监督学习)

  • 我们使用下面列出的集成来为 train_soundscapes 生成伪标签(原始概率)。
  • 该集成在公共排行榜上取得了 0.889 的成绩,在私有排行榜上取得了 0.902 的成绩。
  • 模型
    • mixnet_s
    • regnety_008
    • mnasnet_small.lamb_in1k
    • resnet18.a1_in1k
    • tinynet_a.in1k
    • seresnext26t_32x4d
    • resnet34d
    • resnet26d

第二阶段(迭代伪标签)

  • 在这个阶段,我们使用第一阶段生成的伪标签训练模型。
  • 由于公共排行榜的改进因模型而异,我们训练了两个独立的 pipeline。

第二阶段‑A

  • 对于每个 chunk,我们将前 10 个类的原始概率乘以二,并将所有其他类的概率 assigned 为零。
  • 有 40% 的概率,将每个 batch 与 train_soundscapes 音频和伪标签混合。

第二阶段‑B

  • 对于伪标签数据,使用所有类的原始概率(知识蒸馏)。
  • Batch size 设置为 64,每个 batch 包含 16 个监督 train_audio 样本和 48 个伪标签 train_soundscapes。

对于第 2 次迭代,伪标签由以下集成(3 个 seeds)生成:

  • 在第二阶段‑A 中训练的模型: mixnet_s, regnety_008, resnet34d, seresnext26t_32x4d, tinynet_a.in1k, convnextv2_nano.fcmae_ft_in22k_in1k_384
  • 在第二阶段‑B 中训练的模型: resnet18.a1_in1k

然而,由于公共排行榜和私有排行榜的分数在第 2 次迭代中都下降了,我们没有继续下去。
尽管如此,为了增加集成的多样性,我们将这些模型包含在最终提交中。

少数类子集 (Minority Class Subsetting)

  • BirdCLEF 2024 第 7 名解决方案 的启发,我们仅针对训练集中样本数为 100 或更少的类训练模型。
    训练所有参数没有带来改进;相反,我们冻结了在所有类上预训练的骨干网络,仅在这些少数类上训练 SED 头部——这被证明是成功的。
  • 在提交时,我们将这个少数类头部附加到全类模型上,并仅将其输出用于稀有类。
  • 尽管共享骨干网络,推理时间几乎没有增加,我们在公共和私有排行榜上都取得了更高的分数。

后处理

我们应用了跨相邻 chunk 的加权移动平均和文件级平均概率,方法与 (BirdCLEF 2024 第 6 名后处理) 相同。这使得公共和私有排行榜分数都提高了约 0.07–0.08。

最终提交模型

最终提交是以下模型的集成。(公共排行榜:0.904, 私有排行榜:0.918)

  • 模型集 1:第二阶段‑A (1 次迭代) + 少数类头部
    • mixnet_s (3 个 seeds)
    • tinynet_a.in1k (3 个 seeds)
    • regnety_008 (3 个 seeds)
  • 模型集 2:第二阶段‑A (2 次迭代) + 少数类头部
    • mixnet_s (1 个 seed)
    • tinynet_a.in1k (1 个 seed)
    • regnety_008 (1 个 seed)
  • 模型集 3:第二阶段‑B (2 次迭代)
    • resnet18.a1_in1k (1 个 seed)

无效尝试

  • 在过去比赛数据上预训练
  • Aves(未超过公共排行榜 0.810,因此未使用)
  • 10 秒训练片段
  • 后处理以预测 test_soundscapes 录音 duration
  • 通过平均偏移 2.5 秒的推理进行 TTA(与后处理结合后,公共和私有排行榜均下降)
同比赛其他方案