Beat This!:从帧概率直接恢复节拍与小节重音
从多分辨率频谱、RoFormer 时序建模和位移容忍损失解释 final0 权重,并区分 beat、downbeat、BPM 与 MIDI 音符转写。
音乐信息检索 / 论文解读
一首歌的平均速度可以写成“120 BPM”,节拍跟踪保存的信息却细得多:时间轴上的每一拍,以及其中哪些拍点位于小节开头。遇到弱起、变速、临时换拍或没有鼓的段落,局部声学证据和全曲节奏结构往往互相冲突。长期以来,高精度系统通常先由神经网络预测逐帧激活,再由动态贝叶斯网络(DBN)依照速度范围、速度连续性和拍号候选整理成最终序列。
Beat This! 的价值正在于拿掉这道惯用的 DBN 收尾。它以多数据集训练扩大音乐分布,用卷积与沿频率、时间交替工作的 Transformer 形成长程表示,再用带类别权重的位移容忍损失处理拍点标注的细小错位。论文报告的 F1 提升并不意味着节拍问题已经解决:作者同时明确指出,无 DBN 模型在连续性指标上仍然落后,困难或样本稀少的音乐会出现非周期拍点。这个得失比单一排行榜名次更值得讨论。
1. 从“听见鼓点”到恢复节拍状态
早期节拍分析常从 onset strength envelope 出发:鼓击、拨弦和和声突变会在能量包络上形成峰值,自相关或 tempogram 再寻找重复周期。它们擅长回答“这里发生了瞬态吗”,却不容易回答“这个瞬态属于四分音符拍、八分音符细分,还是每两拍一次的重音”。同一段音乐常同时存在多个合理周期,半速与双速错误通常源于节拍层级选择。
神经网络提高了逐帧激活的质量,但没有自动消除层级歧义。后来成为主流的做法,是把网络输出交给隐马尔可夫模型或 DBN:状态中编码拍内位置、速度和小节位置,转移概率限制速度突变,并要求 downbeat 按候选拍号周期出现。对于速度稳定的 3/4、4/4 流行音乐,这套组合十分有效;对自由速度古典乐、临时换拍、超出预设 BPM 范围的音乐,它的规则也可能把原本正确的局部预测拉回错误轨道。
Beat This! 延续了无后处理节拍跟踪研究,并把无 DBN 的开放模型推到可以与高精度传统管线比较的位置。论文通过扩大训练分布、延长网络的时间视野,以及让训练目标适应标注本身的不确定性来提高表现。
2. 为什么作者坚持移除 DBN
DBN 同时承担四件事:局部峰值选择、限制允许的拍点间隔、约束速度变化、按拍号组织 downbeat。问题不在这些先验毫无道理,而在它们通常由固定参数表达。摇滚乐适用的速度波动范围未必适合肖邦演奏;限定每小节只能有若干种拍数,会在换拍处必然失效;把周期性当作绝对前提,也无法描述演奏失误、拼接音频或有意打破循环的段落。
拿掉 DBN 以后,模型不能再把低置信区域交给状态机补齐。它必须在原始输出中形成尖锐、稳定的峰值,并从长上下文判断哪个周期才是主要节拍。论文作者甚至观察到一个看似反常的训练现象:验证损失开始上升后,F1 仍会继续改善。对于一般分类任务,接近 0.5 的概率可以表达不确定;对于无需 DBN 的拍点序列,摇摆不定的帧概率会直接变成忽有忽无的拍点,模型反而需要更坚定的峰值。
3. 频率与时间被分开建模
模型输入是 30 秒、22.05 kHz 的单声道音频。前处理计算 128 个 Mel 频带,覆盖约 30 Hz 至 10 kHz;窗长 1024、hop 441,对应每秒 50 帧。这个时间分辨率足以把拍点定位到几十毫秒量级,也让 30 秒片段形成 1500 帧的长序列。
前端没有只用二维卷积把频率轴一路压扁。三个模块在降采样卷积之间插入 Partial Transformer:一层把每个时刻的频带当作序列,建立低频鼓、谐波和宽带瞬态之间的关系;下一层固定频带,沿时间观察重复重音。这个“频率向—时间向”交替思路受到 Band Split RoFormer 的启发,随后得到的特征再进入六层、512 维的时序 Transformer。RoPE 保留相对位置信息,完整注意力让任一帧可以参考整段 30 秒上下文。
模型最后有 beat 与 downbeat 两个线性头。作者额外设计 Sum Head,把 downbeat logit 加入 beat logit,使“小节第一拍同时也是拍点”更容易成立。这不是严格的逻辑约束,但在 GTZAN 上将距离最近 beat 超过 70 ms 的 downbeat 比例从 1.1% 降到 0.62%。这个设计主要修复输出的音乐有效性,消融实验中对 F1 的影响并不大。
4. 位移容忍损失怎样处理模糊标注
拍点标注并不像样本类别那样具有绝对边界。同一鼓击的低频起振、瞬态尖峰和人耳感到的“拍”可能不在同一帧;合奏者也不会在采样点级别完全同步。标准逐帧二元交叉熵要求预测峰值精确落在标注帧上,峰值偏开一两帧便同时收到“标注处不够高”和“邻帧不该高”的双重惩罚,最后容易学成宽而犹豫的峰。
论文的 shift-tolerant weighted BCE 先在时间上对预测做 7 帧、步幅 1 的最大池化,再用池化结果计算正样本损失;标注附近会受池化传播影响的负样本项则被遮蔽。用简化符号表示其核心操作:
p̃t = max|j−t|≤3 pjLpos(t) = −w · yt log p̃tpj邻近帧的预测概率w按正负样本比例设置的正类权重7 帧在 50 fps 下覆盖约 140 ms 的池化跨度
容忍窗口只吸收标注附近的细小位移,整条节拍线依然不能自由平移。半速、双速或整首 downbeat 错开一拍属于结构层级错误,仍需要长程表示和评测指标去发现。消融实验中,带权位移容忍损失是影响最大的设计选择;只保留正类权重、改回普通 BCE,成绩仍会下降。
5. 数据集规模扩大,也带来新的解释边界
训练与验证集合覆盖 Simac、SMC、Ballroom、Beatles、Harmonix、RWC、ASAP、Groove MIDI、GuitarSet、Candombe 等来源,共 4556 首;其中既有流行与舞曲,也有古典钢琴、独奏、速度变化和换拍材料。GTZAN 的 993 首可用曲目被保留为测试集。与只在常见流派上追求稳定相比,这种组合更符合论文“泛化到多样音乐”的目标。
扩充数据并不等于标签天然可靠。论文专门列出 GTZAN 中明显错误或难以形成唯一共识的标注,并指出某些录音甚至很难回答是否存在可被唯一追踪的 beat。位移容忍能缓和几帧范围的误差,却不能替代拍号、层级与审听共识。数据越多,来自不同标注传统的矛盾也越可能进入模型。
训练增广同样围绕泛化展开:速度按多个档位加快或减慢,音高在一定半音范围内转调;随机遮蔽会将 0.5 至 2 秒区域切成小段后打乱,使局部声学线索失去与节拍的对应,迫使模型参考更长上下文。每个原始片段共有 22 种预计算变化,复现实验时不必重新取得所有原始音频。
6. F1 更高,为何连续性反而更弱
Beat F1 和 downbeat F1 在容忍窗口内逐点匹配预测与标注,适合衡量局部定位。CMLt 只有当前拍和前一拍都正确时才延续连续片段;AMLt 还容许半速、双速和 offbeat 等替代节拍层级。三个指标面对同一错误会给出不同判断。
论文在多数据集交叉验证与 GTZAN 测试中报告了新的 F1 水平,却没有回避连续性退步:困难或样本稀少的片段会出现非周期预测,逐点 F1 未必受到同等幅度惩罚,CMLt/AMLt 却会迅速断裂。重新启用 DBN 可以修复部分非周期 downbeat、提高 CMLt,但也会把超出固定拍号或速度假设的正确预测改错,从而降低 F1。所谓“去掉 DBN 后更好”,必须补全为“局部准确率与结构连续性发生了新的取舍”。
| 输出或指标 | 回答的问题 | 容易漏掉的错误 |
|---|---|---|
| beat F1 | 拍点是否落在容忍窗口内 | 稳定半速、双速与长段漂移 |
| downbeat F1 | 小节第一拍是否命中 | 整段拍位错开后的结构后果 |
| CMLt / AMLt | 连续拍点及允许替代层级是否稳定 | 对真实换拍、非周期音乐的评价仍有假设 |
| 平均 BPM | 拍点间隔的总体速度 | 渐速、rubato、局部停顿与拍号变化 |
7. 从概率峰值到可用时间轴
推理阶段只保留极简后处理:在局部邻域中选择概率最高且超过 0.5 的帧;相邻帧概率完全相同时取中点;最后把 downbeat 移到最近的 beat,避免小节第一拍悬在普通拍点之外。超过 30 秒的音乐被切成互不重叠的片段,预测后再拼接。速度状态机已经移除,切片边界、阈值与峰值邻域仍然属于算法的一部分。
最终得到的 beats 和 downbeats 是以秒表示的时间戳,不是 MIDI 音符,也不是完整速度图。若用于 DAW 网格或 MIDI tempo map,还需从相邻拍点估计局部速度,平滑标注抖动,同时保留真实渐速;若用于灯光同步或切片,则要另行规定允许的毫秒误差。平均 BPM 只是这条时间轴的摘要,不能替代时间轴本身。
8. 官方发布了什么,权重又该怎样选
这项工作不存在“只有论文、模型由社区猜测复现”的归属问题。CPJKU 仓库是论文作者公开的官方实现,包含命令行与 Python 推理接口、训练代码、评测命令、预训练 checkpoint、标注仓库和预处理频谱链接。默认推理使用 final0;final0/1/2 是不同随机种子的主模型,约 78 MB,训练时排除了仅用于测试的 GTZAN;small0/1/2 约 8.1 MB;single_final* 与 fold* 分别服务于固定划分和八折交叉验证。
| 权重系列 | 训练/用途 | 适合的比较 |
|---|---|---|
final* | 除 GTZAN 外的全部训练数据,三个随机种子 | GTZAN 或论文未使用的新数据 |
small* | 较小的约 200 万参数模型 | 模型规模与精度权衡 |
single_final* | 论文单一 train/validation 划分 | 复现消融实验 |
fold0…7 | 八折交叉验证的对应折 | 复现论文跨数据集指标 |
官方 README 特别警告:用 final* 或 small* 回测参与训练的数据会得到不公平的好成绩。若必须评估论文使用过的数据集,应改用相应 single_final* 验证划分或 fold*。checkpoint 名字不是无关紧要的文件标签,它决定了某个数字是否具有可比性。
结语:移除规则之后,假设并没有消失
Beat This! 证明了高精度节拍跟踪不必把 DBN 当作不可替代的最后一关。卷积与双轴 Transformer 从频谱中提取局部和长程线索,Sum Head 修复 beat/downbeat 的从属关系,位移容忍加权损失让峰值不再被细小标注偏差拖宽,多流派数据则把模型带出稳定中速 4/4 的舒适区。
音乐先验只是换了位置:它从显式状态转移进入训练数据、网络容量、增强方式和损失函数。F1 的进步伴随连续性指标下降,说明逐帧命中与整段节奏稳定仍未被同一个目标统一。实际使用时应逐项查看拍点连续性、downbeat 拍位、换拍与渐速的保留情况,并确认所用 checkpoint 与测试材料相互独立;单独核对平均 BPM 会漏掉其中大部分信息。