基于小波时间散射的音乐类型分类

这个例子说明了如何利用小波时间散射和音频数据存储音乐节选的风格分类。在小波散射,数据通过一系列小波变换,非线性,和平均化的所述数据的生产低方差表示传播。然后将这些低方差表示被用作输入到分类器。

GTZAN数据集

在这个例子中使用的数据集是GTZAN流派集合[7] [8]。该数据被提供为一个压缩tar归档其大约为1.2 GB。未压缩的数据集大约需要3 GB的磁盘空间。提取从文献中提供的链接压缩的tar文件创建十个子文件夹的文件夹。每个子文件夹被命名为它包含音乐样本的流派。该类型是:蓝调,古典,乡村,迪斯科,嘻哈,爵士,金属,流行,雷鬼,摇滚和。有每个类型的100个例子和每个音频文件包括大约30秒22050赫兹采样数据。在最初的论文中,作者使用了大量的时域和频域的功能,包括梅尔频率倒谱(MFC)从每个音乐示例和高斯混合模型(GMM)的分类萃取,以实现61%的精确度系数[7]。随后,深学习网络已经应用到这些数据。在大多数情况下,这些深层次的学习方法包括用MFC系数或频谱作为输入到深CNN卷积神经网络(CNN)的。 These approaches have resulted in performance of around 84% [4]. An LSTM approach with spectrogram time slices resulted in 79% accuracy and time-domain and frequency-domain features coupled with an ensemble learning approach (AdaBoost) resulted in 82% accuracy on a test set [2][3]. Recently, a sparse representation machine learning approach achieved approximately 89% accuracy [6].

小波散射的框架

在小波时间散射框架中,唯一要指定的参数是时不变的持续时间、小波滤波器组的数目和每八度程的小波数目。对于大多数应用程序,通过两个小波滤波器组层叠数据就足够了。在这个例子中,我们使用默认的散射框架使用两个小波滤波器组。第一滤波器组每倍频程有8个小波,第二滤波器组每倍频程有1个小波。对于本例,将不变比例设置为0.5秒,对于给定的采样率,这相当于略多于11,000个样本。创建小波时间散射分解框架。

科幻小说= waveletScattering ('SignalLength'2 ^ 19,'采样频率',22050,“InvarianceScale”, 0.5);

要了解不变性规模的作用,获得并与来自第一滤波器组最粗尺度小波的实部和虚部一起绘制在时间尺度滤波器。注意,时间支持的缩放滤波器的基本上0.万博1manbetx5秒作为设计的。另外,时间支持最粗尺度的小波不超过小万博1manbetx波分解散射的不变规模。

[FB,F,filterparams] =滤波器(SF);披= ifftshift(IFFT(FB {1} .phift));psiL1 = ifftshift(IFFT(FB {2} .psift(:,端)));DT =22050分之1;时间= -2 ^ 18 * dt的:DT:2 ^ 18 * DT-DT;scalplt =情节(时间,PHI,'行宽',1.5);保持网格ylimits = [-3e-4 -3e-4];ylim (ylimits);ylimits情节([-0.25 - -0.25],'K--');情节([0.25 0.25],ylimits,'K--');XLIM([ -  0.6 0.6]);xlabel(“秒”);ylabel (“振幅”);= plot(time,[real(psiL1) imag(psiL1)]);传奇([scalplt wavplt (1) wavplt (2)), {“缩放功能”,“小波的实部”,“小波的虚部”});标题({“缩放功能”;“粗尺度小波优先滤波器组”})举行

音频数据存储

音频数据存储允许您管理音频数据文件的集合。对于机器学习或深度学习,音频数据存储不仅管理来自文件和文件夹的音频数据流,音频数据存储还管理标签与数据的关联,并提供将数据随机划分为不同集的能力,以便进行训练、验证和测试。在本例中,使用音频数据存储来管理GTZAN音乐类型集合。集合的每个子文件夹都是根据它所代表的类型命名的。设置“IncludeSubFolders”财产真正指示音频数据存储到使用子文件夹和设置'LABELSOURCE'财产“foldernames”以创建基于子文件夹名称数据标签。这个例子假设的顶级目录是MATLAB中TEMPDIR目录,并被称为“类型”。确保位置是你的机器上的顶级数据文件夹的正确路径。你的机器上的顶级数据文件夹应包含各10名为子文件夹为十个流派和必须只包含对应于这些类型的音频文件。

位置= fullfile (tempdir,“类型”);广告= audioDatastore(位置,“IncludeSubFolders”,真的,'LABELSOURCE',“foldernames”);

运行以下命令以获取数据集的音乐流派的计数。

countEachLabel(广告)
ANS = 10×2表标签计数_________ _____蓝调100古典100国100迪斯科100嘻哈100爵士乐100金属100弹出100雷鬼100 100岩

