一种实现符号钢琴音乐声音和谱表分离的GNN新方法

译文 精选
人工智能
本文介绍了一种基于图形的方法,用于符号钢琴音乐中的同音分离和谱线预测。新方法比现有的深度学习或基于启发式的系统表现更好。最后,还提供了一个后处理步骤,可以从模型中删除可能导致分数不正确的问题预测。

译者 | 朱先忠

审校 | 重楼

本文涵盖了我最近在ISMIR 2024上发表的论文《聚类和分离:一种用于乐谱雕刻的声音和谱表预测的GNN方法》的主要内容。

简介

以MIDI等格式编码的音乐,即使包含量化音符、拍号或小节信息,通常也缺少可视化的重要元素,例如语音和五线谱信息。这种限制也适用于音乐生成、转录或编曲系统的输出。因此,这种音乐无法轻易转换成人类音乐家可以解读和演奏的可读乐谱。

值得注意的是,语音和五线谱分离只是乐谱雕刻系统可能解决的众多方面中的两个——其他方面包括音高拼写、节奏分组和连音创建等。

在音乐术语中,“声部(voice)”通常是指一系列不重叠的音符,通常称为单声道声音。然而,在处理复调乐器时,这个定义并不充分。例如,声部还可以包括和弦,和弦是同时演奏的音符组,被视为一个单元。在这种情况下,我们将这种能够包含和弦的声音称为谐音。

问题

将量化的符号音乐作品(例如MIDI文件)中的音符分离成多个声部和五线谱是一项重要且不简单的任务。它是乐谱雕刻(或乐谱排版)这一更大任务的基本组成部分,旨在为人类表演者制作可读的乐谱。

乐谱是音乐家的重要工具,因为它能够以紧凑的图形形式传达音乐信息。与其他可能更容易为机器定义和处理的音乐表示形式(例如MIDI文件)相比,乐谱的特点是训练有素的音乐家能够高效地阅读它。

给定一个量化的MIDI,有很多方法可以将其转换为可读格式,其中主要包括将音符分离成声部和五线谱。

请参见以下两种可能性。它们展示了雕刻系统通常如何工作。

最大的问题是我们如何使自动转录模型更好

动机

为了开发一种更有效的系统来将音符分离为声部和五线谱,特别是对于复杂的钢琴音乐,我们需要从不同的角度重新思考这个问题。我们的目标是从量化的MIDI开始提高转录音乐的可读性,这对于制作出好的乐谱和让音乐家更好地演奏非常重要。

为了获得良好的乐谱可读性,两个元素可能是最重要的:

  • 五线谱的分离,将音符组织在顶部和底部五线谱之间;
  • 以及声部的分离,在这张图中用不同颜色的线条突出显示。

钢琴乐谱中的声音流

如前所述,在钢琴乐谱中,声音不是严格意义上的单音,而是谐音。这意味着,一个声音可以包含一个或多个同时演奏的音符。从现在开始,我们称之为和弦。你可以在上图底部的标尺中看到一些以紫色突出显示的和弦示例。

从机器学习的角度来看,我们有两个任务需要解决:

  • 第一个是五线谱分离,这很简单,我们只需要为每个音符预测一个二进制标签,特别是钢琴乐谱的顶部或底部五线谱。
  • 语音分离任务可能看起来很相似,毕竟,如果我们可以使用多类分类器预测每个语音的语音数量,问题就解决了!

但是,直接预测语音标签是有问题的。我们需要确定系统可以接受的最大语音数量,但这会在系统灵活性和数据中的类别不平衡之间产生权衡。

例如,如果我们将最大声音数设置为8,以表示每个五线谱中有4个声音,就像在音乐符号软件中通常做的那样,那么我们可以预期在我们的数据集中标签8和4的出现次数会非常少。

带绝对标签的语音分离

特别查看此处的乐谱摘录,语音3、4和8完全缺失。高度不平衡的数据会降低多标签分类器的性能,如果我们设置较少的语音数量,我们将失去系统灵活性。

方法论

解决这些问题的办法是能够将系统在某些声音上学到的知识翻译成其他声音。为此,我们放弃了多类分类器的想法,并将语音预测构建为链接预测问题。如果两个音符在同一声音中是连续的,我们想将它们联系起来。这样做的好处是将一个复杂的问题分解为一组非常简单的问题。对于每对音符,我们再次预测一个二进制标签,告诉这两个音符是否链接。这种方法也适用于和弦,正如你在这张图片的低音中所看到的那样。

这个过程将创建一个我们称之为输出图的图。为了找到声音,我们可以简单地计算输出图的连通分量!

重申一下,我们将语音和谱表分离问题表述为两个二元预测任务。

  • 对于谱表分离,我们预测每个音符的谱表编号;
  • 而对于分离语音,我们预测每对音符之间的链接。
  • 虽然不是绝对必要的,但我们发现添加一项额外任务对系统的性能很有用:
  • 和弦预测,与语音类似,如果每对音符属于同一和弦,我们会将它们链接起来。

让我们回顾一下到目前为止我们的系统是什么样子的:我们有三个二元分类器,一个输入单个音符,两个输入成对的音符。我们现在需要的是好的输入特征,这样我们的分类器就可以在预测中使用上下文信息。使用深度学习词汇表,我们需要一个好的音符编码器!

我们选择使用图神经网络(GNN)作为音符编码器,因为它通常在符号音乐处理方面表现出色。因此,我们需要从音乐输入中创建一个图。

为此,我们确定性地从量化MIDI构建一个新的图,我们称之为输入图。

