音频竞赛核心方法
一、音频特征提取
1.1 Google Perch v2
| 维度 |
说明 |
| 模型架构 |
Google 预训练音频分类器,基于 AudioSet 数据集 |
| 输出维度 |
1536 维嵌入向量 + 原始 logits |
| 类别覆盖 |
14,795 个科学名类别 |
| 推理方式 |
CPU 友好,支持 ONNX Runtime 加速 |
| 窗口策略 |
60s 音频切分为 12 个 5s 非重叠窗口 |
| 缓存机制 |
预计算输出保存为 parquet + npz,避免重复推理 |
| 适用场景 |
鸟类识别、通用音频分类 |
1.2 BEATs 编码器
| 维度 |
说明 |
| 模型架构 |
BEATs iter3+ AS2M(AudioSet 2M 预训练) |
| 输出维度 |
768 维帧嵌入(frame-level) |
| 优势 |
对昆虫、两栖类声音特征提取能力强 |
| 降维策略 |
PCA 768→256 维,减少计算量和过拟合 |
| 处理量 |
支持全量音频预计算(CPU only) |
| 输出文件 |
embeddings.npz(约 900MB) |
| 适用场景 |
多物种音频识别、昆虫/两栖类检测 |
1.3 梅尔频谱图
| 维度 |
说明 |
| 参数配置 |
sr=32000,n_fft=2048,hop_length=512 |
| 梅尔通道 |
n_mels=128(NFNet)或 256(SED CNN) |
| 频率范围 |
fmin=0,fmax=16000 |
| 动态范围 |
top_db=80.0 |
| 图像尺寸 |
224×224(NFNet)或 256×256(SED CNN) |
| 归一化 |
归一化后复制为 3 通道输入 CNN |
| 适用场景 |
直接输入 CNN 骨干网络(NFNet、EfficientNet) |
二、时序建模方法
2.1 Selective State Space Model(SSM)
| 维度 |
说明 |
| 核心思想 |
状态空间模型捕获时序动态,比 RNN 更高效 |
| ProtoSSM 配置 |
d_model=320,d_state=32,4 层 SSM |
| 原型数量 |
每类 2 个原型,用于原型余弦分类 |
| 交叉注意力 |
SSM 层间 8 头时序交叉注意力 |
| ResidualSSM |
第二遍校正,d_model=128,d_state=16,2 层 |
| 优势 |
比 Transformer 更轻量,适合长序列 |
| 适用场景 |
音频帧序列建模、时序分类 |
2.2 Attention Pooling
| 维度 |
说明 |
| 核心思想 |
自动学习鸣叫帧的权重,替代简单平均 |
| 实现方式 |
注意力机制对帧嵌入加权求和 |
| 优势 |
自动聚焦有声片段,忽略静音帧 |
| 适用场景 |
BEATs 帧嵌入聚合、SED 任务 |
2.3 GEM 频率池化(GeM Pooling)
| 维度 |
说明 |
| 核心思想 |
广义平均池化,平衡全局平均和最大池化 |
| 公式 |
f_i = (1/N * sum(x_j^p))^(1/p),p 可学习 |
| 优势 |
保留频率维度的关键特征 |
| 适用场景 |
梅尔频谱图 CNN 骨干后池化 |
三、音频数据增强
3.1 SpecAugment
| 维度 |
说明 |
| 频率掩码 |
随机遮蔽连续频率通道 |
| 时间掩码 |
随机遮蔽连续时间帧 |
| 参数设置 |
频率掩码数=2,时间掩码数=2 |
| 优势 |
提升模型对频率/时间变化的鲁棒性 |
| 适用场景 |
梅尔频谱图输入、帧嵌入增强 |
3.2 Mixup / CutMix(时序序列)
| 维度 |
说明 |
| Mixup |
时序嵌入序列线性插值,alpha=0.3~0.5 |
| CutMix |
时序序列片段替换混合 |
| 嵌入增强 |
mixup + dropout + noise 组合 |
| 优势 |
提升泛化能力,缓解过拟合 |
| 适用场景 |
ProtoSSM 时序嵌入、BEATs 嵌入训练 |
四、元数据融合
4.1 贝叶斯先验表
| 维度 |
说明 |
| 站点流行度 |
各观测站点的物种出现频率 |
| 小时流行度 |
一天中各小时的物种活动频率 |
| 联合流行度 |
站点×小时的联合分布 |
| 融合权重 |
类类型特定的 lambda 权重(Texture/Event) |
| 收缩策略 |
向全局均值收缩,避免稀疏类别过拟合 |
| 适用场景 |
Perch v2 后处理、先验知识融合 |
4.2 元数据注入
| 维度 |
说明 |
| 注入特征 |
hour of day、站点信息 |
| 注入方式 |
作为额外特征输入分类头 |
| 嵌入表示 |
站点/小时嵌入向量 |
| 优势 |
利用时间/空间先验提升预测准确性 |
| 适用场景 |
BEATs SED Head、时序分类 |
五、音频后处理技术
5.1 时序平滑(Delta Shift Smoothing)
| 维度 |
说明 |
| 核心思想 |
利用相邻时间窗口的预测结果平滑当前预测 |
| 参数设置 |
alpha=0.20,12 窗口序列 |
| 公式 |
p_t = alpha * p_{t-1} + (1-alpha) * p_t |
| 优势 |
减少时序预测抖动,提升稳定性 |
| 来源 |
2025 Rank 1 技术 |
| 适用场景 |
多窗口音频序列后处理 |
5.2 TTA(时间平移测试时增强)
| 维度 |
说明 |
| 平移偏移 |
5 个偏移:[0, 1, -1, 2, -2] |
| 实现方式 |
循环移位时间窗口,多次推理取平均 |
| 优势 |
提升预测鲁棒性,对时间偏移不敏感 |
| 适用场景 |
ProtoSSM、Perch v2 推理 |
5.3 温度缩放(Temperature Scaling)
| 维度 |
说明 |
| 每类群温度 |
Aves: 1.10,Texture taxa(两栖类、昆虫): 0.95 |
| 核心思想 |
不同类群使用不同温度参数校准概率 |
| 优势 |
针对类群特性优化概率分布 |
| 适用场景 |
ProtoSSM 输出校准 |
5.4 排名感知缩放(Rank-Aware Scaling)
| 维度 |
说明 |
| 核心思想 |
按文件最大值预测进行 power transform |
| 参数设置 |
power=0.4 |
| 优势 |
提升高置信度预测的区分度 |
| 来源 |
2025 Rank 3 技术 |
| 适用场景 |
多物种分类后处理 |
5.5 文件级置信度缩放
| 维度 |
说明 |
| 核心思想 |
top-2 窗口均值缩放 |
| 实现方式 |
使用 top-K 窗口的平均置信度调整预测 |
| 优势 |
利用文件内多窗口一致性提升置信度 |
| 来源 |
2025 竞赛技术 |
| 适用场景 |
多窗口音频文件后处理 |
5.6 逐类阈值优化
| 维度 |
说明 |
| 优化方法 |
OOF 优化网格搜索 [0.25 … 0.70] |
| 核心思想 |
每个物种使用不同的决策阈值 |
| 优势 |
针对物种特性优化召回/精确率平衡 |
| 适用场景 |
多物种分类提交 |
5.7 属级代理(Genus-Level Proxy)
| 维度 |
说明 |
| 问题背景 |
部分竞赛物种未映射到 Perch 类别 |
| 解决方案 |
使用同属任何 Perch 类别的最大 logit 近似 |
| 优势 |
利用分类学关系处理未映射物种 |
| 适用场景 |
Perch v2 标签映射后处理 |
六、音频特有模型架构
6.1 SED CNN 架构
| 维度 |
说明 |
| Backbone |
tf_efficientnet_b0.ns_jft_in1k |
| 池化 |
GEM 频率池化(GeM pooling) |
| Attention SED Head |
注意力池化 + 分类卷积 |
| 输出 |
clipwise 概率 + segmentwise logits |
| 输入 |
256×256 梅尔频谱图(3 通道) |
| 适用场景 |
声音事件检测(SED) |
6.2 NFNet 架构
| 维度 |
说明 |
| Backbone |
eca_nfnet_l0(24M 参数) |
| 特点 |
Normalizer-Free Networks,与 Perch v2 特征互补 |
| ECA 注意力 |
Efficient Channel Attention,轻量级通道注意力 |
| 输入 |
224×224 梅尔频谱图 |
| 优势 |
确保模型多样性,与其他方案互补 |
| 适用场景 |
梅尔频谱直接分类 |
6.3 ProtoSSM 分类头
| 维度 |
说明 |
| 原型余弦头 |
基于原型向量的余弦相似度分类 |
| 门控蒸馏 |
ProtoSSM 分类头结合 Perch logits 蒸馏 |
| 蒸馏权重 |
distill_weight: 0.1 |
| 多任务 |
物种 BCE + 原型对比 + 蒸馏 + 分类学辅助 |
| 适用场景 |
Perch 嵌入时序分类 |
七、音频竞赛工程实践
7.1 内存安全设计
| 维度 |
说明 |
| 渐进式降级 |
commit 失败时按顺序关闭组件 |
| 降级顺序 |
batch_files: 8→4 → USE_MLP_PROBES=False → USE_BIRDNET_FORCE_OFF=True |
| batch_files 调节 |
Perch batch_files 默认 8,比 24 更安全 |
| ResidualSSM |
默认关闭,最大内存风险分支 |
| 适用场景 |
Kaggle 90 分钟时间限制、CPU 推理 |
7.2 ONNX 推理优化
| 维度 |
说明 |
| 核心思想 |
使用 ONNX 格式推理 Perch 模型 |
| 优势 |
提升 CPU 推理速度 |
| 适用场景 |
Kaggle CPU 推理加速 |
7.3 外部数据集成
| 维度 |
说明 |
| 数据来源 |
Xeno-canto(XC)音频数据 |
| 筛选条件 |
Aves,Q A |
| 处理流程 |
下载→重采样 32kHz 单声道→Perch v2 提取嵌入 |
| 输出 |
xc_perch_embeddings.{npz,parquet} |
| 规模 |
11,563 条 XC 录音,159 种 |
| 适用场景 |
扩充训练数据、提升稀有物种表现 |
八、音频竞赛典型流水线
8.1 Perch + ProtoSSM 流水线
音频 (.ogg, 60s)
→ 12 × 5s 非重叠窗口
→ Perch v2 提取 logits + 1536 维嵌入
→ ProtoSSM_v5(第一遍) + MLP
→ 集成 → ResidualSSM(第二遍)
→ TTA → 每类群温度
→ 文件级缩放 → 排名感知
→ Delta 平滑 → 逐类阈值
→ 最终输出
8.2 BEATs + SED 流水线
音频
→ BEATs 帧嵌入提取 [N, 8, 768]
→ StandardScaler + PCA(768→256)
→ 5x AttentionSEDHead 集成
→ 预测平均 → sigmoid
→ 最终输出
8.3 NFNet 流水线
音频
→ 梅尔频谱 (sr=32000, n_mels=128, 5s→224×224)
→ eca_nfnet_l0 前向传播
→ sigmoid
→ 最终输出
8.4 Perch v2 流水线
音频 (.ogg, 60s)
→ 12 × 5s 非重叠窗口
→ Perch v2 提取 logits + 1536 维嵌入
→ 贝叶斯先验融合
→ PCA 降维 (64 维)
→ 逻辑回归探针
→ 混合输出
九、音频竞赛关键参数配置
9.1 ProtoSSM 训练配置
| 参数 |
值 |
| d_model |
320 |
| d_state |
32 |
| SSM 层数 |
4 |
| 原型数量 |
每类 2 个 |
| 交叉注意力头数 |
8 |
| 训练轮数 |
80 |
| 余弦重启周期 |
20 |
| SWA 起始轮 |
52 |
| SWA 学习率 |
4e-4 |
| 蒸馏权重 |
0.1 |
9.2 MLP 探针配置
| 参数 |
值 |
| 隐藏层 |
(256, 128) |
| Focal loss gamma |
2.5 |
| 标签平滑 |
0.03 |
| 交叉验证 |
5 折 OOF |
9.3 ResidualSSM 配置
| 参数 |
值 |
| d_model |
128 |
| d_state |
16 |
| SSM 层数 |
2 |
| 校正权重 |
0.35 |
9.4 NFNet 训练配置
| 参数 |
值 |
| Backbone |
eca_nfnet_l0 |
| 采样率 |
32000 |
| n_mels |
128 |
| 片段长度 |
5s → 224×224 |
| Focal loss gamma |
2.0 |
| 交叉验证 |
StratifiedGroupKFold |
| 数据增强 |
Mixup(alpha=0.5) + SpecAugment |
十、音频竞赛 LB 分数参考
| 方案 |
特征提取器 |
分类头 |
时序建模 |
LB 分数 |
| ProtoSSM v5 |
Perch v2 (1536d) |
ProtoSSM + MLP |
BiSSM (4 层) |
0.929 |
| BEATs SED |
BEATs (768d) |
AttentionSEDHead |
帧序列 |
0.912 |
| Perch v2 |
Perch v2 (1536d) |
LR Probes |
时序平滑 |
0.908 |
| LB 0.948 |
Perch v2 + ProtoSSM |
多模型集成 |
BiSSM + TTA |
0.948 |