[论文阅读] MIR音乐信息检索2

1. High-resolution Piano Transcription with Pedals by Regressing Onset and Offset Times

1.1. 引言

字节跳动所开源的高精度钢琴转谱系统对应的论文,明明是中国人写的却没有中文版本。
当前使用神经网络做AMT的缺少对于onset与offset的研究,转谱精度受限。其次先前的AMT系统对于未对齐onset和offset的音频很敏感,且对于大规模数据上保持踏板转谱研究有限。
介绍AMT的定义与应用。
介绍 钢琴转谱(piano transcription)的定义与困难所在,还介绍了其他人的工作。
当前方法的不足:用二元编码处理每帧的onset和offset,因此精度被限制为相邻两帧的一跳大小。同时onset和offset的建模方法也有待改进。且目标对于音频和标签(labels)间的未对齐很敏感,如onset在一帧或几帧未对齐时训练集将会完全不同。
提出了基于回归的高精度钢琴转谱系统,能在时域上取得任意精度,通过每帧都被分配一个到最近onset或offset距离的目标(target),二者的准确时间得以保留。

ADSR:attack, decay, sustain and release states

1.2. 逐帧转录系统

  1. 将音频转换为对数梅尔频谱作为输入特征,记为\(X\in \R^{T\times F}\)
  2. 利用神经网络预测每帧包含钢琴音符的可能性\(I_{fr}\)
  3. 将网络输出记为\(P_{fr}=f(X)\)
  4. 还有个模型用于预测onset,输出记为\(P_{on}\),对应target为\(I_{on}\)
  5. \(P_{on}\)用于\(P_{fr}\)的预测,损失函数为二者损失函数之和

1.3. 高精度钢琴转谱系统

将先前的onset训练目标与本文提出的作对比,本文用\(\Delta\)标记帧跳大小(frame hop size),用 \(\Delta_i\)标记帧i的中心到最近的onset的距离,以\(g(\Delta_i)\)作为对应target的编码。再将onset和offset回归target标记为\(G_{on}和G_{off}\),以区分前面的\(I_{on}和I_{off}\),同样将二者预测输出记为\(R_{on}和R_{off}\),以区别\(P_{on}和P_{off}\),两个的值介于0到1之间。
对应回归损失:

钢琴音符的速度与响度间存在关系,于是用整数0-127量化速度,值越大代表音符声音越大,再将值域标准化到0-1之间参与训练,再将输出重新缩放回0-127。分别用\(I_{vel}\)\(P_{vel}\)代表速度的真值与预测值,定义速度损失函数:

整个系统共四个子模块:

图3 预测速度,onset,offset和帧的高精度钢琴转谱系统

图4 声学模型。池化仅应用于频率轴。字母c,s分别代表通道数与采样率

卷积层抽取对数梅尔频谱的高层信息,biGRU层概括长时信息
将速度预测结果接入onset预测是模仿人类对于慢速的音符听得更加认真,把速度回归子模块与onset回归子模块在频率维度上拼合起来作为onset最终输出的输入,类似地将onset与offset回归子模块拼起来作为逐帧(音高)预测的输入。最终损失函数由四部分构成:
\(l_{note} = l_{ft}+l_{on}+l_{off}+l_{vel} \qquad\qquad(9)\)

根据这四个输出,又用一个算法处理成高精度音符事件:<钢琴音符,起始时间,结束时间,速度>

图5 计算音符精确起始或结束时间,ABC点是三个帧分别的预测值,G是计算出的精确值

其中B是局部最大值(大概纵向高度说明onset的预测输出,即存在的可能性),AG与CG关于垂线GI对称。
不失一般性,假设C高于A,将ABC坐标分别设为\((x_A, y_A), (x_B, y_B) 和 (x_C, y_C)\)
那么经过数学推导(作辅助线,证三角全等)可推导得
\(BH = \frac{x_B-X_A}{2} \frac{y_C-y_A}{y_B-y_A} \qquad\qquad(10)\)
而这个BH就作为onset或offset时间(大概是由BH及B点横坐标就能算出G点横坐标)
onset判断:超出onset阈值并且为局部最大
offset判断:对于每个onset,超出offset阈值或者frame阈值(大概是不存在音符)
除此之外该方法不能检测到4帧(40ms)内的连续音符,也没必要

延音踏板转录系统,与钢琴音符转录类似,唯一不同在于输出shape为\(T\times 1\)而非\(T\times 88\)(最常见的7组88键钢琴),指示踏板保持的可能性。将踏板与音符分开训练使得转录效果更好,同时减少了内存使用。在MIDI格式中延音踏板由0-128的整数表示。MIDI值大于64的算作有效(on),低于64为无效(off)。同时简便起见只考虑踏板踩下与否,不考虑半踩的情况。
后续论文给出onset、offset、frame-wise真值、预测输出的符号及相应损失函数定义,然后给出踏板版的判断方法,由于不在研究范围内就不深入了。其中提到踏板总在钢琴琴键按下前踏下,故onset不好预测。

1.4. 实验

数据集是MAESTRO V2.0.0,其中的音频与midi文件都以3ms的时间精度对齐

预处理中将所有立体声(stereo)音频转换为单声道(mono),并且重新采样为16kHz,16kHz的截止频率覆盖了最高音符\(C_8\)的频率,其在钢琴上为4186Hz。
之后将音频切为10s的片段,然后用2048大小的Hann窗的短时傅里叶变换提取频谱,以229个滤波器的梅尔滤波器组及30-4000Hz的截止频率去抽取对数梅尔频谱。采用的帧间hop为10ms。对于10s的音频片段而言,其对数梅尔频谱shape为1001x229,多出的一帧来自于特征提取前对信号两端的半窗填充(padded with half windows)。对数梅尔频谱用TorchLibrosa工具包直接提取。
在一般实验中设置超参数J=5,代表每个onset或offset会影响2xJ=10帧的回归值。

将对数梅尔频谱每个频率区间(frequency bins)用批正则化处理作为输入,再用图3的CRNN模型预测速度等四个输出所有模型结构都相同,每个都由四个卷积块和两个双向GRU层组成。每个卷积块又由两个3x3核的卷积层组成,每次线性卷积都会再接批正则和ReLU以稳定训练并且增强非线性表达能力。这四个块特征图(feature map)数量(即通道数)分别为48, 64, 92和128。每次卷积后还要在频率轴上用因子2的平均池化减小特征图大小。不在时轴池化是为了时域的保持转录精度。
[注] 后面仍然是对模型细节的描述,可看图3图4跟代码,这里有点啰嗦的感觉


