📄 把钢琴录音逐帧变成 88 键开关:CQT 加双向循环与注意力的复调转谱
英文题目:A learning-based method of automatic music transcription
评分:5.8/10 | 创新 1/2 | 技术严谨 1/1.5 | 实验充分 1/1.5 | 清晰度 0.7/1 | 影响力 1/1.5 | 开源 0/1.5 | 可复现 0.3/0.5 | 工程/实践 0.8/1.5
👥 作者与机构
- Phu-Anh-Tai Do:Department of Information Technology;FPT University;Ho Chi Minh City, Vietnam
- Huu-Hoang Nguyen:Department of Information Technology;FPT University;Ho Chi Minh City, Vietnam
- Duc-Hoang Nguyen:Department of Information Technology;FPT University;Ho Chi Minh City, Vietnam
- Thanh-Hai Le:Faculty of Information Technology;Ho Chi Minh City Open University;Ho Chi Minh City, Vietnam
📌 核心摘要
自动音乐转录要把混合钢琴录音变成每帧哪些琴键发声的符号记录,难点是多音叠加、泛音列频域重合、击弦延音混响造成帧间相关及发声帧远少于静音帧。论文输入44.1kHz下混单声道波形,做常数Q变换得7个八度共252维对数频率表示,每帧映射为88个琴键二值向量,输出逐帧激活的钢琴卷帘序列。处理分三步:前端修正注意力筛选频带与时间上下文,输出送入3层双向长短期记忆网络建模前后向依赖,最后经88维sigmoid以0.5阈值二值化并做最短持续与间隙填补,训练用二元交叉熵族损失应对约41.5:1稀疏。与把注意力夹在循环层之间或只用单向循环不同,前置多头注意力先滤波再时序积分并利用未来帧,高容量下标准二元交叉熵精度召回更平衡。在MAPS与MAESTRO构成的复调钢琴测试上,最好的多头注意力加双向长短期记忆网络取得F1-score为88.20%、准确率为78.90%、精确率为0.89、召回率为0.86,高于同协议下单向长短期记忆基线的71.20%。该结论只在上述两套钢琴数据与帧级别指标下成立,未验证其他乐器、非钢琴音色与音符级起止评价下的表现。共享八度、四度、五度等谐波音程的密集复调仍易基频混淆,仅用MAPS训练会在高音区把泛音误判为独立音符,加权损失在混响衰减段还引入幽灵激活。原文未披露训练、推理或部署成本。
🔗 开源与复现资源
本次未形成可展示的已核验资源记录,开放状态尚未核实。
可达状态仅表示本次链接检查结果,不代表许可证、本文权重或运行复现已验证。
🧭 深度解读
转谱要把什么声音变成什么符号
自动音乐转谱的输入是一段录好的钢琴波形,目标是输出与时间对齐的符号音符,也就是哪一键在什么时候响、什么时候停。论文把这个问题限定在复调钢琴,难点在于同一时刻可以有多个键一起响,泛音互相重叠,踏板与混响又让前一个音的尾巴拖到后 1 帧。
对初学者来说,关键是理解输出不是一段文字描述,而是一个随时间展开的开关矩阵。每一列是一个时间帧,每一行是 88 个琴键之一,格子里是 0 或 1。模型要对每 1 帧的 88 个位置各自回答响还是不响,这就是后文反复说的帧级别多标签分类。评价也是在这个矩阵上数对错,而不是只看找到几个音名。
已有路线为什么从分解转向学习
论文回顾了两条路线。较早的非负矩阵分解、概率谱平滑、多基频估计等方法靠手工设计的声学假设把混合频谱拆开,数学上可解释,但在表情丰富的强弱变化和密集和声面前泛化有限。
另一条路线是用监督学习直接从数据学决策边界,从 87 个二元支持向量机加隐马尔可夫平滑,到卷积声学前端加循环语言模型,再到纯帧级别卷积。论文把自己的位置放在后者之中,继承用循环网络做帧级别钢琴转谱的思路,但指出均方误差加不合适激活会导致训练不稳或欠拟合,因此改用 Sigmoid 输出加交叉熵类损失,并加入双向语境和注意力。比较时要注意输入、帧划分和监督是否相同,手工分解与端到端分类的胜负不能只看一个数字。
为什么复调钢琴特别难判
论文列出 4 个具体困难。第一是同时发声造成线性混合,时频图上多个音的能量缠在一起。第二是八度、纯五度、纯四度等协和音程的基频成小整数比,一个音的泛音正好落在另一个音的基频上,很难只看频谱峰就断定谁在响。第三是击弦、踏板共鸣与房间混响带来拖尾,相邻帧并不独立。第四是稀疏性,即每帧最多响 8 到 10 个键,其余 78 个以上都是静默。
下面这张标注节选说明监督长什么样,每个事件有起始秒、结束秒和 MIDI 音高编号,模型训练时要把它们先映射到帧级别的 0 或 1 矩阵,表前先交代这组数字的比较问题与对齐含义。
| Onset Time (s) | Offset Time (s) | MIDI Pitch |
|---|---|---|
| 0.988281 | 1.111979 | 34 (A#1) |
| 1.109375 | 1.135417 | 53 (F3) |
| 1.109375 | 1.161458 | 62 (D4) |
上表只是原文标注格式的节选,0.988281 秒到 1.111979 秒对应 34 号音等连续事件,它提醒读者标签的时间精度是秒级小数,而模型输出是离散帧,二者之间需要按跳长对齐,这一步的对齐误差在很快的乐段里会被放大为边界错位。
整个系统让一个片段经历什么
跟着一个 6 秒左右的片段走一遍会更清楚。最上面是波形振幅随时间起伏,中间是时频表示里随时间延续的水平亮带,最下面是与之对应的钢琴卷帘黑横线,最后才是五线谱。系统要做的就是从波形出发,先得到中间那种时频特征,再逐帧输出下面那种 0 或 1 矩阵。
请按从波形到频谱再到卷帘的主线看这张总览图,重点看同一时刻的亮带与黑线是否上下对齐,并注意横轴时间跨度与纵轴从振幅到频率再到音高的变化。
看图路径: 1. 先沿从上到下四个面板看横轴是否都是时间;2. 对比第二块频谱里横向亮带与第三块钢琴卷帘黑横线的位置;3. 注意第四块五线谱只是同一段音乐的符号写法
论文图 1。原论文 Figure 1::“Data representation pipeline in an Automatic Music Transcription (AMT) system.”。
这张图确实可见 4 个上下排列的面板,横轴都是时间,纵轴从振幅变为频率再变为 MIDI 音高,中间频谱的亮带与卷帘的黑线在时间上大致对应。它的教学价值在于把必须保留的信息说清楚:起音与止音的位置、同时响的音数、每个音的持续长度都不能丢。后续的恒 Q 变换、循环网络与注意力都是为保住这些信息而设,任何一步把时间或频率弄粗都会直接反映在卷帘的断裂或误报上。
输入特征为什么用对数频率的恒 Q 变换
钢琴相邻半音的频率比是固定的,低音区相差只有几赫兹,高音区相差很大。等间隔的短时傅里叶变换在低频不够细、在高频又冗余,梅尔倒谱还会丢掉分辨多音高所需的精细泛音结构。Constant-Q Transform 即恒 Q 变换的做法是让中心频率与带宽之比保持常数,低频用长窗换频率分辨率,高频用短窗保时间瞬态。
论文的几何关系用 Q 值公式给出,其中 b 是每八度箱数,它决定频率轴按等比排列的密度。
\[Q=\frac{f_{k}}{\Delta f_{k}}=\frac{1}{2^{1/b}-1},\]具体配置是 7 个八度乘以每八度 36 箱,每半音分到 3 箱以保留音高细微差别,共 252 维,每帧跳长 512 点,在 44.1 kHz 采样下约 11.6 ms,这个向量就是循环网络每步读入的对象。
\[K=7\times 36=252\text{ frequency bins}.\]请先看横轴 Time 时间与纵轴 Note 音高方向的能量分布,再分辨竖直瞬态与水平延音,右侧色标是分贝刻度,亮带表示能量集中的音高成分。
看图路径: 1. 看横轴时间与纵轴音高方向的网格亮带分布;2. 分辨竖直的敲击瞬态与水平的持续音带;3. 对照右侧分贝色标理解亮暗代表能量强弱
论文图 3。原论文 Figure 3::“Constant-Q Transform (CQT) spectrogram.”。
这张标题为 Constant-Q power spectrum 的恒 Q 功率谱确实可见大量水平亮带表示持续的音高成分,以及密集的竖线表示敲击与和声变化,右侧色标从 -80 dB 到 -10 dB,横轴为 Time、纵轴为 Note。其作用是把波形变成每帧 252 个数的向量,后续循环网络每次读入的就是这样一个向量。代价是时间分辨率被跳长固定,极快的重复触键可能糊成一条连续激活。
Constant-Q Transform × 时间帧 × 钢琴卷帘: Constant-Q Transform 负责把波形变成按半音等比排列的频谱,帧是它按固定跳长切出的时间片,钢琴卷帘则是每帧对应 88 个键是否发声的二值矩阵;三者搭配的意义是让频率轴与音高对齐、时间轴与标注对齐,后续循环网络才能逐帧做 88 路判断。
循环骨干如何记住前后语境
每帧 252 维向量按时间排成序列后交给循环网络。普通循环网络靠隐状态传递历史,但长序列上梯度容易消失或爆炸,记不住终止式或长延音。长短期记忆网络即 LSTM 引入细胞状态作为传送带,用遗忘门、输入门和输出门控制保留、写入与读出,从而稳定地传递长期依赖。
论文的输出目标是每帧 88 维二值向量,1 表示该音高正在响,0 表示静默,堆叠起来就是钢琴卷帘。
\[\mathbf{y}_{t}=[y_{t,1},y_{t,2},\dots,y_{t,88}]^{T}\in\{0,1\}^{88},\]单向 LSTM 只能看到过去,而音乐里当前和弦的功能常常要看它解决到哪里。双向长短期记忆网络即 BiLSTM 用两套独立隐层分别从前往后和从后往前扫描,再把 2 个方向的隐向量拼接起来,维度变为单向的 2 倍。
\[\mathbf{h}_{t}=[\overrightarrow{\mathbf{h}}_{t},\overleftarrow{\mathbf{h}}_{t}]\in\mathbb{R}^{2d}.\]拼接后的维度是单向的 2 倍,论文每层是前向 256 加后向 256。直观例子是当前帧频谱同时有低音与其八度泛音,单看当前帧难定高八度是否真被按下,若后面出现高音声部的独立进行,双向语境有助于回头修正。代价是参数与计算明显增加,基线 1.59M 到双向后 4.24M 就是证明。
长短期记忆网络 × 双向长短期记忆网络: 长短期记忆网络只从过去向未来传递隐状态和细胞状态,适合记住延音与和声进行;双向长短期记忆网络再加一条从未来向过去的独立循环,把当前帧的前后语境拼在一起,代价是隐单元和参数翻倍,好处是在属七和弦到主和弦这类需要看解决方向时减少歧义。
注意力放在哪里以及多头做了什么
注意力在这里不是生成变长句子,而是给密集同步的帧加权。经典加性注意力先算查询状态与每个编码隐状态的对齐分数,再用 softmax 归一化成权重做加权和。论文的改进是给对齐函数加偏置并整体包一层双曲正切,把分数压在有界区间,避免帧级别谱注意力出现极端分歧。
多头版本不是点积缩放,而是让多个头各自用上述改进公式算子空间对齐,再把各头输出求和,经输出投影矩阵与偏置加双曲正切压缩,最后才 softmax 得到权重去调制隐状态。结构上是并行分支在求和处汇合,共享输入表示但有各自投影,论文最好模型用 3 个头。
请从下往上看这张多头模块的流程,重点看底部 Input 经 Linear-projected 之后如何分叉再求和,以及 Tanh 与 Softmax 的先后顺序与最后的相乘环节。
看图路径: 1. 从下往上看输入经过线性投影再进入多个注意力分支;2. 注意 Sum 方框表示多头求和而非拼接;3. 跟踪 Tanh 与 Softmax 之后再与输入相乘得到上下文
论文图 8。原论文 Figure 8::“Proposed Modified Multihead Attention module.”。
这张图确实可见底部 Input 先经过 Linear-projected,再进入叠片状的多个 Attention Mechanism 分支,向上依次经过 Sum、Tanh、Softmax 与 Multiply 得到顶部 Context,右侧还有回到 Multiply 的直连。它帮助理解多头不是简单拼接,而是先求和再投影压缩,保持参数紧凑。位置实验很关键,放在循环层之间只对已混合的时间表示加权,而放在输入前端可直接筛选有关频箱,论文报告前端顺序更优。3 个头分别照顾低中高频的说法应理解为设计动机,原文没有逐头可视化证据。
加性注意力 × 改进多头注意力: 加性注意力用可学习投影算每帧与其他隐状态的对齐分数再加权求和,改进单头版本在本文加上偏置并用双曲正切把分数压到有界范围;改进多头注意力让 3 个这样的头并行算不同子空间的对齐再求和投影压缩,组合起来是为了同时照顾低音基频、中声部和声与高音泛音,而不是只学一种加权平均。
样本极不平衡时损失与阈值如何配合
训练语料的统计是理解损失的前提。非激活标签总数为 5.36 乘以 10 的 9 次方,激活标签只有 0.129 乘以 10 的 9 次方,二者之比约为 41.5 比 1,这个比例直接决定对称损失会偏向全零。
\[\text{Ratio}\approx\frac{5.36\times 10^{9}}{0.129\times 10^{9}}\approx 41.5:1.\]请注意纵轴以十亿为单位,比较两根柱子的高度差,并把这种悬殊与后文加权损失的动机联系起来,思考全零预测为何表面正确率很高但召回接近零。
看图路径: 1. 比较红色 Label 1 与蓝色 Label 0 柱高的数量级差异;2. 注意纵轴单位是 1e9 即十亿;3. 把这种悬殊与损失加权的动机联系起来
论文图 5。原论文 Figure 5::“Class distribution imbalance in the training corpus.”。
这张柱状图确实可见 Label 0 的蓝色柱远高于 Label 1 的红色柱,纵轴以 1e9 为单位。这种悬殊下若用对称损失,模型报全零也能得到表面很高的正确率,但召回接近零。论文因此试了加权二元交叉熵,把正样本权重设为 0.65、负样本设为 0.35,人为放大漏检的惩罚。
训练时所有模型都用 Adam,初始学习率 0.001,按验证损失早停耐心 10 轮。输出层对 88 个节点各自用独立 Sigmoid 给出 0 到 1 之间的概率,不用 softmax,因为和弦允许任意组合。推理时以 0.5 为阈值二值化,再做小于 3 帧约 35 ms 的短段删除和 1 到 2 帧的缝隙桥接。阈值与形态学规则都是固定的,没有学习,这意味着最终的起音边界仍受启发式影响。
二元交叉熵 × 加权二元交叉熵: 二元交叉熵对 88 个音高各自算预测概率与 0 或 1 标签的对数损失,正负样本对称;加权二元交叉熵给正样本 0.65、负样本 0.35 的不同权重,人为放大漏检的代价;搭配的理由是训练集中非激活与激活约为 41 比 1,不加权时模型容易塌到全零,用加权先把召回拉起来,容量足够后再比较标准损失的精度与召回平衡。
数据划分与评测口径是什么
实验用 MAPS 与 MAESTRO 两套钢琴数据。前者含三角与立式钢琴及高质量合成器的录音与音符起止标注,后者是十年国际钢琴比赛的 Disklavier 演奏,MIDI 与音频对齐在 3 ms 以内。划分决定了结论能推广到哪种音色与录音环境,跨库联合训练正是为了覆盖更多情形。
下表说明两库的训练、验证与测试文件数,比较问题是联合训练比单库多见了哪些声学环境,指标方向是帧级别统计值越大越好。
| Dataset | Train | Validation | Test |
|---|---|---|---|
| MAESTRO [10] | 962 | 174 | – |
| MAPS [9] | 23,928 | 2,991 | 2,991 |
上表表明 MAPS 有 23928 个训练文件加 2991 验证加 2991 测试,MAESTRO 有 962 训练加 174 验证且测试栏为空。联合训练比只用 MAPS 多见了竞赛级演奏与音乐厅录音,这是后文多数据集增益的前提。指标方面精确率看报对比例,召回率看找回比例,准确率按真正例除以真正例加假正例加假反例,F1 是精确率与召回率的调和平均,分母都不含真负例,所以全零偏置下的表面高正确率在此口径下会被揭穿。
七种配置的增益与代价如何累积
7 种配置在相同训练流程下比较,问题是双向、注意力位置与多头各自带来多少提升,代价是参数从 1.59M 涨到 4.43M。下表是原文完整的基准评测矩阵,包含模型结构、参数量、精确率、召回率、准确率与 F1-score,表前先说明比较条件与指标方向。
| Model Architecture | Parameters | Precision | Recall | Accuracy (%) | F1-score (%) |
|---|---|---|---|---|---|
| LSTM (Base Model) [22] | 1.59M | 0.76 | 0.66 | 55.20 | 71.20 |
| Bidirectional LSTM | 4.24M | 0.77 | 0.74 | 61.20 | 75.98 |
| LSTM–Attention | 1.66M | 0.74 | 0.75 | 59.80 | 74.80 |
| Bidirectional LSTM–Attention | 4.35M | 0.80 | 0.83 | 69.50 | 82.00 |
| Attention–LSTM | 1.66M | 0.80 | 0.84 | 69.80 | 82.20 |
| Attention–Bidirectional LSTM | 4.35M | 0.84 | 0.88 | 75.50 | 86.10 |
| Multihead–Bidirectional LSTM (WBCE) | 4.43M | 0.84 | 0.90 | 77.30 | 87.20 |
| Multihead–BiLSTM + BCE (Best Model) | 4.43M | 0.89 | 0.86 | 78.90 | 88.20 |
| Multihead–BiLSTM (Single Dataset: MAPS only) | 4.43M | 0.83 | 0.87 | 74.50 | 85.40 |
该完整原表保留了从单向基线到双向、单头注意力不同位置、前置多头加权与标准损失以及单数据集对照的全部行列。可见基线单向 LSTM 的 F1-score 为 71.20%,换成双向后到 75.98%,前端单头注意力加双向到 86.10%,多头加权版本到 87.20%,改用标准二元交叉熵的最好模型到 88.20% 与 78.90%,只用 MAPS 则回落到 85.40%。这支持双向语境、前端注意力与多头求和投影是层层累加的,而损失的选择是在高容量下调精度与召回平衡。代价也要明说,双向把每层隐单元翻倍,参数从 1.59M 到 4.24M,前端注意力只小幅增加到 4.35M,多头到 4.43M。
准确率 × 精确率 × 召回率 × F1 分数: 准确率、精确率、召回率与 F1 分数都是在全部 88 键乘以全部测试帧上数真正例、假正例与假反例得到的帧级别统计,其中本文准确率按真正例除以真正例加假正例加假反例计算;精确率看报出的音有多少是对的,召回率看该报的音找回多少,F1 是二者调和平均,组合起来才能看出全零偏置、高召回多报与干净背景少报之间的不同取舍。
损失函数与数据多样性各自改变什么
消融要回答两个独立问题。第一是同一多头双向结构下加权与标准损失有何不同,第二是同一结构下单库与双库训练有何不同。下表把原文有连续句子支撑的权重设置与精度召回取舍放在一起,比较问题是高容量下加权是否仍然必要。
| 条件 | F1-score | Precision | Recall |
|---|---|---|---|
| Multihead-BiLSTM with BCE | 88.20% | 0.89 | 0.86 |
上表数字均来自原文连续句子,加权版本召回达到 0.90,防止早期塌到全零,但在混响尾巴处容易出现微弱的幽灵激活,假正例增多;标准版本在高容量下背景更干净,精确率从 0.84 升到 0.89,总体 F1 更高。这说明加权不是无条件更好,它的作用阶段与模型容量有关。数据方面只用 MAPS 时 F1 从联合训练掉 2.80 个百分点到 85.40%,定性上高音区把低音泛音误判为独立音的情形增多。这支持多声学环境有助于区分基频与泛音,但原文没有给出按作曲家、钢琴型号或速度分层的细化统计,因此不能把增益推广到所有未见录音条件。
哪些段落仍然容易错
论文的误差分析指出 4 类未解决问题。八度、五度、四度叠置时高音基频与低音强泛音重合,模型会把低音能量误归给高音或漏掉内声部。颤音与快速重复触键在 11.6 ms 帧分辨率与恒 Q 时间积分下容易糊成连续激活。
极快乐段音长只有 3 到 5 帧,帧边界稍有错位就会显著拉低指标。后处理仍是固定阈值加删短补缝隙,没有可学习的语言模型或隐马尔可夫平滑。这些局限决定了结论的成立条件。
88.20% 是在帧级别统计、固定阈值 0.5、特定划分与联合训练下得到的,不是音符级别起音容差下的结果,也没有报告延迟、实时因子或统计显著性。把它理解为在给定评测口径下轻量循环加注意力的有效性证据更为准确。
复现第一步要固定什么
若要复现,先固定数据与特征再谈模型。把波形统一到 44.1 kHz,立体声按通道平均成单声道,按每八度 36 箱、7 八度、跳长 512 算恒 Q 变换得到每帧 252 维,再按标注的起止秒映射到帧级 88 维标签,并核对正负比例是否接近 41 比 1。模型从 3 层单向 LSTM 每层 256 加 Dropout 0.2 的基线起步,确认能跑通 Sigmoid 加权损失,再逐个换成双向、前置单头注意力、前置三头注意力,记录参数量与验证损失。
需要补的验证包括按乐曲而非按帧聚合的统计、不同阈值下的精确率召回曲线、多次随机种子的方差,以及起音容差下的音符级指标。关于来源,本次只收到论文文本与官方原图,没有发现完成 HTTPS 验证的代码、模型或数据资源,因此不能声称作者资源已公开或可一键运行,数据需按原文引用的 MAPS 与 MAESTRO 官方渠道另行获取。
什么时候值得试这个方案
当任务是离线钢琴转谱、输入是单通道波形、输出允许逐帧 88 路概率且能接受双向带来的非因果延迟时,这个方案值得一试。它的优点是特征与音高对齐、模型小、前置注意力先选频再积分的顺序在对照中占优。第一步应复现基线与双向的差距,再验证注意力位置,而不是直接上三头。
还需记住两个易误解点。一是加权损失提高召回但可能增加误报,最好成绩恰恰来自标准损失,说明权重只是手段而非越大越好。二是多数据集增益来自音色与录音多样性,不等于在自家录音上必然提升,上线前要在目标录音条件下重测帧级与音符级指标并调阈值与后处理。
📎 论文与评分元数据
排名:前50% | 文档类型:方法研究 | arXiv 原文
⚖️ 评分明细
评分属于系统判断,不是论文实验结果;八维数值与总分见页首,原始审计记录保留在后端。
评分规则:type-aware-v1
评分模型:muse-spark-1.3-contributor
评分请求协议:openai_responses



