本发明涉及乐曲主旋律音轨识别方法,尤其涉及一种基于神经网络的乐曲主旋律音轨识别方法。
背景技术:
midi(musicalinstrumentdigitalinterface乐器数字接口)文件是新的音乐数据记录格式,其记录的是音乐演奏指令序列而非实际声音信息,更利于计算机处理,为音乐特征的自动识别及音乐序列自动生成的研究提供了极大的方便。但在音乐序列自动生成的研究中,如果训练集是多音轨乐曲,生成出的结果是多轨道的音聚集在了单轨道,这不仅偏离了模型学习的目的,而且也会导致自动生成的乐曲序列质量很差;另外,主旋律的提取在哼唱检索、音乐转录、音乐流派分类与歌手识别方面都具有重要应用,对于数字媒体和数字娱乐产品提高交互体验具有重要意义。
现有的主旋律提取算法主要利用乐曲中包含的声音模拟数据信息:一种用于语音识别的鲁棒特征提取算法原理是基于子带主频率信息,实现子带主频率信息与子带能量信息相结合,在特征参数中保留语谱中子带峰值位置信息,使用该算法可以设计抗噪孤立词语音识别系统;而针对复调音乐中不同声源的相互干扰导致的同一声源音高序列不连续,利用音高显著性的连续性和高次谐波的稳定性,提出基于音高静态似然性函数和音高显著性动态似然函数的创建音高轮廓方法,这些方法都没有充分发挥数字化处理的优点。并且从midi文件中检测识别主旋律音轨的任务仍然面临两个挑战:(1)一首音乐由歌声和各种乐器伴奏混合而成,不同声源的频谱相互重叠,很难将某个频率分量归于单个声源;(2)数字音乐的研究数据源不同于传统音乐信息的记录格式,从midi文件中获取主旋律信息不能按照传统音频处理的方法进行处理。因此,现有技术难以准确快速地从midi文件中检测识别主旋律音轨。在构建分类模型的问题上,基于规则的分类方法虽然容易理解,但实用性差。
技术实现要素:
发明目的:本发明的目的是提供一种提高识别精度、简化音频处理流程的基于神经网络的乐曲主旋律音轨识别方法。
技术方案:本发明的识别乐曲主旋律音轨识别方法,利用midi文件提取多个特征来度量和刻画乐曲中的每个音轨,通过构建神经网络模型,根据音乐的基本特征自动识别判断出音乐的主旋律音轨,包括步骤如下:
(1)提取乐曲中音符的信息并计算各个音轨的特征值;
(2)将音轨特征值变换成二维的神经网络输入矩阵;
(3)训练基于神经网络的主旋律音轨识别模型;
(4)使用训练完成的主旋律音轨识别模型进行乐曲主旋律音轨识别。
进一步,所述步骤(1)提取乐曲中音符中的特征并计算各个音轨,包括以下步骤:
(11)遍历每首乐曲中每段音轨的音符,利用midi文件获取音符信息中的速度、时值、时值类型和音高;
(12)计算乐曲中每段音轨音符平均速度;
(13)计算乐曲中每段音轨音符总时值;
(14)设置乐曲中每段音轨音符时值类型集合;
(15)计算乐曲中每段音轨音符最高音与最低音的音程;
(16)计算乐曲中每段音轨音符第二高音和第二低音的音程。
进一步,所述步骤(2)的实现步骤如下:
(21)将任一乐曲每个音轨的特征值顺序装入一维数组作为其特征集合;
(22连接数据集中多首乐曲的特征集合得到二维的神经网络输入矩阵;
(23)按照tensorflow框架的输入标准,得到最终的输入矩阵。
进一步,所述步骤(3)中的主旋律音轨识别模型,实现步骤如下:
(31)定义三层神经网络:设置25个神经元为输入层,定义偏置参数为b1;设置12个神经元为隐藏层,定义偏置参数为b2;设置输出层,定义偏置参数为b3,音轨的独热向量作为输出;
(32)令k为第k层神经网络,c在前向传播过程中为第k层网络的输入维度,在反向传播过程中为输出维度,则第k层的权重参数初始化为
(33)定义前向传播过程中的激活函数σ为relu函数,relu函数如下:
max(0,wtx b)
其中,定义b为偏置集合,w为权重集合,表示相应输入对输出的重要性。
则正向传播计算过程如下:
zi=σ(witx bi),i=1,2,3
其中,定义wi表示第i层的权重集合,x表示输入集合,bi表示第i层的偏置集合;
(34)定义基于softmax函数的输出层,其中,定义xk、xj为输出属于某一类的概率,x1表示识别为主音轨,x2表示识别为非主音轨,softmax函数如下:
网络最后一层的输出z3为自变量,则计算神经网络输出向量
(35)根据softmax层的输出向量
其中,
(36)设置m为训练样本个数,根据交叉熵计算损失函数:
(37)反向传播过程中,记录使得损失函数最小的参数集合w={w1,w2,w3}和偏置集合b={b1,b2,b3}作为模型参数。
进一步,所述步骤(4)中使用步骤(3)得到的模型参数建立主旋律音轨识别模型,模型对输入乐曲的所有音轨计算,得到输出向量
本发明与现有技术相比,其显著效果如下:1、利用midi文件提取重要的音乐特征,并利用神经网络数字化处理后进行自动识别,能准确、且高效的从midi文件中检测识别主旋律音轨;2、为音乐序列自动生成的研究,提供了一种基于神经网络的乐曲主旋律音轨检测方法。
附图说明
图1为本发明的主旋律音轨识别方法的流程示意图;
图2为本发明的神经网络计算模型的流程示意图;
图3为本发明的神经网络学习速率变化折线图;
图4为本发明的主旋律音轨识别模型构建和识别的流程示意图。
具体实施方式
下面结合说明书附图和具体实施方式对本发明做进一步详细描述。
如图1所示,为本发明的主旋律音轨识别方法的流程示意图。在本发明中,要求遍历每首乐曲中每段音轨的n个音符,利用midi文件获取音符信息中的速度vi、时值di、时值类型dti和音高pi,要求计算平均速度v、音符总时值d、音符时值类型集合dus、最大音程interval和第二音程sec_interval。
midi文件记录的是音乐演奏指令序列,包含了音乐的乐谱信息,为音乐信息提取提供了方便,因此采用midi文件作为数据源,可以直接提取音乐的基本信息。
速度、时值、音高、力度、音色等是音乐的基本特征,根据音乐的基本特征可以判断出音乐的类型和乐曲重点,例如主旋律音轨。因此,设计和提取其多个特征,能用来度量和刻画乐曲中的每个音轨。
平均速度:以“拍每分钟”(beatsperminute,简写为bpm)作为平均速度的单位。
音符总时值/音符时值类型集合:音符时值,也称为音符值或音值,在乐谱中用来表达各音符之间的相对持续时间。
最大音程/第二音程:程指两个音级在音高上的相互关系,就是指两个音在音高上的距离而言,其单位名称叫做度。
本发明中,要求训练基于神经网络的乐曲主旋律音轨识别模型,具体流程如图2所示;在具体实施中,细分为训练过程和预测过程如下:
(一)训练过程
(a)进行数据预处理,即根据相关公式计算旋律特征值,由于使用tensorflow计算框架实现神经网络,输入数据要求处理为特定形状的二维数组。
(b)模型训练,即首先初始化权重和偏置参数,建立神经网络层结构,初始化学习速率为0.0001,学习速率在学习过程中的变化如图3;接着根据交叉熵与adam算法反向更新权重和偏置。交叉熵采用真实标签类别作为交叉熵的训练集的先验信息,将神经网络输出作为测试集后验信息,计算两者的交叉熵,并以交叉熵指导对误差的辨识和消除。adam算法则是利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。其中,tensorflow提供的tf.train.adamoptimizer可控制学习速度,经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。最后将midi文件拆分为训练集和测试集,训练集作为学习模型的输入,学习模型将会根据测试集产生结果最好的参数集合。模型训练完成后,会得到一个可以识别主旋律音轨的分类器,将输出的独热编码的向量视为表示主旋律音轨的输出。
(二)预测过程
给定一个实例为未知类标签的多音轨的midi文件,计算该midi文件重要的音乐特征作为分类器的输入,输出按照独热(one-hot)编码对某音轨是否为主旋律音轨两个识别状态进行编码为0和1,输出的向量的每个分量值则表示每首输入乐曲每个音轨的识别状态。
利用得到的模型参数建立主旋律音轨识别模型,识别midi文件的主旋律音轨,整体流程如图4所示。详细的实现步骤如下:
步骤1,提取乐曲中音符的信息并计算各个音轨的特征值。包括以下步骤:
步骤11,遍历每首乐曲中每段音轨的n个音符,利用midi文件获取音符信息中的速度vi、时值di、时值类型dti、音高pi。
步骤12,计算乐曲中每段音轨音符平均速度v,公式如下:
步骤13,计算乐曲中每段音轨音符总时值d,公式如下:
步骤14,设置乐曲中每段音轨音符时值类型集合dus(durationtypes),公式如下:
dus={dti|1≤i≤n}(3)
步骤15,计算乐曲中每段音轨音符最高音与最低音的音程(interval),公式如下:
interval=max(pi)-min(pi),1≤i≤n(4)
步骤16,计算乐曲中每段音轨音符第二高音和第二低音的音程(sec_interval),公式如下:
sec_interval=sec_max(pi)-sec_min(pi),1≤i≤n(5)
步骤2,将音轨特征值变换成二维的神经网络输入矩阵。包括以下步骤:
步骤21,将第i首乐曲每个音轨的特征值顺序装入一维数组fsi作为其特征集合;
步骤22,连接数据集中num首乐曲的特征集合得到二维的神经网络输入矩阵x0;
步骤23,按照tensorflow框架的输入标准,令x=x0t,得到最终的输入矩阵x。
步骤3,训练基于神经网络的主旋律音轨识别模型。包括以下步骤:
步骤31,定义三层神经网络。设置25个神经元为输入层,定义偏置参数b1=0;设置12个神经元为隐藏层,定义偏置参数b2=0;设置输出层,定义偏置参数b3=0,音轨的独热(one-hot)向量作为输出。
步骤32,k为第k层神经网络,c在前向传播过程中为第k层网络的输入维度,在反向传播过程中为输出维度。则第k层的权重参数初始化为
步骤33,定义前向传播过程中的激活函数σ为relu函数,relu函数如下:
max(0,wtx b)(7)
公式(7)中,定义b为偏置集合,w为权重集合,表示相应输入对输出的重要性。
则正向传播计算过程如下:
zi=σ(witx bi),i=1,2,3(8)
公式(8)中,定义wi表示第i层的权重集合,x表示输入集合,bi表示第i层的偏置集合。
步骤34,定义基于softmax函数的输出层,其中,定义xk、xj为输出属于某一类的概率,x1表示识别为主音轨,x2表示识别为非主音轨,softmax函数如下:
网络最后一层的输出z3为自变量,则计算神经网络输出向量
步骤35,根据softmax层的输出向量
其中,
步骤36,设置m为训练样本个数,根据交叉熵计算损失函数(loss):
步骤37,反向传播过程中,记录使得损失函数(loss)最小的参数集合w={w1,w2,w3}和偏置集合b={b1,b2,b3}作为模型参数。
步骤4,使用训练完成的神经网络进行乐曲主旋律音轨识别。
使用步骤3中得到的模型参数建立主旋律音轨识别模型,主旋律音轨识别模型对输入乐曲的所有音轨计算得到输出向量
本文用于企业家、创业者技术爱好者查询,结果仅供参考。