返回列表

20th place solution: SED + CNN ensemble using onnx

553. BirdCLEF 2023 | birdclef-2023

开始: 2023-03-07 结束: 2023-05-24 环境监测 数据算法赛
第20名解决方案:使用ONNX的SED + CNN集成

第20名解决方案:使用ONNX的SED + CNN集成

首先,我要感谢竞赛主办方组织这次竞赛,也要感谢各位参与者。

我要特别向我的队友 @yokuyama@viiino@mobykjr@vupasama 表达最诚挚的感谢!!!

概述

我的最终提交是以下5个模型的集成:

  • eca_nfnet_l0 (SED)
  • eca_nfnet_l0 (简单CNN)
  • tf_efficientnetv2_b0 (SED)
  • tf_efficientnet_b0.ns (简单CNN)
  • tf_mobilenetv3_large_100 (简单CNN)

这些模型使用ONNX进行了加速。

我们的方法

  • 模型
  • 音频处理
    • 使用了Torchaudio。
    • 波形处理:
      • 时长:5秒
      • 采样率:32000
      • 使用了次要标签(以0.5的软标签使用)
      • 如果音频不足5秒,则重复拼接直到超过5秒
      • 验证时使用音频的前5秒
      • 使用audiomentations.Normalize进行归一化
    • 梅尔频谱图:
      • n_fft: 2048
      • win_length: 2048
      • hop_length: 320
      • f_min: 50
      • f_max: 14000
      • n_mels: 128
      • top_db: 80
      • 使用ImageNet的均值和标准差进行标准化
  • 模型参数
    • drop_rate: 0.5
    • drop_path_rate: 0.2
    • criterion: BCEWithLogitsLoss (标签平滑: 0.0025)
    • optimizer: AdamW (lr: 1.0e-3, weight_decay: 1.0e-2)
    • scheduler: OneCycleLR (pct_start: 0.1, div_factor: 1.0e+3, max_lr: 1.0e-3)
    • epoch: 30
    • batch_size: 32
  • 数据增强
    • 波形增强:
    • 梅尔频谱图增强:
      • 使用Torchaudio masking:
        • torchaudio.transforms.FrequencyMasking(freq_mask_param=mel_specgram.shape[1] // 5)
        • torchaudio.transforms.TimeMasking(time_mask_param=mel_specgram.shape[2] // 5)
      • mixup (alpha = 0.5), cutmix (alpha = 0.5)
  • 预训练
    • 使用Birdclef 2021和2022的数据进行预训练。
    • 预训练时长为15秒且不进行过采样。
      • 15秒的预训练时长似乎比5秒效果更好。
  • 处理不平衡数据
    • 我们进行了过采样,确保每个类别至少有50条数据。
  • 添加无呼叫数据
    • 无呼叫数据使用增强时采用的背景噪声音频,所有标签设为0。
  • 后处理
    • 对于SED模型,输出在帧级别和片段级别进行了平均。
  • 推理加速
    • 使用ONNX显著快于torchscript。
    • 标准化数据预处理,使同一预处理数据可输入多个模型。
    • 预处理数据提前存储在字典中,采用并行处理。
  • CV策略
    • StratifiedKFold (n=5, stratify=primary_label)
    • 所有鸟类物种都包含在训练数据中。

哪些方法有效

  • 过采样
  • 训练时随机截取或提取前5秒音频(各50%比例)
  • 以下增强方法:
    • 背景噪声、高斯噪声、梅尔频谱图掩码
  • SED模型
  • 标签平滑
  • 添加无呼叫数据
  • 预训练中增加时长
  • 集成:
    • SED模型与简单CNN的集成效果很好
  • 次要标签
  • 在数据加载器中设置较多numworkers → 显著提升训练速度!

哪些方法无效

  • 以下增强方法:
    • 粉红噪声、随机音量
  • Focal Loss
  • 在2023数据训练时使用长时长(15秒、30秒等)
  • 在提交中处理前后秒音频数据:
    • 使用前后各5秒共15秒创建梅尔频谱图预测 → 笔记本超时
    • 移动平均、移动加权平均
  • 大型模型
  • 几何平均
  • LSTM头
  • 强dropout
  • 排序集成
  • 手动标注:
    • 认为会导致过拟合...

代码

同比赛其他方案