如前所述,有10个流派,每个100个文件。

训练和测试集

创建训练和测试组来开发和测试我们的分类。我们使用80%的数据用于训练和抱出来,其余20%用于测试。该洗牌函数的音频数据存储随机洗牌数据。在按标签拆分数据以随机化数据之前执行此操作。在本例中,我们设置了随机数生成器种子以保证重现性。使用音频数据存储splitEachLabel函数来执行80-20分割。splitEachLabel确保所有的类被相等地表示。

rng (100);广告= shuffle(广告);[adsTrain, adsTest] = splitEachLabel(广告,0.8);countEachLabel (adsTrain) countEachLabel (adsTest)
ANS = 10×2表标签计数_________ _____蓝调80古典80国80迪斯科80嘻哈80爵士乐80金属80弹出80雷鬼80岩石80 ANS = 10×2表标签计数_________ _____蓝调20古典20国20迪斯科20嘻哈20爵士乐20金属20弹出20雷鬼20岩石20

您可以看到训练数据中有800条记录,测试数据中有200条记录。此外,在训练集中每种体裁有80个示例,在测试集中每种体裁有20个示例。

audioDatastore工作与MATLAB高阵列。为训练集和测试集创建高数组。根据您的系统,MATLAB创建的并行池中的worker数量可能不同。

Ttrain =高(adsTrain);tt =高(adsTest);
使用“本地”配置文件启动并行池(parpool)…连接到并行池(worker数量:6)。

为了得到散射特征,定义一个辅助函数,helperscatfeatures,其获得所述散射的自然对数由8.的源代码用于每个音频文件和子样品散射的窗口的数量为2 ^ 19个样品提供helperscatfeatures已列在附录中。我们将计算训练和测试数据的小波散射特征。

scatteringTrain = cellfun (@ (x) helperscatfeatures (x,科幻小说),Ttrain,“UniformOutput”、假);scatteringTest = cellfun (@ (x) helperscatfeatures (x,科幻小说),tt,“UniformOutput”、假);

计算训练数据上的散射特征,并将所有的特征捆绑在一个矩阵中。这个过程需要几分钟。

TrainFeatures =收集(scatteringTrain);TrainFeatures = cell2mat (TrainFeatures);
评估使用并行池“本地”高表达: -  1通过1:已完成在3分40秒评价3分40秒完成

对测试数据重复此过程。

TestFeatures =聚集(scatteringTest);TestFeatures = cell2mat(TestFeatures);
使用并行池“local”计算tall expression: -通过1中的1:在56秒内完成计算在56秒内完成

每行TrainFeaturesTestFeatures是每个音频信号的跨在散射的341个路径中的一个散射时间窗口变换。对于每一个音乐样本,我们有32个这样的时间窗口。因此,对于训练数据的特征矩阵是25600逐341。的行数等于乘以每个例子(32)散射的窗口的数量的训练实例(800)的数目。类似地,对于检测数据的散射特征矩阵6400是按341。有200个测试实施例和每实施例32楼的窗口。为每个在训练数据中的子波散射特征矩阵32楼的窗口的类型的标签。

numTimeWindows = 32;trainLabels = adsTrain.Labels;numTrainSignals =元素个数(trainLabels);trainLabels = repmat (trainLabels 1 numTimeWindows);trainLabels =重塑(trainLabels numTrainSignals * numTimeWindows, 1);

重复此过程,测试数据。

testLabels = adsTest.Labels;numTestSignals =元素个数(testLabels);testLabels = repmat (testLabels 1 numTimeWindows);testLabels =重塑(testLabels numTestSignals * numTimeWindows, 1);

在这个例子中,使用一个三次多项式核的多类支持向量机分类器。万博1manbetx将SVM与训练数据进行拟合。

模板= templateSVM ('KernelFunction',多项式的,“PolynomialOrder”,3,“KernelScale”,“汽车”,“BoxConstraint”1,“标准化”,真正的);类= {“蓝调”,'古典',“国家”,“迪斯科”,“嘻哈”,“爵士乐”,“金属”,“流行”,“雷鬼”,'岩'};classificationSVM = fitcecoc(TrainFeatures,trainLabels,“学习者”模板,“编码”,“onevsone”,“类名”分类(类));

测试集预测

使用适合训练数据散射变换的SVM模型对测试数据进行音乐类型预测。回忆一下,在散射变换中,每个信号有32个时间窗。使用简单多数投票来预测体裁。辅助函数helperMajorityVote在所有32个散射窗口中获得流派标签的模式。如果没有唯一的模式,helperMajorityVote返回指定的分类错误'NoUniqueMode'。这将导致混淆矩阵中增加一列。的源代码helperMajorityVote已列在附录中。

