返回列表

8th place solution. And gold on last attempt

489. BirdCLEF 2022 | birdclef-2022

开始: 2022-02-15 结束: 2022-05-24 基因组学与生物信息 数据算法赛
第8名解决方案。最后一次尝试获得金牌

第8名解决方案。最后一次尝试获得金牌

作者: Kolya Forrat | 比赛排名: 第8名

这是我第一次参加 Kaggle 比赛,我投入了大量时间。我很荣幸能参与其中,非常感谢主办方、Kaggle 和所有参赛者。

第一步

  1. 我从 @kaerunantoka 的公开 notebook 开始,修改了梅尔频谱图的 hop length 和输入形状 [224, 512],并在提交结果中添加了类别权重
    权重数组是用 500 除以每种鸟类的数量,并将其最大值限制为 10。然后我将模型输出乘以权重数组。Public LB 得分为 0.77

  2. 我尝试了这种方法,对次要标签使用了 0.3、0.4 和 0.5 的标签值。通过集成学习,我在 LB 上获得了 0.79 的分数。

数据增强

针对波形:

Compose([OneOf(
     [AddGaussianNoise(min_amplitude=0.001, max_amplitude=0.011, p=1),
            NoiseInjection(p=1, max_noise_level=0.04)], p=0.4),                                
            PitchShift(min_semitones=-4, max_semitones=4, p=0.1),
            Shift(min_fraction=-0.5, max_fraction=0.5, p=0.1),
            Gain(min_gain_in_db=-12, max_gain_in_db=12, p=0.2),    
            Normalize(p=1.) ])

针对频谱图:

torchaudio.transforms.FrequencyMasking(24)
torchaudio.transforms.TimeMasking(96)
模型

以 tf_efficientnet_b0_ns 为主干的 SED 模型。

训练
  • Epochs = 30
  • LR = 0.001
  • weight_decay = 0.0001
  • dropout = 0.4
  • Loss: Focal BCE Loss
  • Optimizer: Adam (betas=(0.95, 0.999))
  • Scheduler: CosineAnnealingLR
验证

我使用 f1-macro 指标在 7 折交叉验证上验证模型。F1 的阈值范围为:[0.5, 0.1, 0.15, 0.20, 0.25, 0.30, 0.35, 0.4, 0.45, 0.5]。最佳检查点根据 0.3 和 0.5 阈值选择。

此步骤中无效的尝试
  1. 降噪
  2. 过采样稀有鸟类样本
  3. 通过降噪修剪长静音片段
  4. 加权损失
  5. 3 通道输入,其中第 1 通道是 power_to_db,第 2 通道是 melspectrogram,第 3 通道是 normalized melspectrogram

第二步

  1. 我手动修剪了评分音频中所有没有鸟叫声的片段,但 skylar 和 houfin 除外,这两个类别我只处理了每类 70 条记录。
  2. 将长度小于 1 分钟的音频分割为 15 秒的块,大于 1 分钟的分割为 30 秒的块。获得了约 40,000 条记录。
  3. 使用 0.25-0.75 幂次的权重数组,以减少其对推理的影响。
  4. 使用之前的流程在这些数据上进行训练,并与之前的模型集成,在 LB 上获得了 0.81 的分数。
数据预处理

同上。

数据增强

同上。

模型

以 tf_efficientnet_b0_ns 为主干的 SED 模型。

训练
  • Epochs = 60
  • LR = 0.0013
  • weight_decay = 0.0001
  • dropout = 0.4
  • Loss: Focal BCE Loss
  • Optimizer: Adam (betas=(0.95, 0.999))
  • Scheduler: CosineAnnealingLR
此步骤中无效的尝试
  1. PaSST 模型
  2. AST 模型
  3. 线性头模型
  4. PaSST 预处理

第三步

  1. 我使用了类似于 AST 的预处理方法。
  2. 每个 epoch 从所有数据中为每个类别随机选择最多 300 条记录。
  3. 在随机的 5 秒裁剪上训练,在前 5 秒上验证。
  4. 次要标签设为 0.4。
  5. 类别权重数组的最大值限制为 8,并使用 0.6 的幂次。
  6. 前 15 个 epoch 使用 mixup 0.4,第 16-22 个 epoch
同比赛其他方案