batchSize=12, Adam optimizer, learning rate=0.0005
且训练学习率每1万轮迭代都会变为原本的0.9倍,总共训练了20万轮
起始、结束时刻,逐帧预测和踏板阈值都被设为0.3

[注] 之后是与其他模型的比较,贴了两张表两张图

图6 5秒音频片段的真值预测对比

可以看到效果相当好,几乎一样

为了证明系统对于标签错位(misalignment of labels)具有鲁棒性,论文用时长[-A, +A]的均匀分布随机偏移起始与结束时刻的标签,A为50ms。用这些偏移后的标签训练后,F1值没有明显的下降,具有鲁棒性。
[注] 这里或许可以看出alignment就是标签的标注(音符开始、结束时刻)正确

错误分析部分,观察到错误预测(false positive)主要是由于八度错误。其他还有持续时间短于15ms和重复音符的问题,还有一小部分没有合适解释。对于缺失错误(false negative),有时高八度的音会丢失,此外还有少许低音的丢失。也有一些是由于钢琴未调整或录音设备质量较低。

1.5. 结论

提出新模型,取得最佳效果,并借此制作了 GiantMIDI-Piano 数据集。不足在于转谱结果依赖音频质量,并且还需修改才能用于实时应用。将来会用同样方法研究多乐器转谱。

2. Multi-Instrument Automatic Music Transcription With Self-Attention-Based Instance Segmentation

2.1. 引言

又是Li Su的论文,2020年的研究。
提到AMT任务通常分成四个层次:

  1. 对于音高的帧级别的转录,也就是多音高估计(multi-pitch estimation, MPE)
  2. 对于音高、起始时刻、持续时间的音符级别的转录,也就是音符跟踪(note tracking, NT)
  3. 对于音符和流属性的流级别转录,也就是多音高流?(multi-pitch steaming, MPS)
  4. 关于人类可读乐谱的乐谱级转录

这篇文章利用深度学习的多任务学习(MTL),也将音高估计和onset、offset结合起来,此外还加上了乐器类别的识别,同样使用了CRNN。提到多乐器AMT是MPS任务的一种特例,其中每个流代表一种乐器类别。为了区别传统帧级别(frame-level)的MPS任务,本文中将音符级别(note-level)的MPS任务成为音符流(note steaming, NS)

本文的方法受到计算机视觉领域技术的影响,如U-net常被用于音源分离,旋律抽取,MPE和MPS。这些音乐处理任务被看作是2D信号表示上的语义分割任务。类似地,MPS和NS任务也相当于CV中的实例分割(instance segmentation)或是多物体检测。更确切地说,NS的目标是对于每个已知音符识别出每个时频像素的每个音符实例。当音符实例由起始、结束时刻和音高值确定,它就类似多物体检测。当音符是已知起始结束端点的音高轮廓(pitch contour)时又类似实例分割。

2.2. 问题场景

  1. 乐器信息可知:知道是小提琴奏鸣曲就只保留小提琴和钢琴通道,简化了任务
  2. 乐器信息不可知:
    1. 闭集(closed-set)识别,预测类别为训练集的子集
    2. 开集(open-set)识别,预测类别可不存在于训练集,不在本文研究范围内
  3. 不管是单或多乐器都不考虑乐器类别,等价于传统的MPE或NT任务

2.3. 相关工作

多乐器识别(Multi-Instrument reCognition,MIC)任务就是识别帧级别的乐器活动,包括单乐器与多乐器演奏。MedleyDB, Open-MIC, Mixing Secret, IRMAS数据集等等都可用于MIC任务。

2.4. 方法

输入为单通道的音乐信号\(x\),预测一系列音符事件\(\Nu := \{n_i\}_{i=1}^{|\Nu|}\),神经网络模型将预测有限的乐器类别\(S\)。一个音符事件\(n_i\)包含4个属性,\(ni := (p_i, t^{on}_i, t^{off}_i, s_i)\),其中\(p_i \in [21, 108]\)是MIDI的音高值,其他三个分别是起始、结束时刻以及乐器类别。

这里用的数据表达又是CFP(Combined Frequency and Periodicity),[论文11]VOCAL MELODY EXTRACTION USING PATCH-BASED CNN这篇中的方法,同一个作者。这里提到的\(Z_f, Z_q\)大致分别对应[论文11]中的\(Z_0, Z_1\),即频谱与生成倒谱。在本文中作者提到\(Z_f\)揭示基音与泛音的关系,\(Z_q\)揭示基音与次泛音的关系,因此二者都是峰值的地方就代表了正音高激活(有音符存在),如图1所示

图1 从上往下分别是Zf, Zq, ground truth

图2 模型架构

模型包含编码器、译码器和连接二者的自注意力模块(self-attention blocks),每个编码器和译码器之前还有跳跃连接(skip connection),整体形成U-net结构,输出输出大小相同。空洞空间金字塔池化(Atrous Spatial Pyramid Pooling,ASPP),也就是带空洞卷积的空间金字塔结构,将各种不同dilation rate的空洞卷积处理再将结果concat进行1x1卷积,扩大感受野,最后再对结果进行池化。已有旋律提取与AMT任务使用ASPP。然而ASPP没用到,改成了自注意力模块。
为了用自注意力机制,将可特征图(size dxKxN)变为序列(size dxKN),d是特征维度,KN是序列长度。然而长度太长会超出内存,于是使用query blocks代表局部信息,并在query blocks序列上应用自注意力。

图3 自注意力块机制。输入特征图被分割成重叠的块,再将这些块以光栅扫描顺序(好像就是逐行从左到右)喂入自注意力层