使用GraphMuse等工具可以轻松创建这些输入图

现在,把所有内容放在一起,我们的模型看起来像这样:

  • 它从一些量化的MIDI开始,这些MIDI被预处理为一个图,以创建输入图。
  • 输入图通过图神经网络(GNN)为每个音符创建中间潜在表示。我们对每个音符进行编码,因此我们称之为GNN编码器。
  •  然后,我们将其输入到一个浅层MLP分类器中,用于我们的三个任务,即语音、谱表和和弦预测。我们也可以将这部分称为解码器。
  • 预测后,我们得到一个输出图。
  • 到目前为止,这种方法可以看作是一种图对图的方法,我们从MIDI构建的输入图开始,预测包含语音和和弦链接以及谱表标签的输出图。
  • 在最后一步,我们的输出图经过后处理程序,以创建一个美观易读的乐谱。

后处理的目标是删除可能导致无效输出的配置,例如将语音拆分为两个语音。为了缓解这些问题:

  • 我们根据和弦预测头对属于同一和弦的音符进行聚类。
  • 我们通过应用线性分配解决方案来确保每个节点最多有一个传入和传出边。
  • 最后,将信息传播回原始节点。

我们系统的后处理程序

我们系统的一个突出特点是,它在音乐分析和乐谱雕刻方面能够超越其他现有系统。与依赖音乐启发式的传统方法(有时可能不可靠)不同,我们的系统通过保持简单但稳健的方法来避免这些问题。此外,由于内存和计算要求低,我们的系统能够计算出整个片段的全局解,而无需进行分割。此外,它能够处理无限数量的声音,使其成为复杂音乐作品中更灵活、更强大的工具。这些优点突出了该系统的稳健设计及其以更高的精度和效率应对音乐处理挑战的能力。

数据集

为了训练和评估我们的系统,我们使用了两个数据集。J-pop数据集包含811首流行钢琴乐谱,DCML浪漫语料库包含393首浪漫音乐钢琴乐谱。相比之下,DCML语料库要复杂得多,因为它包含的乐谱存在许多困难,如大量的声音、声音交叉和五线谱交叉。使用复杂和简单数据的组合,我们可以训练一个对不同类型的输入保持鲁棒性和灵活性的系统。

可视化预测

为了配合我们的系统,我们还开发了一个Web界面,可以可视化和探索输入和输出图形,调试复杂的案例,或者只是更好地理解图形创建过程。请查看链接https://github.com/fosfrancesco/musgviz/。

我们的网络界面,MusGViz!

为了对我们的模型如何工作以及预测如何变化进行公平的比较和更深入的理解,我们仔细研究了一些。

我们将基本事实边缘(链接)与我们预测的边缘进行比较,以进行和弦和语音预测。请注意,在你正在查看的示例中,在我们的可视化工具的帮助下,输出图直接绘制在乐谱的顶部。

前两个小节做得很好,但我们可以在第三个小节看到我们系统的一些局限性。在接近音高范围内但声音排列不同的同步音符可能会有问题。

我们的模型预测了一个包含所有同步切分四分之一音符的单个和弦(而不是跨和弦),并且还预测了第一个D#4音符的和弦。对为什么会发生这种情况进行更深入的研究并非易事,因为神经网络不能直接解释。

开放式挑战

尽管我们的系统具有诸多优势,但未来发展仍面临一些挑战。目前,此版本未考虑装饰音,并且必须在输入中明确复制重叠音符,这可能会很麻烦。此外,虽然我们已经开发了用于可视化结果的初始MEI导出功能,但这仍然需要进一步更新才能完全支持符号乐谱中发现的各种例外和复杂性。解决这些问题将是增强系统多功能性并使其更适应各种音乐作品的关键。

结论

本文介绍了一种基于图形的方法,用于符号钢琴音乐中的同音分离和谱线预测。新方法比现有的深度学习或基于启发式的系统表现更好。最后,还提供了一个后处理步骤,可以从模型中删除可能导致分数不正确的问题预测。

注1:论文《聚类与分离:一种用于乐谱雕刻的语音和五线谱预测的GNN方法》的GitHub代码库地址是:https://github.com/CPJKU/piano_svsep/?source=post_page-----0cab100629cf--------------------------------。

注2:本文中所有图片皆由作者本人提供。

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:Voice and Staff Separation in Symbolic Piano Music with GNNs,作者:Emmanouil Karystinaios

责任编辑:姜华 来源: 51CTO内容精选
相关推荐

2022-04-20 08:00:00

深度学习数据集Hub

2022-11-22 11:18:38

Java虚拟线程

2022-03-10 12:16:14

侧信道内存攻击网络攻击

2021-02-18 18:13:34

LinuxARM树莓派

2016-12-26 18:39:32

Android应用进程存活率

2016-12-26 18:25:29

Android应用进程存活率

2018-10-07 07:00:59

2023-08-08 11:28:06

企业首席执行官

2021-09-26 10:49:27

计算机互联网 技术

2010-06-18 09:48:22

2015-08-21 09:14:40

大数据

2021-09-27 10:12:42

欺骗防御rMTD网络攻击

2022-05-26 10:57:51

机器人人工智能

2019-07-12 13:50:36

物联网大数据安全

2022-07-07 10:47:16

IngressKubernetes

2010-04-01 09:30:57

2022-01-06 09:00:00

云计算技术架构

2023-09-11 15:20:19

2022-01-14 09:36:47

云弹性混沌测试

2024-01-23 17:33:36

点赞
收藏

51CTO技术栈公众号