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


    1. 前言

    想要使用深度学习方法将乐曲转换为对应乐谱,即 music transcription 方面的研究,奈何这方面在国内似乎研究不多,网上资料零散稀少。
    找了些相关的论文阅读,在此记录自己的一些收获感悟。
    一开始甚至连 MIR, AMT 这些关键词都不知道,摸索了很久。

    2. Automatic Music Transcription: An Overview

    一篇关于music transcription方面的介绍性文章,2018年左右,那时似乎Google的MAESTRO数据集都还没出现。介绍了主要的两种MT方法:非负矩阵分解NMF和神经网络NN,当时的state of the art是Google Brain’s Onset and Frames Network,用到了卷积与LSTM,有两个输出分别预测开始时刻与音高。NNs方法最大的两个问题:标注数据集的稀缺与模型不具备通用性,例如用钢琴音源训练的模型难以应用于管风琴的演奏。而且这个任务涉及众多,研究尚少,由于音乐的多样性复杂性,标注数据集也难以获取、分析,而且很难保证数据集本身是正确的,即便正确得到模型也难以跳出西方古典音乐以及定音高乐器的范畴。最后文章提及目前仍然缺少对结果的评估指标,现有指标没有考虑人的感性认识,如对缺失的音符比多出的音符更敏感、跑调的音符比着调的应有更大的penalty。

    3. Identifying Missing and Extra Notes in Piano Recordings Using Score-Informed Dictionary Learning

    由Automatic Music Transcription: An Overview在末尾提及,有点久远
    Theoretically, standard AMT methods could be employed in this context by using them to generate a transcription from the audio and comparing the result with the given score.
    但事实上现存方法错误率很高导致比较几乎无用。提到一种办法是从乐谱合成音乐并与原始的对齐再一起进行转换: to lower the number of falsely detected notes for the real recording, the method discards a detected note if the same note is also detected in the synthesized recording while no corresponding note can be found in the score.这似乎是由于和声音程导致的不确定,从而造成许多音符的凭空出现或消失,当音符在真实的与合成的音乐中同时出现而乐谱对应对应位置不存在,那这个音符就是应该去除的扰动,这可能是由于目的是比较转换后音符的正误,如果这个位置不该有音符则应提前处理。可惜似乎没有介绍所说的align。
    看到后面才发现是基于NMF方法,故没有继续看下去。

    4. A Tutorial on Deep Learning for Music Information Retrieval

    MIR领域的,也是2018年左右,但用了深度学习,有点参考价值。
    对音频的二维表征可以使用CV那样的图片形式或STFT(短时傅里叶变换),梅尔谱(mel-scale),CQT(constant-Q transform)和Chromagram(色谱图/音级画像(pitch class profile)),但一般图片局部相关(像素点相邻的接近),而音频并非如此。梅尔谱是专为人类听觉感知而优化的一种二维表征,因为人对应1000hz与500hz 跟 5000hz与4500hz感受不同,利用对数相关的公式将频率转换为梅尔频率能与人类的感觉相吻合。梅尔频率适合打标签、音乐情绪等主观任务。
    使用卷积层时卷积核不能太小,若小于目标模式大小,当前层就无法学到有意义的表征。例如,对于一个和弦识别任务,卷积核应该足够大才能捕捉到大调和小调的区别。
    使用恒Q变换(CQT)做music transcription,常数Q变换等时频变换避免了时频分辨率均匀的缺点,更接近与人耳听觉系统,在低频有更高的频率分辨率来分解相近的音符,在高频有更高的时间分辨率来跟踪快速变化的泛音。
    使用*动态时间规整(Dynamic Time Warping)**或许可以作为输入输出的评估
    文章在5.1数据预处理部分提到对数映射可以控制数据的分布,得到更好的效果(CQT、梅尔谱?)
    MFCCs(mel frequency cepstral coefficients) 梅尔频率倒谱系数,可以对两首音乐分别计算出特征向量,方便比较
    RNN由于循环链接,具有在时间轴上的深度,因此层数相对于卷积网络来说没有那么重要
    CRNN结合了卷积层和循环层,是当时在时间无关问题上的state-of-the-art

    5. AnthemScore 4 ——Audio to Sheet Music With Machine Learning

    这是一个软件,似乎有论文,但没找到。它能够将mp3,wav等格式的音乐转换为五线谱/吉他谱,并通过恒Q变换,用x轴为时间,y轴为频率,颜色深浅表示振幅表示输出结果,便于用户调整识别的音符。据说使用ResNet与大量数据训练,但由专业人士指出仍只能图一乐,精度不够。如输出的谱子速度不对,一些要分配到左手的音错误的被分配到了右手、(一些音域比较广的曲子有这个问题)、缺少连音,力度记号等必要标记等等,仍然需要人工矫正错误,但比起完全人工扒谱还是减轻了工作量。

    6. An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

    CRNN(卷积循环神经网络)的论文,它是DCNN和RNN的组合,用于处理场景文本识别问题。对于字符图片先用CNN处理得到特征图,其每列的特征详细对应一个感受野,由于字符书写的不确定性,相邻特征向量的感受野可能重叠,也可能无法涵盖整个字符

    单个特征向量不能覆盖整个字符可以通过后续的RNN层来解决,通过分析字符上下文可以更好推出所代表的字符,然而这样最终结果也会有冗余字符出现。文中提到使用了Graves等人提出的CTC(Connectionist Temporal Classification)层定义条件概率,再对其取负的对数最大似然作为目标函数(loss function),把从循环层获取的标签分布通过去重、整合等转换成最终结果,即不需要人工标注出与循环层输出等长的标签,是一种不需要对齐的loss计算方法。

    循环层输出`bb-ili-bbb-illi`,而正确结果应为`bilibili`,二者长度不一致,但能够计算loss 或许可以根据这个思想,利用MFCC+CTC实现AMT

    7. Omnizart: A General Toolbox for Automatic Music Transcription

    还想着为啥论文就3页,这只是简单介绍,并没有涉及实现细节,他们将AMT分成了piano solo, multi-instrument, drum, vocal等等子任务,或复现了该任务中最好的模型,或原创、结合自己的改进,均达到了当前最优水平。注意到与其引用的第二篇 Multi-Instrument Automatic Music Transcription With Self-Attention-Based Instance Segmentation 作者有重叠。

    8. LARGE-SCALE CONTENT-BASED MATCHING OF MIDI AND AUDIO FILES

    比较早的一篇文章了,主要是里面关于 "align midi file to audio file" 的内容吸引了我。里面主要讲了MIR领域对于训练数据的需求以及midi用作真值(ground truth)的可行性,然而 "In order to use MIDI files as ground truth, they need to be both matched (paired with a corresponding audio recording) and aligned (adjusted so that the timing of the events in the file match the audio)." 也就是说直接获取的midi文件还需要与对应音频匹配(matched)且时间对齐(time-aligned),而midi普遍欠缺完整元数据(作者、曲名之类的),实现不易,本文就是在介绍高效匹配与对齐的办法。但对我而言只是好奇这两个定义的具体含义。
    匹配(match)易懂,就是从大量音频数据中找到与midi文件对应的音频。
    对齐(aligned) 调整midi使得与audio的时序节拍相匹配
    为了表述方便下文使用audio代表原始音频,不同于midi转换的合成音频
    他们提出了一个数分钟内完成匹配的方法,先整理出元数据完整的部分midi文件,称为clean midi,再利用模糊搜索去匹配相应的音频文件。但模糊匹配仍可能有错,且midi文件也不能保证正确,还可能是对应同一首歌的不同版本。于是使用DTW将原音频对齐到/匹配到?(align...to)[这里的align大概与第二个任务time-aligned不同] 通过midi合成的音频,但这样还是不能区分不同的对齐情况(alignments),于是根据合成的音频中节拍位置将midi中的节拍对齐到原数音频中的节拍,配合CQT及DTW计算最小代价找出最合适的midi?
    说实话没仔细看具体算法,似乎是通过计算来实现音频与对应midi的alignment,感觉alignment本质还是一种匹配,只是match先通过midi找到同一首歌的所有audio,这些audio内容还有不同,还要找出(align)最相符的midi-audio配对,而非修改midi使之完全符合audio。

    9. Polyphonic Audio Matching and Alignment for Music Retrieval

    2003年的论文,主要是想知道alignment到底是什么。其中提到将音频与midi都转换成色度图谱(Chromagram)再比较,其中midi需先合成音频再转换。这样得到了两个向量序列,提到说通过修改midi数据的速度来达成两个向量序列的最佳匹配(best agreement)[这里agreement似乎等于alignment],先将两个序列归一化,再计算欧氏距离得到相似矩阵

    越黑距离越近,副对角线那条黑线表示两个向量在这种关系下彼此接近,这条路径就是我们所要的对齐(this path is the alignment we are after),也就是说这个图是按时间将midi的每一点计算到audio不同时间点的距离,得到的这条路径本质应该是时间维度上audio中某一点跟midi(合成的音频)中某一点对应关系。文章后续用DTW(原来DTW历史这么悠久)计算出了这条路径(即归整路径,Warp Path),然后进一步计算了每个匹配在这种路径的平均距离,以此为依据判断是否对齐:若对齐,则路径平均距离应该较小。

    注意DTW计算的路径并不一定为直线,可能是多段折线,但需满足三个条件:

    1. 边界条件。任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此路径必定是从左下角出发,在右上角结束。
    2. 连续性。即曲线需连续,这样可以保证audio和midi中的每个点都在图中出现。
    3. 单调性。即曲线单调递增,这限制图上面的点必须是随着时间单调绘制的。

    图中两个维度跨度不同是因为midi速度更快,演奏用时较少,这说明 alignment并不要求调整midi使得与audio完全对应,而是通过算法获得一种midi与audio之间的时序对应关系,以此确定midi与对应audio的正确匹配,或许称得上是更加精细的匹配(match)。
    就像前面一篇论文提到的用两个序列p、q来表示midi与audio的节拍对应关系,如 p[i] = n, q[i] = m 代表第n个midi拍对齐到第m个audio拍。这里的拍应该就是歌曲的一小段。

    10. A MULTI-PASS ALGORITHM FOR ACCURATE AUDIO-TO-SCORE ALIGNMENT

    [论文13](字节跳动那篇)中提到的 audio to score alignment 任务,该论文里面提到“我们的目的是从各种古典钢琴音乐表演中自动提取时间(音符起始)参数”。即 audio to score alignment 指的是估计音频中各音符的出现时刻(onset),因此[论文9]才说midi跟audio节拍对齐,本质也是找音符在时间轴上的位置。
    后续提到当前(2010年为止)的方法都以帧为单位匹配,无法区分同时出现的音符,为此提出了改进的办法...
    此外还有2018年的论文:Enabling Factorized Piano Music Modeling and Generation with the MAESTRO Dataset,提到他们这个数据集MAESTRO中的钢琴演奏在音符与音频波形间以3ms的精度对齐。(piano performances captured with fine alignment (~3 ms) between note labels and audio waveforms)

    11. VOCAL MELODY EXTRACTION USING PATCH-BASED CNN

    由于打算参考这篇文章完成''要求在10天之内提交完整、工作量大的报告且无视上学期说好的可以用机器学习作业代替的方案况且从来没有上过课的"智能创新设计与创业实践"课''的任务,因此会看得更详细些。前面更多是概括,而后面的章节看的慢,不知不觉变成了翻译+理解...

    11.1. 引言

    用patch-based CNN处理音频的想法来自图像领域的目标检测,传统音频处理多以一帧或一段为单位,而图像领域则一般以patch为单位,如R-CNN。在音频处理中,patch指时频图的一块或一片。patch的思想结合CNN就形成了一种用于复调音乐中人声旋律提取的模型,其输入是CFP,一种新的时频输入数据表示,它增强了旋律轮廓并抑制了音频信号的谐波成分。这种简洁的数据表示和patch-based CNN模型使有限标记数据的有效训练成为可能。与其他深度学习方法相比,该方法具有优异的速度和差距不大的精度。
    使用patch有多个好处:

    1. 可以同时捕获时间与频率两个维度的事件
    2. 其次基于patch的处理比基于段的更快速,因为patch将频谱中的某些元素排除在计算之外(patch只是时频图中的一部分)

    然而,在声谱图中用patch建模局部音高事件(大概就是音符的出现?)在实践中十分困难,因为和声(指由超过一个单音所组合而成的声音),多个事件会有重叠。
    因此需要新的数据表达方式:CFP( combined frequency and periodicity),借此就能在频域中定位音高事件(localize a pitch event)而不会与其他泛音产生干扰(标准的正弦波作为基准,称作基波(纯音)。谐波(泛音)是比基波的频率高整数倍的波)

    人声旋律提取包含分类一个时频域内是否含有人声事件的任务与同时发出的人声的定位及音高检测任务,歌声具有与其他乐器不同的颤音和滑音,因此分类任务只要用局部音高轮廓即可(localized pitch contour)

    该方法共分三步,

    1. 先从音频信号转为CFP表示,
    2. 再将patch作为人声旋律目标的候选,
    3. 训练CNN去决定该patch是否对应歌声,然后在时间和频率两个维度上定位声音旋律目标。

    在实验中该方法依靠小规模训练数据和有限的计算资源达到了跟其他近来发展的深度学习方法差不多的精度。

    11.2. 方法

    11.2.1. 数据表达

    在CFP中一个音高对象由指示基频/基音(\(f_0\))和倍频/泛音(\(nf_0\))的频域与指示基频/基音(\(f_0\))与分频/次泛音(\(f_0/n\))的时域组成。
    下文表示将频域表示跟时域表示简单相乘能有效抑制泛音与次泛音峰值,从而产生在时域与频域都定位音高的CFP表示。

    取输入信号 \(x := x[n]\),n是时间序号,再使\(X\)代表x的短时傅里叶变换(STFT)。
    给定N个点的离散傅里叶变换(DFT)矩阵\(F\),高通滤波器\(W_f, W_t\),以及激活函数\(\delta_i\),有三种数据表达:

    取输入信号 x := x[n],n是时间序号,再使X代表x的短时傅里叶变换(STFT)。
    给定N个点的离散傅里叶变换(DFT)矩阵F,高通滤波器W_f, W_t,以及激活函数\delta_i,有三种数据表达:

    等式(1)-(3)包含文献中使用的许多常规音高突出函数(pitch salience functions)
    Z0是声谱图/频谱(spectrogram),Z1是生成倒谱(generalized cepstrum (GC))(用Z0计算),Z2是频谱的生成倒谱(generalized
    cepstrum of spectrum (GCoS))
    Z0,Z2的下标k代表频率,Z1的下标代表伪频率(或称类频率),他们的时间单位都相同。
    [注] Z1似乎跟倒谱分析cepstrum analysis中的倒谱一样,不知道“生成(generalized)”二字怎么理解...
    [注] 关于频谱倒谱等可参考CSDN上的一篇文章:语音信号处理之(四)梅尔频率倒谱系数(MFCC)

    这里简单介绍一下各个概念:
    spectrogram 声谱/频谱图(将原始音频分帧计算STFT、取直方图拼合而成,横轴time,纵轴Hz)
    spectrum 声谱/频谱
    cepstrum 倒谱(一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的谱,将其低通滤波后可以得到频谱包络,即原频谱的低频部分)
    formants 共振峰(语音频谱图的峰值,表示语音的主要频率成分,用它就可以识别不同的声音)
    spectral envelope 频谱包络(一条连接共振峰点的平滑曲线,频谱低频成分)
    spectral details 频谱细节(即频谱的高频成分)
    mel scale #一种符合人耳直觉的主观音阶标准(人耳对于高频声音的分辨率实际上是不如低频声音,一般有\(m = 2595 \log_{10}\left(1 + \frac{f}{700}\right)\)
    MFCCs(Mel-frequency Cepstral Coefficients) 梅尔倒频谱系数(在Mel频谱上面获得的倒谱系数,是语音识别领域广泛使用的一种音频特征)
    DCT(discrete cosine transform) 离散余弦变换(用于实偶对称数据,对称指的是采样对称)
    DST(discrete sine transform) 离散正弦变换(用于实奇对称数据,对称指的是采样对称)
    pseudo-frequency 伪频率
    quefrency 类频率(在倒谱分析cepstrum analysis中大致相当于伪频率)

    激活函数:
    \(\qquad\qquad\delta_i(Z) = |relu(Z)|^{\gamma_i}, i = 0,1,2 \qquad\qquad(4)\)
    其中的\(\gamma_i\)是逐元素(element-wise)的幂运算
    Wf and Wt are
    two high-pass filters designed as diagonal matrices with the
    cutoff frequency and quefrency, respectively being kc and qc,
    \(W_f, W_t\)是两个高通滤波器,用于去除低频成分是对角矩阵,而\(k_c与q_c\)分别表示截止频率和频率

    另外,为了适应音高感知尺度,CFP表达还需映射为对数频率尺度,因此需要两套滤波器组分别用在时域和频域,定义为\(\widetilde{Z1}, \widetilde{Z2}\)
    最终CFP表达就是 \(Y[p,n]=\widetilde{Z1}[p,n] \widetilde{Z2}[p,n] \qquad\qquad(6)\)
    p是对数频率尺度的下标。先将音频文件重采样到16kHz,并合并为单通道。数据表示用2048个样本大小的Hann window(不同于hamming window),以320个样本为一跳计算(hop size of 320 samples)
    上述过程如图2(在下方)顶部4个子图所示。该片段里男歌手的歌唱旋律十分微弱,且基频轮廓不清晰,频谱能量大部分集中于高频部分。这是因为歌唱声音主要由共振峰主导而非基频,这种高频内容在GC(生成倒谱)中不可见,因为它是时域相关表达,而GC在低频部分展示了许多强烈的次泛音。
    GCoS(频谱的生成倒谱)是频谱(spectrogram)提炼、去趋势(de-trended)而来,它的频谱包络由公式5的高通滤波器去除。
    将GC和GCoS相乘就得到了公式6中简明的CFP表达,其中不需要的峰值都被抑制,剩下的大多是旋律或者伴奏乐器的基频
    [注] de-trended: having long-term trends removed in order to emphasise short-term changes(不确定)
    [注] 可以看到图2左下角这个提取出来的输出大致对应于左上角频谱图几组相似曲线中最下面、最模糊的一组,因为纵轴是频率,这个纵向处于最下面的曲线大概就是基音,而上方那些是相应的泛音。

    11.2.2. patch选取

    为了分类时频平面的一个像素是否属于歌唱旋律轮廓,关键区域的patches被选为Y,作为旋律轮廓的候选。
    选择patch的策略:对于每个峰,patch应包含且将其放在中间位置。
    patch尺寸最好是:25×25 (也就是0.5秒x6.25个半音程),同时为了简便使用固定尺寸
    [注] 音程是指两个乐音之间的音高关系,用“度”表示。以简谱为例,从1到1,或从2到2都是一度,从1到3或2到4都是三度,从1到5是五度。
    这些patch随后被用于CNN训练输入,学习分类一个patch的中间属于歌唱旋律轮廓(label=1),或者不是(label=0)
    由于Y中只有一小部分峰属于旋律轮廓,于是在训练过程中将随机选择10%的非歌唱峰到训练集中,防止正例反例的不平衡。

    图2 对MIREX05数据集‘train09.wav’最初10秒的歌唱旋律提取过程。左上角:功率谱图(power-scale spectrogram)(Z0);右上角:生成倒谱(Z1);中间左侧:频谱的生成倒谱(Z2);中间右侧:25x25尺寸patch的CFP表示;左下角:重新组织的CNN输出;右下角:CNN-MaxOut的结果

    11.2.3. 模型

    为了预测输入patch是否代表歌声(即需要的旋律?),我们设计了一个有两个卷积层、三个全连接层的CNN模型(看它代码,结构真就这么简单,但除此之外还有relu、dropout跟maxpooling)。最终的输出为2x1的向量,一个代表属于旋律轮廓的可能性,一个代表不属于的可能性。在训练过程中,使用随机梯度下降(stochastic gradient desent)跟Adam优化器,以交叉熵(cross entropy)作为CNN输出与真值(ground truth)之间的损失函数。用python2.7、keras和Theano实现。
    [注] 作者?后来在另一篇论文中用python3与pytorch重写了,并作为note transcription的数据预处理部分

    patch-level的预测结果根据patch中心的时间和频率被重新组织为新的时频表达,如图2左下角所示。
    与歌声相似性不高的音高轮廓,例如没有颤音和滑音的部分,它们的输出概率很低,几乎不会出现在图上。CNN输出阈值设为0.5便于生成二元预测结果。
    因为输出概率大于0.5的patch可能多于一个,因此每个时间步的歌声旋律轮廓可以从三个方式获得:

    1. 使用CFP表示,取与帧的最大值相对应的音高索引
    2. 从所有输出概率大于0.5的patch中选择CFP表达达到最大的频率索引
    3. 根据最大输出概率取频率索引

    我们分别将上述三种方法称为CFP-Max,CNN-MaxIn,CNN-MaxOut

    11.3. 实验

    我们用两种最近提出(其实很久远了)的深度学习算法来比较着三种方法。一个是多列DNN(multi-
    column DNN (MCDNN)),在这上面的研究结果发表在另一篇论文。另一个是深度显著性图(deep salience map (DSM)),DSM的检测结果对于阈值很敏感,最终的最优阈值为0.1,以及默认值0.3都被用于实验中。
    [注] 这里作者给出了github地址,然而里面只有测试的代码和训练好的模型,没有提供读者自己实现并训练新模型的途径。

    11.3.1. 数据

    选用MIR1K数据集的前800个片段,每个片断取前3秒被用作训练集,没有进行数据增强。不同于其他数据驱动的旋律算法,这项研究用的训练数据尺寸小并且不具备多样性,因为只包含业余歌手唱的40分钟中文卡拉ok歌曲。评估用的测试集来自音乐提取用的4个数据库: ADC2004, MIREX05, iKala和MedleyDB。前两个只取了含有人声的片段,medleyDB的声乐旋律标签是从按照“女歌手”或“男歌手”标记间隔出现(occurring in the intervals)的melody2标注中获得的

    11.3.2. 结果

    表1列出了上述三个方法CFP-Max,CNN-MaxIn,CNN-MaxOut和MCDNN、DSM在这四个测试数据集上的的overall accuracy (OA), raw pitch accuracy(RPA), raw chroma accuracy(RCA), voice recall (VR) 和 voice false alarm (VFA)。

    表1 提出的以及其他的方法在歌声旋律提取中的结果

    表格数据使用mir eval(来自论文“mir eval: A transparent implementation of common mir metrics”)计算。由于论文长度限制,表中只包含前两个数据集的VR和VFA结果,因为VAD任务是该论文的次要话题。
    [注] VAD没有给出定义,猜测为Voice Activation Detection,大概就是前面使用CNN判断patch是否包含歌声(voice)的任务。
    由于CFP-Max没有VAD机制,于是VR、VFA两项都是100%(因为CFP-Max将所有patch都当成voice,全部召回,但也对全部负例产生了误判)。
    而CNN-MaxIn 和 CNN-MaxOut用于VAD的CNN一样,因此两项数据也一样。而提出的模型没经过仔细调整便在VR和VFA上接近使用最优阈值参数的DSM,这可能是因为每个语音激活(voice activation)实例是在时域和频域独立和局部地确定的。
    可以看到CNN-MaxOut方法总体最优,验证了patch-based CNN建模选择歌声旋律相应patch的有效性。也能看到CFP作为纯信号处理方法在没有数据驱动建模的情况下仍展现出了十分有竞争力的表现。
    对于该现象有几个说明(explanation):

    1. 不带CNN建模的CFP-Max提供了非常有竞争力的RPA和RCA,偶尔甚至比用默认参数的DSM更好。
    2. CNN-MaxIn的RPA和RCA在ADC2004数据集上比CNN-MaxOut更好

    然后分析了各方法在不同数据集上性能的差异及其原因,主要是训练数据与模型大小的不同。若遇到跟训练数据相近的测试集效果自然更好。其次DSM使用了更多层次,更多特征映射与更大的数据表示(如完整CQT表达)。但本文提出的方法相对DSM计算速度更快,大概快了8倍。

    11.4. 结论

    这个使用CFP表达与patch-based CNN的模型更好训练,计算更快,且准确率不低。同时它还有进一步提高的空间,可以通过数据增强和加入更多的训练样本,这些样本要含有更多局部代表歌声或非歌声事件的旋律轮廓。(more training samples containing melody contours locally representing voice or non-voice events)
    该方法基于一个假设:短音高轮廓足够从伴奏中判别歌声旋律,若在复杂的乐器或其他上下文相关的场景下该假设可能无法成立。将来的研究方向可以包含同时采用局部与横跨时域或频域的上下文信息去处理更多具有挑战性的场景。

    11.5. 赶作业的垃圾话

    null

    12. 音乐主旋律提取算法研究及应用

    硕士毕业论文,总共70页,介绍了研究背景意义、国内外研究现状、基本乐理知识、用到的算法、数据集、性能测试指标等等。重点不在深度学习,更多是显著性特征的处理。
    提到主旋律提取的5个性能指标:

    1. 人声查全率(Voicing Recall Rate,VR):计算主旋律提取结果中,正确判定为人声帧数与数据标签中人声实际总帧数的比值。
    2. 人声虚警率(Voicing False Alarm Rate,VFA):计算主旋律提取结果中,将非人声帧误判为人声帧与非人声实际总帧数的比值。
    3. 原始音高准确率(Raw Pitch Accuracy,RPA):计算主旋律提取结果中,将模型估计的音高序列与数据集中样本真实的音高序列进行逐帧对比。若音高差值在半个音程范围内则认为该帧音高估计正确,否则认为估计错误。
    4. 音色准确率(Raw Chroma Accuracy,RCA):计算主旋律提取结果中,若模型估计的音高与实际音高相差一个或多个八度,认为估计正确,即忽略八度错误情况下的音高准确率。忽略八度错误后正确估计音高的帧数
    5. 整体准确率(Overall Accuracy,OA):计算主旋律提取结果中,统计包括在人声帧和非人声在内的所有帧的正确率,本论文非人声的音高设置为 0。

    同[论文11]那样都依靠信号处理的知识,将音频信号预处理为某种表达后输入网络,这里用到的是SF-NMF(2010)。
    之后为了解决 CQT 变换使谐波(泛音)频率丢失的问题,采用谐波 Q 变化(HCQT)来处理音乐信号,它有谐波、时间和频率三个维度的结构信息
    之后将处理好的信号作为CNN输入,将CNN全连接层输出(旋律特征)作为条件随机场(conditional random field,CRF)输入
    实验结果发现提取得不错,但VFA很高,于是利用残差块与双向长短时神经网略(Bi-LSTF)构成主网络,从混合音频信号中提取歌声旋律的中心部分,除此之外增
    加一个歌声检测的辅助网络,组成了一个联合检测网络,独立执行旋律提取中的两项任务,即音乐歌声检测和音高分类任务。随后在了在联合检测网络顶部增加了双向
    反馈结构,加强两项任务的连续和强化相关任务之间的表征关系。随后对不同的方法分别在两个数据集上比较性能指标。
    第五章利用原本的主旋律提取输出及色度特征、梅尔频谱、梅尔频率倒谱系数训练了音乐分类模型,以其输出选择预设的基础水型,能够配合主旋律改变喷泉水型
    的动作速度和幅值,以此设计音乐喷泉模拟系统。再以QT做交互界面,OpenGL做水型...

    13. 后话

    后接第二篇阅读笔记,主要是当前比较先进的一些深度神经网络模型。
    机器学习领域发展得实在太快了,现在想来,第一篇的这些论文看完好像用处也不是很大,里面的信号、公式看着还头大,权当了解发展历史吧...追求高精度还得上深度学习。

  • 相关阅读:
    判断进程是64bit还是32bit
    判断是否是64位系统(之前那个是判断是否是64位进程不一样。注意区分)
    以程序的方式操纵NTFS的文件权限
    Windows平台内核级文件访问
    TLSAlloc()
    Android开发效率的小技巧
    二分查找法
    unittest 框架
    ASP.NET MVC中使用Ninject
    Java内存区域与内存溢出异常
  • 原文地址:https://www.cnblogs.com/Stareven233/p/15742388.html
Copyright © 2020-2023  润新知