Skip to content

Drum Beat Counter

  • 来源:noai-train/联合训练/Day3/T1 drum-count 陈俊杰
  • 类型:Audio
  • 原始资料:drum-count.mdbaseline.ipynbmetrics.pyDay3 ref/T1...
  • 题面完整性:完整
  • 解法资料完整性:有参考 notebook/脚本;以下结合题面与常见 MIR 解法整理

题面大意

从复杂音乐混音片段中检测并计数底鼓 KD 和军鼓 SD 的数量。训练集包含混音音频、XML 标注、分离音轨和单次敲击干声;验证集和测试集只有混音。提交 submissionA.csvsubmissionB.csv,每行两个整数,分别为 KD 和 SD 数量。评分用两类计数的 MAE 映射:Score = max(0, 1 - 0.1 * MAE_total)

数据特点

主任务混音样本很少,audio_mix 只有 38 个训练样本,但训练集额外提供 isolated tracks 和 single hits。底鼓低频强、瞬态快;军鼓中高频和噪声成分明显,但会和贝斯、踩镲等混叠。目标是计数而非逐帧分类,误差容忍和事件定位精度要求不同。

考点

核心考点是小数据音频事件检测。要利用音频先验和额外分离音轨,而不是单纯训练大模型。需要识别瞬态事件、区分鼓类型,并把事件级检测结果汇总成计数。

涉及知识点

  • STFT、mel spectrogram、频带能量。
  • Onset detection、峰值检测、动态阈值。
  • 音频数据增强:混合、加噪、时间偏移、增益变化。
  • 弱监督计数:回归总数或先检测再计数。
  • MAE 目标与整数后处理。

解法思路

直接回归方案:把混音转为 mel spectrogram,训练 CNN 同时输出 KD 和 SD 数量。数据少时应使用分离音轨和 single hits 合成更多训练片段:随机拼接/混合鼓点、加入背景或其他乐器,生成带准确计数的样本。

事件检测方案更符合音频结构:对低频能量和中高频噪声能量做 onset 检测,得到候选峰;再用小 CNN/规则分类每个峰是 KD、SD 还是其他,最后计数。底鼓可关注低频 mel bins 的快速上升,军鼓可关注中高频宽带能量和瞬态形状。

可选/多种解法

端到端计数 CNN:实现简单,需大量合成增强。

峰值检测 + 分类:解释性强,小数据更稳。

分离音轨模板匹配:用 KD/SD 单击样本或 isolated tracks 建模板,在混音谱图上做相关匹配。

特殊技巧

评分只看数量,不看时间戳,因此事件检测阈值应围绕计数 MAE 调。对连续多个相邻峰要做非极大值抑制,避免一个鼓点计多次。训练时可把 XML 时间标注转换为帧级 onset target,后处理再计数。

调参优化

题解调参核心是让后处理直接对齐计数 MAE。传统 onset 方案应扫描峰值阈值、最小峰间距、平滑窗口、频段权重和 KD/SD 各自的动态阈值;深度模型方案则调正负帧窗口宽度、loss 中正样本权重、NMS 间隔和最终计数修正偏置。由于评分不看时间戳,验证时应记录“检测 F1”和“最终计数 MAE”两套指标,最终以 MAE 为准。训练数据少时,合成混音增强的增益范围和鼓点密度比模型层数更值得调。

注意事项

提交必须无表头且为整数。验证集/测试集只有混音,不能依赖 isolated tracks。由于训练 mix 极少,随机切分验证很不稳定,最好用音轨级交叉验证或直接评估合成数据上的鲁棒性。

推广意义

这题把音乐信息检索中的“检测-计数”流程压缩成竞赛任务。方法可推广到机器故障声计数、动物叫声计数、敲击事件检测和低样本音频监测。