predLabels =预测(classificationSVM TestFeatures);[TestVotes, TestCounts] = helperMajorityVote (predLabels adsTest.Labels,分类(类));testAccuracy =总和(eq (TestVotes adsTest.Labels)) / numTestSignals * 100;

测试的准确性,testAccuracy是88%。这种精确性可以与GTZAN数据集的最新技术相媲美。

显示混淆矩阵检查流派按流派准确率。召回有在每个类20倍的例子。

confusionchart (TestVotes adsTest.Labels)

对角线的混淆矩阵图显示,对于各个流派的分类准确度是一般相当不错。提取这些类型的精度和单独绘制。

厘米= confusionmat (TestVotes adsTest.Labels);厘米(:,结束)= [];genreAccuracy =诊断接头(cm)。/ 20 * 100;图;栏(genreAccuracy)集(gca,'XTickLabels'、类);甘氨胆酸xtickangle (30);标题(“体裁-测试集的正确率”);

概要

该实例演示了小波时间散射和音频数据存储在音乐类型分类中的应用。在这个例子中,小波时间散射达到了分类精度可与GTZAN数据集的最新性能相媲美。与其他需要提取大量时域和频域特征的方法不同,小波散射只需要指定一个参数,即时不变尺度。音频数据存储使我们能够有效地管理大型数据集从磁盘到MATLAB的传输,并允许我们对数据进行随机化,通过分类工作流准确地保留随机化数据的类型成员。

参考

  1. Anden J.和Mallat, S. 2014。深的散射光谱。《IEEE信号处理学报》,第62卷,第16期,第4114-4128页。

  2. Bergstra, J., Casagrande, N., Erhan, D., Eck, D.和Kegl, B.聚合特征和AdaBoost用于音乐分类。机器学习,第65卷,第2-3期,第473-484页。

  3. Irvin, J., Chartock, E.和Hollander, N. 2016。递归神经网络,注意类型分类。https://www.semanticscholar.org/paper/Recurrent-Neural-Networks-with-Attention-for-Genre-Irvin/6da301817851f19107447e4c72e682e3f183ae8a

  4. 李,陈,A.B,和春,2010。利用卷积神经网络自动提取音乐模式特征。国际会议数据挖掘与应用。

  5. Mallat。美国2012年。集团不变的散射。《纯粹数学与应用数学通讯》,第65卷,第10期,第1331-1398页。

  6. Panagakis, Y., Kotropoulos, c.l., and Arce, G.R. 2014。基于音频特征的联合稀疏低秩表示的音乐类型分类。《IEEE音频、语音和语言处理汇刊》,22,12,第1905-1917页。

  7. 扎纳塔基斯,G.和库克,P. 2002。音频信号的音乐类型分类。《IEEE语音和音频处理学报》,第10卷,第5期,第293-302页。

  8. GTZAN类型集合http://marsyas.info/downloads/datasets.html

附录 - 支持功能万博1manbetx

helperMajorityVote——该函数返回在多个特征向量上预测的类标签的模式。在小波时间散射中,我们为每个时间窗口获得一个类标签。如果没有找到唯一模式,则返回“NoUniqueMode”的标签以表示分类错误。

功能[ClassVotes, ClassCounts] = helperMajorityVote (predLabels、origLabels类)%该功能是支持只小波散射的例子。万博1manbetx有可能%在将来的版本中更改或删除。如果标签还没有分类,则制作分类数组predLabels =分类(predLabels);origLabels =分类(origLabels);%来料既predLabels和origLabels是分类矢量Npred = numel(predLabels);Norig = numel(origLabels);Nwin = Npred / Norig;predLabels =重塑(predLabels,Nwin,Norig);ClassCounts = countcats(predLabels);[mxcount,IDX] = MAX(ClassCounts);ClassVotes =类(IDX);%检查的最大值任何关系,并确保它们被标记为如果模式出现超过一次,错误%modecnt = modecount(ClassCounts,mxcount);ClassVotes(modecnt> 1)=分类({'NoUniqueMode'});ClassVotes = ClassVotes (:);%-------------------------------------------------------------------------功能modecnt = modecount(ClassCounts,mxcount);对于NC = 1:尺寸(ClassCounts,2)modecnt(NC)= histc(ClassCounts(:,NC),mxcount(NC));结束结束结束

helperscatfeatures- 该函数返回一个给定输入信号的小波时散射特征矩阵。在这种情况下,我们使用小波散射系数的自然对数。散射特征矩阵计算上的信号的2 ^ 19个样品。散射特征由8倍的子采样。

功能特征= helperscatfeatures(X,SF)%该功能是支持只小波散射的例子。万博1manbetx有可能%在将来的版本中更改或删除。设有= featureMatrix(SF,X(1:2 ^ 19),“转换”,“日志”);功能=功能(:1:8:结束)”;结束

也可以看看

相关话题