经典内存不足就分块放入,这样不仅省空间而且起到了并行计算的效果,因为这个机制将好几批的块一起处理。
模型输出每个通道都是KxN的时频图像,对于每种乐器用两个事件类型通道来表示音符事件在特定时间和音高发生的可能,一个是音符开始(onset)(\(Y^{on}_s\)),另一个是音高持续(pitch activation)(\(Y^{act}_s\),再加一个表示其他乐器,总共\(2|S|+1\)个通道。
而复调音乐信号的标签分布十分不平衡,时频平面上的大多数音高持续和onset标签都是零值(也就是无声),再者,钢琴卷帘上的音符事件仅是二维数组上的一行,起始时间甚至只占一个像素。用像素级二元交叉熵作为损失函数训练的模型会倾向于将所有数据都判断为0,因此论文用了计算机视觉领域的focal loss作为损失函数,有效解决了数据不平衡造成的模型性能问题。
[注] 钢琴卷帘(piano roll),以网格中分布的矩形表示音符,横向表示时间,纵向表示音高。如下图所示。

No, thank you开头部分的钢琴卷帘表示

除此之外,乐器类别的分布也很不平衡,大多数乐器数据都很少,模型将倾向于把乐器都预测成数据多的类别。实际上钢琴独奏转录问题中,钢琴类与其他类也是不平衡的。为此引入标签平滑(label smoothing, LS)平滑标签分布,它会给可能性过大的(over-confident)施加惩罚。

\(Y^{on}_s\)\(Y^{act}_s\)的值介于0-1之间,不能简单地通过设置固定阈值来将输出量化为0或1,因为输出的分布会随着乐器种类而变化。需要四步额外的处理:

  1. 将所有通道的输出都使用z-scoring标准化处理
  2. 设置置信值\(v_s\),超出阈值则代表该片段中存在乐器\(s\)
  3. 每个通道各自再进行z-scoring标准化,过滤掉on跟act中低于阈值的值
  4. \(Y^{on}_s\)局部最大值确定为onset,两个峰值距离不低于50ms。offset由\(n^{on}+\delta\)确定,\(\delta\)是使得\(n^{on}+\delta\)开始往后60ms内保持静默的最小值。

2.5. 实验

尝试了三种模型配置进行实验,并使用多乐器输出训练模型,将不同通道的结果相加来训练乐器信息未知的转录。没有专门为了MPE跟NT训练,二者结果都由NS任务的结果得出。因为该模型在MPE上的有效性已由其他论文证明,并且这样可以更好说明模型的泛用性(没有专门训练但结果还不错)

所用单乐器数据集为MAPS数据集的子集和MAESTRO数据集,多乐器数据集为MusicNet、扩展的SU数据集以及Multi-Modal Music Performance(URMP)数据集

训练部分,给出了具体的参数设置,不细究了。其中提到单帧的onset标签被扩展为带淡出边界的三帧,也就是对于\(n_i\)处的onset事件,\(n\)\(n_i\pm 1\)被标记为1,而\(n_i\pm 2\), \(n_i\pm 3\), \(n_i\pm 4\)被分别标记为1/2, 1/3, 1/4

评估方法部分使用更为严格的方式,帧级别预测要求音高和类别都正确,音符级别要求音高、起始时间和类别都正确才作为正确预测。使用mir_eval库计算TP、FP、F1等评价指标。除此之外还使用了两个额外的指标,F1标准差和乐器准确度...

2.6. 实验结果

很多表格,展示了不同模型在不同数据集上的用不同方法训练的不同指标,略

2.7. 讨论

在验证集上调整F1值时,音符级别转录精度高但召回率低,而帧级别转录则相反。这样的小差别有时很关键,比如若是聆听转录结果的合成音乐则更为在意精度,因为它能避免错音干扰听者,而若是对转录结果进行编辑,则更希望召回率高,因为删除错音比起添加未检测到的音符更容易。再者是低级语义(帧级别)在真实世界的应用上仍有其优势。
仍有过拟合的问题,多标签训练比起单标签过拟合情况较为轻微,但还是有,可能是不同数据集乐器数据分布的差异。
训练数据的质量也是个问题,这项工作中的数据大部分都是半自动方式标注的,人工检查并不现实,因此导致了一些错误评估。今后用A/S模型(analysis/synthesis)自动产生训练数据或是使用弱监督学习应是多乐器AMT的中心问题。
[注] 弱监督学习分三种:不完全监督,不确切监督,不精确监督。而半监督学习是解决不完全监督的一种办法。

2.8. 结论

准确描述了多乐器AMT的问题场景,提出的模型很有效,CV的一些方法很适合多乐器AMT任务,指出了该任务现存的一些难题。

补充:根据相应github的README所说,该成果已经包含于[论文7]提到的omnizart中。

3. Residual Shuffle-Exchange Network for Fast Processing of Long Sequences

3.1. 摘要

注意力机制在序列处理中很常用,但它的复杂度是\(O(n^2)\),而近来的神经混洗交换网络(neural Shuffle-Exchange network)提供了更有效的计算,\(O(n \log n)\)。但它的模型十分复杂,包含来自GRU的复杂门机制。而本论文提出简单轻量的混洗交换网络,比原本的更快更准确。

3.2. 引言

音乐可看作是长序列,且元素间含有依赖关系。常用的注意力机制(如Transformers)可以处理长序列,但时间空间复杂度都是序列长度的平方,不适合低时延任务。这篇论文提出的混洗交换网络基于应用GELUs激活函数(GAUSSIAN ERROR LINEAR UNITS)和LN(Layer Normalization)的残差网络思想。

新提出的网络核心组成——Switch Unit大约在训练时快了4倍,推断(inference)时快了2倍,且能够在单一GPU进行实时音频处理。

3.3. 相关工作

注意力机制复杂度高且不适用长序列,一般将长序列分成短序列再分别应用注意力,或是用稀疏注意力取代原本的密集注意力,即只向预先确定的位置子集应用注意力。Reformer使用局部敏感哈希达到\(O(n \log n)\)的近似,Linformer则通过创建注意力矩阵的低秩分解(low-rank factorization)达到线性复杂度近似。
长序列处理的另一个方案是卷积架构,然而卷积天生就是局部的,一个方法是使用空洞卷积以增加感受野。这种膨胀架构(dilated architectures)在图像分割和音频生成取得了巨大成功。

3.4. 神经混洗交换网络

这些网络由交错的混洗(shuffle)和交换(switch)层组成。混洗层将信号重新排列,交换层由许多交换器(switches)组成,每个交换器交换两个相邻信号或是保持信号不变。神经混洗交换网络调整了Benes网络的结构并用Switch Unit取代每个交换器。
输入序列长度\(n=2^k, k\in\N\),且序列的每个元素都是m维向量,输入序列将被填充(padded)至2的幂次。
模型的第一层是Switch Layer,由n/2个Switch Units(SU)组成。输入序列被切成补充的相邻元素对,每一对都由SU处理。每个SU都是根据一对元素计算2到2函数的神经网络。
第二层是Shuffle Layer,它将输入根据完全混洗排列(perfect shuffle permutation)重排,完全混洗排列就是将每个输入地址映射为循环左移一位的新地址,如101变为011
所有Shuffle Layers都相同,没有可学习的参数。同样值得注意的是,这两种类型的层都没有改变输入的尺寸。
第三层又是一个Switch Layer,就这样两个层交替出现直到每种层总共\(\log(n)-1\)个。

图1 每个绿块都是Switch Unit,接收两个输入元素,将其交换或不变。SU的一列构成Switch Layer,两层间的箭头代表一个Shuffle Layer。该图中交换器被配置为从地址000路由到111

图2 带两个Benes块和八个输入的残差混洗交换网络。所有可学习参数都在Switch Units里面。网络剩余部分都是固定的,用于路由信息。可以增加任意数量的Benes块来增加模型深度

混洗交换网络后接一个反向混洗交换网络,二者唯一差别是在反向的网络里,所有Shuffle Layers都被inverse Shuffle Layers取代。inverse Shuffle Layers输入一样,但位移方向改成了向右,如011变为101。一个正常混洗交换网络跟一个反向的就构成一个\(Bene\check{s}\)块,它可以同时连接任何输入到任何输出,因此神经混洗交换网络具有整个序列尺寸的感受野,并且没有瓶颈。这些特性是dense attention有,而许多sparse attention和空洞卷积结构没有的。

在多个\(Bene\check{s}\)块的最后再接一个Switch Layer。每个\(Bene\check{s}\)块里面,混洗交换网络和反向混洗交换网络
中的Switch Unit在各自网络里共享参数,这样可以确保算法任务上的泛用性。

原始的Switch Unit定义

很复杂,但有一些SU的替代,但这些简化版本又降低了性能

3.5. 残差混洗交换网络

Residual Shuffle-Exchange network (RSE),跟上面提到的神经混洗交换网络架构一样,就是把Switch Unit换成了作者提出的Residual Switch Unit (RSU)。RSU基于残差网络并使用GELU和层标准化,其设计类似于Transformer的前馈块(feed-forward block)。
RSU以两个向量作为输入\([i_1, i_2]\),并产生两个向量作为输出,每个向量大小都为\(m\)\(m\)是特征图(feature maps)的数量。
RSU定义:

\[i = [i_1, i_2] \\ g = GELU(LayerNorm(Zi)) \\ c = W_g + B \\ [o_1, o_2] = \sigma(S)\odot i + h\odot c \\ \]

Z,W是两个参数矩阵,S是向量,B是偏置向量,这些都是可学习参数
h是标量,\(\odot\)是逐元素的向量乘法,\(\sigma\)是sigmoid函数
参数S通过sigmoid调整到0-1之间,用于缩放残差连接。h用于缩放c。

(谈到参数的初始化方法和原因,主要涉及signal amplitude,应该是信号的振幅,及最大值与最小值的差)
除了简化,RSU的设计还省去了原本SE网络里\(Bene\check{s}\)块用于保证稳定收敛的跳跃连接。

像MusicNet这种任务,输入序列的每个元素都是一个数字,而残差混洗交换网络需要大量的特征图来运行,若将输入扩充为许多特征图则很冗余。因此先用几个strided convolutions增加特征图数量并且减少序列长度再输入到网络中。根据附录C,这里指的是输入为\(1\times n\),而网络需要\(k\times n\),二者不匹配的情况,如下图所示。

图11 带有两个预卷积且用于MusicNet任务的架构

这种预卷积缩短了给RSE的输入并且加快了处理速度,同时在MusicNet上得到的精度几乎一样。注意到这种方法会使得输出比输入短,在MusicNet任务上没关系,但如果需要可以在模型的最后加上反卷积(Transposed Convolution) 层将信号上采样回原本的长度。

3.6. 评估

用Tensorflow实现,已经在github开源。
将提出的RSE与原有的SE模型比较,选用长二进制加法、长二进制乘法和排序等算法任务(algorithmic tasks)作为基准(benchmark)。其中用于加法和排序的RSE模型有一个\(Bene\check{s}\)块,而乘法任务用到两个。
训练中,实例化了几个不同序列长度的模型,长度从8到64(2的整数次幂),这些模型共享相同参数并且将每个样本在其匹配的最小实例上训练。序列用0填充到所需长度。
在长度64的乘法任务上,RSE明显优于SE,而加法和排序的表现则类似。使用更长的序列测试长度64模型的泛化性也是RSE好于SE。

lambada任务是从给定上下文预测目标单词,在81%的测试集中,目标单词直接出现在上下文中,于是使用一种策略直接从已有文本中选择目标单词,当然这样的正确率不会超过81%。
实例化长度为256的模型,并在输入两边随机填充0直到满足长度。
这个模型在这项任务中比SE好,且用的参数少,比起最好的模型虽然精准度不够,但是用的参数数量比它少得多。

music transcription的数据集MusicNet有11种乐器音频与之对应的MIDI,任务是从给定波形分辨出每个时间步演奏的音符,是一个多标签分类任务。同样是用窗口分割,并预测每个窗里的所有音符。
同样适用两个strided卷积层做预处理加快训练速度,并使用RSE输出序列中间的元素,将其线性转换为128个值,每个对应一个音高,并使用sigmoid交叉熵损失函数做多标签分类。
评估使用average precision score (APS),它是precision-recall曲线下方的面积。
训练发现使用越大的窗口精准度越高。
在这项任务中使用的前置卷积层,层数越多训练和评估越快。其他信息被放在了附录C、D、E

使用乘法任务来进行消融研究(ablation study)
[注] 消融研究:去除模型的一部分来研究这部分对性能的影响

图8 消融实验。这张图展示了长度128的乘法任务上的测试误差跟训练步骤的关系

可以看到残差连接跟标准化较为重要。
此外还研究了RSU隐层大小的影响,隐层大小取\(2m\),其中\(m\)是模型的特征图数,这样能在性能和参数数量取得较好的平衡。实验结果放于附录F。

3.7. 结论

提出的残差混洗交换网络能处理的序列最长可达两百万,且使用残差连接代替门连接使得训练速度快了许多,此外也展示了将模型与strided卷积结合起来增加速度和能处理的序列长度。
也在从波形直接识别音符上取得了当前最佳的精度,这项任务中处理长序列十分关键。尤其是这个模型用到的参数数量比先前的其他模型明显更少。
这项实验证明了残差混洗交换网络在长序列处理中可以作为一个有效的构建块发挥作用。

[注] 鸣谢与参考略
[注] 这篇论文跟之前看的不同,没有给参考文献编号,也不在文段中使用中括号跟数字的组合标识引用,而是使用看小括号与作者、年份的组合标识。如

The music transcription dataset MusicNet (Thickstun, Har-chaoui, and Kakade 2017) consists of 330 classical mu-sic recordings paired with the MIDI transcriptions of theirnotes.

3.8. 附录D MusicNet预测可视化

窗口大小选8192,每个窗口相对于前一个偏移128个元素,模型预测所有窗口中点(the midpoint of the window)的音符。
[注] 这里不是很清楚,需要结合代码判断,可能是将音频分成许多段预测,每段大小为8192,各段之间距离128(即有大量重叠),每次就利用整个8192的长下文预测中间那128个。
根据图12,这里的音高预测基本正确,但是音符的开始与结束较为模糊,这可能是没有将起始、结束时间一起纳入训练导致的。附录E提出了缓解方法,在损失函数中加了一项。

4. A holistic approach to polyphonic music transcription with neural networks

4.1. 摘要

提出了一个端到端方式,直接从复调音乐中提取乐谱的神经网络框架。大多数AMT方法都是以钢琴卷帘表达为中介,再进一步吸收速度估计、节拍跟踪、调估计或旋律量化。使用带CTC损失函数的CRNN,不需要音频帧跟乐谱旋律信息的注解对齐(annotated alignments)。使用名人的弦乐四重奏、赞美诗作为训练输入,而且它们都用不同的速度和表现手法(expressive performances)合成。输出则是基于**kern format的四声部乐谱(four-voice music scores),一种文本表达方式。

4.2. 引言

音乐由于旋律和声等的存在,不同声音事件高度相关,因此为了生成乐谱,多个复杂子任务必须考虑:多音高估计、音符起止检测、音源分离以及其他一些音乐上下文提取任务,如调性和拍数估计(etering and tonality estimation)。
大多数处理AMT的方法都只解决整个问题的一个中间目标,如

  1. Frame-level,帧级别转录(即多音高估计),就是要检测输入信号每个时间步上出现的基频。
  2. Note-level,音符级别转录则更进一步,估计以音高、时钟持续时间(起始和结束时间),产生音乐的钢琴卷帘表示
  3. Stream-level,流级别转录扩展了音符级别的表示,基于音色将每个音符和发出该音符的乐器联系起来
  4. Notation-level,乐谱级别的转录就是AMT的最终目标,以足够的信息将原始录音转换为乐谱

这项工作中乐谱级别转录被表示为Audio-to-Score(A2S)任务。即便是完美转录,任一个A2S系统的输出也无法忠实地再现最初演奏的音乐。要考虑到音频信号通常是富有表现力的演奏,而非简单机械式的音符翻译。一个乐谱可以被音乐家用不同方式演奏,类似地,一个音乐片段也有不同的标准乐谱表示(如附点半音与四分音符后接二分音符一样)乐谱只能被看作辅助音乐家的指南,相关但绝不会完全控制整个演奏。这使得A2S成为一种没有特定解法、有些模糊不清(ill-defined)的问题。

作者提出了端到端的方法,但当前对其表现的分析需要关于评估标准的更深理解(deeper reasoning),(没有显而易见的指标),但提供了一些结果,说明了模型的良好表现,并对这项研究持乐观态度。

4.2.1. 相关工作

近来的AMT方法使用深度神经网络做多音高检测任务,短时傅里叶变换、对数频率STFT或梅尔频谱都经常作为CNN的输入,一次提取钢琴卷帘表示作为输出。其他作品致力于从未量化的MIDI表示中产生乐谱。其中有一个直接提取乐谱的方法,先做带音符跟踪的多音高检测来得到钢琴卷帘表达,再通过节奏量化(rhythm quantization)方法进一步转换为量化MIDI文件。
乐谱一步转换有个好处,错误的检测不会转播到下一个处理步骤。
有两个端到端的方法,但它们有些不足(如只能处理单音音频或是要求输入长度固定)。一个使用了CRNN,但不能处理大多数可能的乐谱,另一个将AMT视作Automatic Speech Recognition (ASR)问题,使用单音音频作输入,符号序列作输出,并采纳了一种受DeepSpeech2启发的架构,它不需任何对齐(alignment)就能学习将音频帧映射为字符序列。
用未对齐的数据训练,如无需输入音频帧与音乐符号对齐,具有明显优势,因为可以搜集更多的数据,而不必进行无聊的手动标注任务,那需要标出在相应输入音频帧中输出符号的位置。

4.3. 数据

4.3.1. 输入表达

原始音频波形的频谱信息,基于对数间隔的桶(log-spaced bins)和对数尺度大小(log-scaled magnitude)的STFT。其中频率桶对齐到平均律音阶,以440Hz作为A4音高参考值。输入音频采样率为22050Hz,STFT用尺寸为92.88ms(2048个样本)、23.22ms(512个样本)一跳的Hamming窗计算。只考虑C2-C7之间的音高,每个八度抽取48个桶。

4.3.2. 输出表达

模型输出是一个单一符号序列,能用于为渲染多声部西方音乐乐谱。
这些符号用相应的持续时间、小节线、音符间的联系和延音号表达音符和休止符。
在这项A2S任务中,音符不等于音高,例如音高349.23Hz根据调号可以表示为 \(F4, E\sharp 4 或 G\flat\flat 4\)
输出中并不包含谱号,因为它们只对乐谱的可视化有帮助,本身不包含任何可以从音频中提取的信息
简单起见,也不包含拍号,因为对于我们训练集的乐谱类型,可以从预测的小节线来推断
同样,调号也不考虑,因为它们可以从预测的音符中推断出来
再者,用到的大多数样本都是长约普中的片段,并不包含足够的信息去预测正确的调号,因此会误导训练过程。
像连音线、倚音、装饰音和奏法记号都超出这项研究的范围

4.3.3. 数据预处理

大部分公开的乐谱都是印刷格式,无法自动获取所需的符号表示,除非使用Optical Music Recognition系统。但这还不足以满足精度要求,因此转而寻找现存的、文本格式的乐谱。多方分析后使用了humdrum toolkit,因为其表示复调音乐的多功能。
humdrum文件格式是通用的人类可读的2D音乐信息表达。文件各栏由tab分隔,代表音乐信息源,各行代表音乐事件随时间的演变。humdrum语法定义了能包含更高级别音乐符号体系的骨架。而这里用的高级体系为**kern format,它可以编码西方乐谱的语义,而不是印刷品的视觉效果。

图2 乐谱例子,左边是**kern格式,右边是渲染的西方乐谱

在这种格式中,栏被称为spine,且和乐器关联,就像西方乐谱中的五角星那样(just like a pentagram in western sheet music)。spine可以包含单一声音事件或者和弦,一个spine也可以分割成两个spine,只要同一乐器发出了两个独立声音,当额外的声音不再需要新spine也可以合并回原始的spine。
用humdrum-data仓库中可获得的**kern文件创建了两个数据库:合唱和四重奏。前者将每首合唱作为一个训练样本,使用具有表现力的MIDI文件合成的高质量管风琴音字型音频(pipe organ soundfont)。不合成的话就得手动去除重复的部分来保证样本长度不会太长。随机将后者乐谱分成3-6个小节的片段,并借由hum2mid工具合成相应的MIDI文件,当原始**kern文件中存在时,转换使用动态spines和奏法记号。由于无法正确合成,就去除了倚音和装饰音。也去除了分开的spines和所有和弦的高音(upper notes of all chords)来确保同一时间出现的声音不超过4个。两个附点、升号和降号的样本都被舍弃。
仅在训练集中,允许片段重叠,依次作为数据增强的一种方法。表1给出了两个数据集的对比,图1给出了数据处理流程。
主要问题是处理kern文件中同时出现的多个错误,如无效连音线、错误的音符和休止符标注时间以及缺失的节拍器记号。错误不会阻止乐谱的音乐分析,但会成为噪声标签妨碍训练。因此需要手动纠正,根据已有的速度标注合成音频,并添加缩放因子使得训练样本的速度会变化。
预处理后的
kern乐谱再用特定符号体系编码,来减少字符数量同时简化训练过程。后面还讲了大概的编码方式,以及特殊符号的处理。

4.4. 方法

A2S任务可以表述为给定音频文件\(x\in \chi\),获取最可能的乐谱符号序列\(\hat{s}\):
\(\hat{s}=argmax\quad P(s|x), s\in \Sigma^* \qquad\qquad\qquad (1)\)

使用CRNN解决A2S问题,卷积块用于抽取相关特征,循环层这些特征解释为音乐符号序列。最后一个卷积层的激活可被看作代表输入音频文件\(x\)的特征向量。记\(W\)为输入序列\(x\)的宽度,则最终特征长度满足\(L=\gamma W, \gamma <=1\)是卷积块的特定配置隐式定义的。
之后卷积块最后一层输出喂给循环层第一层,而循环层最后一层则代表每帧后验概率的恰当估计:
\(P(\sigma |x,j),\quad 1≤l≤L,\sigma \in \Sigma \qquad\qquad\qquad (2)\)

4.4.1. 训练

CNN可通过反向传播算法使用梯度下降训练,RNN也可用Back Propagation Through Time方法类似地训练,因此CRNN的两个块可以使用帧级别标注的音频文件一起训练。
训练方式是端到端,只提供相应乐谱符号的目标翻译,不需任何关于分割成帧的显式信息。使用CTC损失函数,是一种期望最大化的方式,类似HMM训练的反向传播算法,将loss分配到所有帧来求公式1的最大值

4.4.2. 解码

为了解决公式1,对于每个循环块的输入特征\(l\)计算最可能的符号,也称贪婪解码:
\(\hat{\sigma_l}=\argmax P(\sigma|x, l), \sigma \in \Sigma, 1<=l<=L \qquad\qquad\qquad (3)\)
伪最优的音乐符号序列就可获得:\(\hat{s}\approx D(\hat{\sigma}), \hat{\sigma}=\hat{\sigma_1}...\hat{\sigma_L}\),而\(D:\Sigma^* \rightarrow \Sigma^*\)是一个函数,先相同符号(equal symbol)合并所有连续帧再删掉所有“空”符号。

4.4.3. 架构

图3 CRNN的高层架构

如图3所示,一开始两个卷积层接收2.1节描述的频谱,再在频率轴上使用16个步长为2的3x3滤波器,通过filter striding方式减少输入维度而不需池化层。
对于四重奏数据集,来自卷积块的输出帧被分成两半(一个绿点对两个蓝点),有效加倍了喂入下一个循环块的帧数量。这是应用CTC损失函数的前提条件,即要求输入帧的数量必须大于或等于输出符号的数量。考虑到我们基于序列的四重奏数据集复调乐谱表示中每秒有大量符号,这种加倍技术比起增加输入频谱密度,其就按代价更小。
接着的两个循环层基于BiLSTM,每个LSTM有1024个隐层单元。最后的全连接层将每帧输出预测转换为输出表示词汇表的大小(converts the output per-frame predictions to the size of the output representation vocabulary)
为了减少过拟合,在输入输出层之外的其它层之间都使用了批标准化层,且所有的卷积层和最后一个循环层之后都是用了dropout层,对于四重奏和合唱两个数据集的dropout率分别为0.1和0.2,这是因为合唱数据集比较小,过拟合可能更大。

4.5. 实验

没啥现成的乐谱级转录评估标准,有个音符级的,但是这个项目不考虑音符的起始和结束,无法使用,总之摆烂了,以后再说。
但为了验证训练精度,采用了ASR任务重的标准:Word Error Rate (WER) and Character Error Rate (CER),定义为将预测序列转换为真值序列所需的操作(插入、删除和置换)数量。在A2S任务中,将word定义为任何一组代表音符(包括连音线)、休止符和小节线的character集合,而tab和new line充当word分隔符,只用于CER计算。

4.5.1. 训练

用小批量梯度下降法(mini-batch SGD)训练了100轮,其中Nesterov动量为0.9。学习率安排由两个周期构成,每个周期有50轮,从0.0003开始,每轮退火1.1(annealing by 1.1 at every epoch)。每轮完成后都在验证集上计算WER和CER,WER最低的模型作为最好模型用于测试。合唱数据集批大小为4,四重奏样本小,是完整演奏的节选,批大小设置为16。图4展示训练中loss、WER和CER的变化,这里略。

4.5.2. 结果

图5 上一行是原始片段,下一行是预测的乐谱,二者差别用红色高亮表示

分析所有测试预测,有些预测序列不符合kern格式,但作者认为这种格式错误可以通过增加训练样本或者施加语法限制解决。图5可看出,大多数错误来自于错误判断音符持续时间和小节线。在声音中交换音符(Exchanging notes between voices)则是另一个常见错误,特别是两个音高太接近甚至旋律线交叉时。
模型难以预测连音线和三连音,这需要更进一步的分析来决定它是否与小节线错误、基于
kern格式的输出表达还是训练集样本的缺乏有关(比如这两者在这个数据集中出现频率很低)。
[注] 有些是音符时值判断错误,如果能整好小节线,获取拍子信息就能改正这些错误

4.6. 结论

这项任务(A2S)直接输出乐谱(如MusicXML),而其他大多数作者则认为AMT输出应是MIDI,之后再由电脑进一步处理。
提出的这个方法对比其他的有以下好处:

  1. 无需帧级别的真值(ground truth)对齐
  2. 端到端方法避免了错误从一个阶段传递到下一个
  3. 模型输出基于**kern格式,可被直接转换为有效的乐谱

[注] 但实际上MIDI也可以用第三方库直接转成乐谱吧
用于评估的这种简化场景不包含真实音频和一些乐谱符号,但这结果开辟了乐谱级AMT的新道路。
该方法的主要限制是输入序列的最大长度受制于内存,阻碍了整首歌曲的端到端转换,只能最大两分钟为片段进行转录。因此计划在将来探索其他架构,如Tranformer XL,其他将来的工作包括为A2S定义评估标准,从真实音频(因为这里用的音频是由midi合成来的,没有噪声,更简单吧)中建立数据集来验证该方法的真实效果。

[注] 直接用上一篇论文的残差混洗交换网络应该更好,技术发展得真快啊

4.7. 鸣谢、参考P

5. POP909: A POP-SONG DATASET FOR MUSIC ARRANGEMENT GENERATION

5.1. 摘要

音乐编排生成(Music arrangement generation)是自动音乐生成的子任务,虽然有些模型,但缺少评估数据。POP909包含专业音乐家创作的909首流行歌曲的多种钢琴编曲。数据集主体包含MIDI格式的人声旋律、主乐器旋律和每首歌的钢琴伴奏,都对齐到了原始音频文件。并且提供了速度、拍子、调和和弦的标注,其中速度曲线人工标注,其他则由MIR算法完成。最终在这个数据集上用标准深度音乐生成算法进行了几个baseline实验。

5.2. 引言

音乐编排(Music arrangement)是对一个作品的重构和再概念化,可以指多种有条件的音乐生成任务,包括在功能谱(带和弦进行的主旋律)上的伴奏生成、在原始音频上的转录和重新编排以及对完整乐谱的精简(reduction)以便作品能用单一或少量乐器演奏。
[注] 功能谱,即lead sheet,是爵士乐中最基本,也是现代音乐中最常用的记谱法之一。功能谱所标记的内容包括一首作品或歌曲最重要的组成部分:旋律(Melody);节奏(Rhythm);和声(Harmony);歌词(Lyrics)以及一切其他必要标记(调号、拍号等)。
参考:学习爵士乐 | 关于功能谱 (Lead Sheet) 和扒谱 (Transcription)

图1 三种音乐创作形式中的钢琴编曲的作用,POP909覆盖了1和2两种任务

如图1所示,编曲在这三者间起到桥梁作用。 期望的编曲数据集应该具备三个特征:
  1. 编曲应是风格一致的重新编排,而不是原始编曲的任意选择
  2. 编曲应与一种原始音乐形式(音频、功能谱或完整乐谱)配对,具有准确的时序对齐,对学习类算法起到监督作用
  3. 应提供额外的标签(如和弦、强排),它们通常被用于改进生成过程的可控性

表1 现存数据集的概述

而现存的高质量数据集较不注重编曲,缺少准确的对齐和标注。作者提出的POP909都以MIDI格式提供,对起到主旋律和原始音频...(摘要里的那些介绍) 补充说明图1的两个任务: 1. 钢琴伴奏生成取决于成对的旋律和辅助标注。这项任务涉及学习旋律和伴奏间的内在联系,包括accompaniment figure的选择,相应部分和第二旋律的创作 2. 从音频重新编排(re-orchestration),如基于完整管弦乐音频的钢琴伴奏生成

该数据集还能用于无条件的符号音乐生成,有表现力的演奏渲染(expressive performance rendering)等等

5.3. 相关工作

5.3.1. 音乐生成的模式

音乐数据本身就是多模态(modal)的,而大多数生成模型只聚焦于一种模式(modality)。详细来说,音乐生成可以指

  1. 乐谱生成,处理非常抽象的符号表达
  2. 表演渲染(performance rendering),将音乐视作控制序列,通常涉及时间和力度的细微差异
  3. 音频合成,将音乐视作波形或频谱图

5.3.2. 现存数据集

表1有所总结。
Lakh MIDI是最流行的符号格式数据集之一,有多种类别共17万首歌,大多数都是多音轨的且对齐了原始音频。但没有标记主旋律音轨或钢琴伴奏音轨,不能直接用于钢琴编曲(piano arrangement)。
Maestro和E-piano有时序对齐的古典钢琴演奏,提供MIDI和音频格式,然而对于古典作品来说,旋律和伴奏之间的界限通常是模糊的,因此不适合编曲任务1,同时MIDI文件是转录而来,而非音频的再调和?(re-harmonization),因此也不适合编曲任务2。
Nottingham Database是高质量的英国及爱尔兰的民间歌曲,包含MIDI文件和ABC记谱法表示。缺点之一是只包含单声道旋律,没有多声道结构(texture)。
RWC-POP, CrestMuse和JSB-Chorale含有充分标注的复调音乐作品,但对于大多数深度生成模型来说训练数据太少。

5.3.3. 适合钢琴编曲的数据集的要求

  1. 风格统一的钢琴音轨,音轨可以是原始音频的重新编排或是主旋律的伴奏
  2. 主旋律或音频,分别是编曲任务1和2的必要信息
  3. 充分的标注,包括调、拍和和弦标签。这些标注不仅为更可控的音乐生成提供结构性信息,也提供了乐谱和充满表现力演奏的灵活转换
  4. 时序对齐,在钢琴伴奏轨、主旋律或音频以及标注之间
  5. 数据量大,深度学习模型通常需要更多的样本(总时长要50小时)

5.4. 数据集描述

POP909由909首流行歌曲的钢琴编曲组成,时序对齐了相应音频并且保持了原始的风格和结构(texture),额外标注包括拍、和弦和调。

5.4.1. 数据收集过程

雇佣专业音乐家创造钢琴编曲,为了保持编曲的高质量,将音乐家分成了两个团队:改编团队和审核团队,最终集合经历了两个团队之间的的迭代,每首歌每一轮迭代都经历三步:

  1. 改编,改编团队从头改编,或修正之前的版本
  2. 审查,审核团队决定当前版本是否合格,并给出改进意见
  3. 讨论,两个团队的音乐家讨论并改进改编标准的细节

从1000首里挑选了909首质量好的,同时还给出每首歌在迭代过程中不合格的版本。

5.4.2. 数据内容与格式

总时长大约60小时,由462个艺术家创作,歌曲发布年份跨度约60年(1950-2010),每首钢琴改编都以MIDI格式存储,带有三个音轨。如图2所示,不同音轨以不同颜色标明。

图2 钢琴卷帘视图下MIDI文件的例子,红色为MELODY,黄色为BRIDGE,绿色为PIANO

  • MELODY: 主(人声)旋律转录
  • BRIDGE: 第二旋律或是主乐器的改编
  • PIANO: 伴奏主体的改编,包括分解和弦、琶音和许多其他结构?(texture)

在此BRIDGE和PIANO轨形成了原歌曲的钢琴伴奏改编,每个MIDI都通过手动标注的速度曲线对齐到原始音频,且每个音符事件都基于原音频包含丰富的动态(如详细的速度控制)。
每首歌的拍、和弦以及调标注通过五个独立文本文件给出,拍以及和弦的标注都有MIDI和音频版本(大概指根据MIDI和音频分别提取了两个版本),而调变化标注仅由音频提取。

5.4.3. 数据文件夹结构

图3表示了文件夹结构,表2展示了歌曲003标注文件的部分内容(略,需要再直接看原论文吧)

图3 POP909的文件夹结构,蓝色的是文件夹,橙色的是文件

5.5. 标注方法

讨论如何标注拍、和弦以及调信息。

5.5.1. 拍和强拍估计

根据MIDI的两个特征从MIDI文件抽取拍信息:

  1. 人工标注的速度曲线
  2. 改编的伴奏图,其展示了拍和强拍的重要信号

先估计初始拍的位置,再用速度曲线推断后续的拍位置。其次,通过计算抽取的拍特征(MIDI起始时刻和速度)的自相关,进而估计一小节中拍的数量,除了一些罕见的相位(phase)变化,假定一首歌的拍号保持不变。最终搜索所有可能的相位位移(phase shifts)并且找出最优的拍轨(beat track)。
从音频抽取后又用另一个算法从MIDI中抽取,并作比较。
对于拍位置估计,当最大误差容忍为100ms时两个算法有超过90%的一致性,而对于强拍估计则为80%。

5.5.2. 和弦标签提取

因为流行音乐中和弦的改变最可能出现在拍的位置,通过将和弦边界对齐到拍来得到最终和弦标签。
对于MIDI的和弦识别,基于一个原有的算法做出两个小改动,首先在拍级别运行和弦分割算法,第二,修改和弦模板来纳入更多流行歌曲使用的和弦特性...(略,不太明白,也不是很需要)
注意到改编与原有的音频有不同的和弦进行,如...(同上)。总之,两种标注都合理且不一定一致,为了比较提取准确度,比较二者的根音匹配率。POP909里匹配度超过75%的歌曲超过800首,但还有一些是低于40%的,这是由于:

  1. 一些音频录音有些跑调
  2. 音频的一些片段又复杂的声效,这种情况下团队决定重新安排和弦进行。

5.5.3. 调号提取

也提供来自音频的调号标注。同样借鉴了现成的算法,原始算法根据平均的逐帧特征对整首歌进行调分类,修改后的算法允许使用中值滤波对逐帧标签进行后处理,允许调在歌曲中间改变。

5.6. 实验

使用这个数据集进行两个baseline实验:一个是复调旋律生成(没有旋律条件?, without melody condition),二是基于旋律的?(condition on melody)钢琴改编生成。使用Transformer架构,因为它在时间序列数据上捕获长期依赖具有优势。

5.6.1. 复调音乐生成

使用相对位置编码的tranformer编码器建模复调音乐的分布,采用类MIDI的基于事件的表示来编码复调音乐,该表示根据已有的方法修改而来。每个音乐作品都表示为一系列事件,包括音符起始、结束、速度改变与时间移位(time shifts)。进一步以四分之一拍为解析度量化时间移位符号。总共使用16个时移(time-shift)事件,从四分之一拍到4拍,更长的音符或休止符可以用一个含多个时移符号的序列表示。表3展示了数据表示的细节。

表3 类MIDI事件序列表示的符号化

[注] 用不重复的整数代表各个事件

将数据集分成3个子集:90%用于训练,5%用于验证,最后5%用于测试。
设置最大序列长度L=2048...(以及一些参数)

5.6.2. 钢琴改编生成

基于旋律的钢琴伴奏生成,在数据处理步骤,先将MELODY轨跟BRIDGE轨合并成主旋律并将PIANO轨看作钢琴伴奏。
使用了上一小节相同的模型,建模主旋律和钢琴伴奏的联合分布,在推断(inference)过程中,我们迫使生成的旋律与给定的旋律条件相匹配,生成给定旋律下最可能的伴奏。

5.6.3. 实验结果

图4展示了几个模型生成的例子

图4(a) 两个例子的无条件复调音乐生成以及钢琴编曲生成(蓝色是旋律,橙色是伴奏)之例子a

上面的是复调音乐生成,下面是伴奏生成。以红线为界,左边是作为上下文提前给定的500个MIDI事件符号,右边是生成的输出。观察到生成的部分捕捉到了旋律和伴奏之间基本的和弦关系,并且包含一致的节奏模式。虽然质量仍然离当前最先进的算法所生成的很远,但可作为阐明数据集使用的baseline。

5.7. 结论

POP909是专用于音乐编曲的数据集,以MIDI格式包含了专业钢琴编曲的多种版本,并且带有准确的速度曲线。也有...标注(前面提过),为保证质量,数据集是通过...而收集。除了编曲该数据集也能用于结构音乐生成和跨模态(cross-modal)音乐生成。

5.8. 引用

后话

内容似乎有点多,一部分拆成了第三篇笔记

posted @ 2022-03-03 15:24  NoNoe  阅读(683)  评论(0编辑  收藏  举报