主要内容

crepePostprocess

CREPE深度学习网络的后处理输出

    描述

    例子

    f0= crepePostprocess (激活对象的输出预训练网络以赫兹为单位估计音调。

    f0= crepePostprocess (激活“ConfidenceThreshold”TH将置信阈值指定为小于1的非负标量值。

    例如,f0 = crepePostprocess(激活,ConfidenceThreshold, 0.75)指定0.75的置信阈值。

    例子

    全部折叠

    下载并解压CREPE的Audio Toolbox™模型。

    类型在命令窗口。如果未安装CREPE的Audio Toolbox模型,则该函数提供指向网络权重位置的链接。要下载模型,请单击链接并将文件解压缩到MATLAB路径上的某个位置。

    或者,执行以下命令将CREPE模型下载并解压到临时目录。

    downloadFolder = fullfile (tempdir,“crepeDownload”);loc = websave (downloadFolder,“https://ssd.mathworks.com/supportfiles/audio/crepe.zip”);crepeLocation = tempdir;crepeLocation解压(loc)目录(fullfile (crepeLocation,“绉”))

    输入命令检查安装是否成功在命令窗口。如果网络已安装,则函数返回aDAGNetwork(深度学习工具箱)对象。

    ans = DAGNetwork属性:Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}

    加载预训练的CREPE卷积神经网络并检查层和类。

    使用加载预训练的CREPE网络。输出是一个DAGNetwork(深度学习工具箱)对象。

    网=绉
    net = DAGNetwork属性:Layers: [34×1 nnet.cnn.layer.Layer] Connections: [33×2 table] InputNames: {'input'} OutputNames: {'pitch'}

    查看网络架构财产。这个网络有34层。有13个具有可学习权值的层,其中6个是卷积层,6个是批处理归一化层,1个是完全连接层。

    网层
    ans = 34×1带有图层的图层数组:1' input' Image input 1024×1×1 images 2' conv1' Convolution 1024 512×1×1 convolutions with stride [4 1] and padding 'same' 3 'conv1_relu' ReLU 4 'conv1- bn ' Batch Normalization Batch Normalization with 1024通道5 'conv1-maxpool' Max Pooling 2×1 Max Pooling with stride [2 1] and padding [0 0 0 0 0] 6 'conv1- Dropout ' Dropout 25% Dropout 7 'conv2' Convolution 128 64×1×1024 convolutions with stride [1 1] and padding 'same' 8 'conv2_relu' ReLU ReLU 9 'conv2- bn ' Batch Normalization Batch正常化128个频道10“conv2-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]11的conv2-dropout辍学25%辍学12 conv3卷积128×64×128旋转步[1]和填充“相同”13”conv3_relu ReLU ReLU 14“conv3-BN”批量标准化批量标准化与128个频道15“conv3-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]16“conv3-dropout”辍学25%辍学17 conv4卷积12864×1×128 convolutions with stride[1 1]和padding 'same' 18 'conv4_relu' ReLU ReLU 19 'conv4-BN' Batch Normalization Batch Normalization with 128通道20 'conv4-maxpool'最大Pooling 2×1 Max Pooling with stride[2 1]和padding [0 0 0 0 0] 21 'conv4-dropout' Dropout 25% Dropout 22 'conv5' Convolution 256 64×1×128 convolutions with stride[1 1]和padding 'same' 23 'conv5_relu' ReLU ReLU 24 'conv5- bn ' Batch Normalization Batch Normalization with 256通道25 'conv5-maxpool'最大Pooling2×1马克斯池步(2 - 1)和填充[0 0 0 0]26“conv5-dropout”辍学25%辍学27 conv6卷积512 64×1×256旋转步[1]和填充“相同”28日的conv6_relu ReLU ReLU 29“conv6-BN”批量标准化批量正常化30 512个频道“conv6-maxpool”马克斯池2×1马克斯池步(2 - 1)和填充[0 0 0 0]31“conv6-dropout”辍学25%辍学32“分类”完全连接360完全连接层33 classifier_sigmoid乙状结肠sigmoid 34 'pitch'回归输出均方误差

    使用analyzeNetwork(深度学习工具箱)以可视化的方式探索网络。

    analyzeNetwork(净)

    networkAnalyzerCREPE.png

    CREPE网络要求您对音频信号进行预处理,以生成缓冲的、重叠的和规范化的音频帧,这些音频帧可以用作网络的输入。这个例子演示了使用crepePreprocess而音频后处理用的是基音估计crepePostprocess.的pitchnn函数为您执行这些步骤。

    读入音频信号进行音高估计。想象并听音频。音频片段中有9个声音。

    [audioIn, fs] = audioread (“SingingAMajor-16-mono-18secs.ogg”);sounddsc (audioIn,fs) T = 1/fs;t = 0: t:(长度(audioIn)* t) - t;情节(t, audioIn);网格包含(“时间(s)”) ylabel (“Ampltiude”)标题(《大调歌唱》

    使用crepePreprocess将音频划分为1024个样本帧,连续MEL谱图之间有85%的重叠。沿着第四维度放置框架。

    (框架,loc) = crepePreprocess (audioIn fs);

    创建一个CREPE网络ModelCapacity设置为.如果你叫在下载模型之前,一个错误被打印到带有下载链接的命令窗口中。

    netTiny =绉(“ModelCapacity”“小”);

    预测网络激活。

    activationsTiny =预测(netTiny、帧);

    使用crepePostprocess以产生以赫兹为单位的基频距估计。通过设置禁用置信度阈值ConfidenceThreshold0

    f0Tiny = crepePostprocess (activationsTiny,“ConfidenceThreshold”, 0);

    随着时间的推移,可视化音高估计。

    情节(loc f0Tiny)网格包含(“时间(s)”) ylabel (“音高估计(Hz)”)标题('CREPE网络频率估计-阈值设置已禁用'

    禁用了置信度阈值后,crepePostprocess为每一帧提供一个音高估计。增加了ConfidenceThreshold0.8

    f0Tiny = crepePostprocess (activationsTiny,“ConfidenceThreshold”, 0.8);

    随着时间的推移,可视化音高估计。

    情节(loc f0Tiny,“线宽”3)网格包含(“时间(s)”) ylabel (“音高估计(Hz)”)标题('CREPE网络频率估计-启用阈值'

    创建一个新的CREPE网络ModelCapacity设置为完整的

    netFull =绉(“ModelCapacity”“全部”);

    预测网络激活。

    activationsFull =预测(netFull、帧);f0Full = crepePostprocess (activationsFull,“ConfidenceThreshold”, 0.8);

    可视化音高估计。有九个主要的音高估计组,每一组对应于九个发声中的一个。

    情节(loc f0Full,“线宽”3)网格包含(“时间(s)”) ylabel (“音高估计(Hz)”)标题(“CREPE网络频率估计-全部”

    找出与最后一个发音相对应的时间元素。

    roundedLocVec =圆(loc), 2);lastUtteranceBegin = find(roundedLocVec == 16);lastUtteranceEnd = find(roundedLocVec == 18);

    为简单起见,我们将发声组中最频繁出现的音高估计作为该时间跨度的基本频率估计。生成一个纯音调,其频率与最后一次发声的音高估计相匹配。

    lastUtteranceEstimation =模式(f0Full (lastUtteranceBegin: lastUtteranceEnd))
    lastUtteranceEstimation =217.2709

    的值lastUtteranceEstimate217.3赫兹。对应于注释A3。把合成的音调叠加在最后一个发声的声音上,以便在声音上比较两者。

    lastVocalUtterance = audioIn (fs * 16: fs * 18);新时期= 0:T: 2;compareTone = cos(2 *π* lastUtteranceEstimation *新时期)。”;soundsc (lastVocalUtterance + compareTone, fs);

    调用光谱图更仔细地检查歌唱的频率内容。使用的帧大小为250样本和重叠的225样品或90%。使用4096DFT点进行变换。的光谱图揭示了声乐录音实际上是由多个频率组成的一组复杂的谐音。

    光谱图(fs audioIn, 250225年,4096年,“桠溪”

    输入参数

    全部折叠

    生成的音频帧预先训练的网络,指定为N——- - - - - -360矩阵,N生成的帧数。

    数据类型:|

    的每个值的置信阈值f0,指定为逗号分隔的对,由“ConfidenceThreshold”和一个范围为[0,1)的标量。

    若要禁用阈值设置,请设置TH0

    请注意

    对应的最大值激活向量小于THf0

    数据类型:|

    输出参数

    全部折叠

    估计基频,单位为赫兹,返回为N——- - - - - -1向量,N生成的帧数。

    数据类型:

    参考文献

    [1]金,钟旭,贾斯汀·萨拉蒙,彼得·李,胡安·巴勃罗·贝罗。《可绉:音调估计的卷积表示》在2018 IEEE声学、语音和信号处理国际会议(ICASSP), 161 - 65。卡尔加里,AB: IEEE, 2018。https://doi.org/10.1109/ICASSP.2018.8461329。

    扩展功能

    C / c++代码生成
    使用MATLAB®Coder™生成C和c++代码。

    版本历史

    介绍了R2021a

    另请参阅

    ||

    Baidu
    map