CREPE节距检测网培训时间: 单声道信号数据

跟踪单音信号的音高

CREPE于2018年发布,是一个基于深度卷积神经网络的最先进系统,直接对时域波形进行操作。该体系结构基于六个卷积堆栈的链,然后是分类器。网络输出一个向量,该向量表示基音处于360个频率类别中的一个频率类别的概率,该频率类别以非线性间隔。

层数:41|参数计数:22244328|训练大小:89 MB|

训练集信息

性能

示例

资源检索

获取预先训练过的网:

在[1]中:=
NetModel[“单声道信号训练的CREPE基音检测网络\数据“]
输出[1]=

评价功能

定义将用于解码网络输出的隐马尔可夫过程:

在[2]中:=
HMP=模块[{starting,transition,emission,xx,yy,selfEmission},starting=ConstantArray[1./360,360];yy=常量数组[Range[360],360];xx=转座@yy; 转换=映射[Max[#,0.]&,12-Abs[xx-yy],{2}];转换=N@#/总计[#]&/@转换;自发射=0.1;emission=IdentityMatrix[360]*selfEmission+ConstantArray[(1.-)自发射)/360.,{360,360}];HiddenMarkovProcess[启动、转换、发射]];

该网络采用单声道音频信号,并以对数音高标度输出信号的音高估计值。编写求值函数,将结果转换为时间序列包含预测频率(Hz)和预测置信度:

在[3]中:=
findPrediction[“插值”,salience_,center_:无]/;ArrayDepth[salience]==2:=Map[Function[in,findPrediction[“插值”,in,center]],salience'
在[4]中:=
findPrediction[“插值”,salience_,center_:无]:=模块[{c,a,端点,分},如果[中心===无,c=第一@订购[显著性,-1],c=中心];endpoints={最大值[1,c-4],最小值[长度@显著性,c+5]};a=取[显著性,终点];分=范围[0,7180,20]+1997.3794084376191;{10.*2^(总计[a*Take[分,端点]]/总计[a]/1200.),显著性[[c]]}]
在[5]中:=
findPrediction[“Viterbi”,salience_]:=映射线程[findPrediction[“插值”,##]&,{salience,FindHiddenMarkovStates[First[Ordering[#,-1]]&/@saliece,HMP]}]
在[6]中:=
netevaluation[a_?AudioQ,选项模式[{“解码器”->“Viterbi”}]]:=模块[{res,times},res=网络模型[“基于单音信号数据训练的CREPE音调检测网络”][AudioPad[a,{0.032,0.032}]];res=查找预测[OptionValue[“解码器”]/。除了[“维特比”]->“插值”,res];times={范围[0.,数量量级[Duration[a],“Seconds”],.01]};<|“预测”->时间序列[res[[All,1]],times],“置信度”->时间序列[res[[All,2]],times]|>]

基本用法

检测单音信号的音高:

在[7]中:=
pred=netevaluation[示例数据[{“音频”,“大提琴”}]]
输出[7]=

使用映射到不透明度的置信度绘制预测频率:

在[8]中:=
ListLinePlot[pred[“Prediction”],ColorFunction->函数[{x,y},指令@不透明度@pred[“置信度”][x]],颜色函数缩放->假,绘图范围->{100,120}]
输出[8]=

绩效评估

使用正弦振荡器生成信号:

在[9]中:=
f[t_]:=400+200正弦[2*Pi*t];a=音频发生器[{“Sin”,f}]
输出[10]=

将网络预测的频率与地面实况进行比较:

在[11]中:=
ListLinePlot[<|“基本真理”->表[{t,f[t]},{t,0,1,.01}],“预测”->网络评估[a][“预测”]|>]
输出[11]=

净信息

检查网络中所有阵列的参数数量:

在[12]中:=
网络信息[NetModel[“单声道信号训练的CREPE基音检测网络\数据“],”ArraysElementCounts“]
输出[12]=

获取参数总数:

在[13]中:=
网络信息[NetModel[“单声道信号训练的CREPE基音检测网络\数据“],”ArraysTotalElementCount“]
输出[13]=

获取层类型计数:

在[14]中:=
网络信息[NetModel[“单声道信号训练的CREPE基音检测网络\数据“],”层类型计数“]
输出[14]=

显示主网络的摘要图形:

在[15]中:=
网络信息[NetModel[“单声道信号训练的CREPE基音检测网络\数据“][[”Net“]],”SummaryGraphic“]
输出[15]=

导出到MXNet

导出将网络转换为可在MXNet中打开的格式:

在[16]中:=
jsonPath=Export[FileNameJoin[{$TemporaryDirectory,“net.json”}],NetModel[“单声道信号训练的CREPE音高检测网络\数据“],”MXNet“]
输出[16]=

导出还创建了网络参数包含参数的文件:

在[17]中:=
paramPath=FileNameJoin[{DirectoryName[jsonPath],“net.params”}]
输出[17]=

获取参数文件的大小:

在[18]中:=
文件字节计数[paramPath]
退出[18]=

大小与资源对象的字节数类似:

在[19]中:=
资源对象[“基于单音信号训练的CREPE音调检测网络\数据“][”ByteCount“]
输出[19]=

将MXNet网络表示为图形:

在[20]中:=
导入[jsonPath,{“MXNet”,“NodeGraphPlot”}]
输出[20]=

资源历史记录

参考