主要内容

vggishFeatures

(待移除)提取VGGish特征

    vggishFeatures函数将在未来的版本中删除。使用vggishEmbeddings代替。有关更多信息,请参见兼容性的考虑

    描述

    例子

    嵌入的= vggishFeatures (audioInfs返回音频输入随时间变化的VGGish特征嵌入audioIn有抽样率fs.输入的列被视为单独的通道。

    例子

    嵌入的= vggishFeatures (audioInfs名称,值使用一个或多个选项指定选项名称,值参数。例如,embeddings = vggishFeatures(audioIn,fs,'ApplyPCA',true)将主成分分析(PCA)变换应用于音频嵌入。

    此功能需要音频工具箱™和深度学习工具箱™。

    例子

    全部折叠

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

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

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

    下载文件夹= fullfile(tempdir,“VGGishDownload”);loc = websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/vggish.zip”);VGGishLocation = tempdir;VGGishLocation解压(loc)目录(fullfile (VGGishLocation,“vggish”))

    读入音频文件。

    [audioIn,fs] = audioread(“MainStreetOne-16-16-mono-12secs.wav”);

    调用vggishFeatures函数结合音频和采样率,从音频中提取VGGish特征嵌入。

    featurevtors = vggishFeatures(audioIn,fs);

    vggishFeatures函数返回随时间变化的128个元素特征向量的矩阵。

    [numHops,numElementsPerHop,numChannels] = size(featurevators)
    numHops = 23
    numElementsPerHop = 128
    numChannels = 1

    创建一个10秒的粉色噪声信号,然后提取VGGish特征。的vggishFeatures函数从重叠50%的MEL谱图中提取特征。

    Fs = 16e3;Dur = 10;audioIn = pinknoise(dur*fs,1,“单一”);features = vggishFeatures(audioIn,fs);

    绘制随时间变化的VGGish特征。

    冲浪(特性,“EdgeColor”“没有”)视图([30 65])轴包含(“功能指数”) ylabel (“帧”)包含(“特征值”)标题(“VGGish特性”

    为了随着时间的推移增加VGGish特征的分辨率,指定mel光谱图之间的重叠百分比。画出结果。

    overlapPercentage =75;vggishFeatures(audioIn,fs,“OverlapPercentage”, overlapPercentage);冲浪(特性,“EdgeColor”“没有”)视图([30 65])轴包含(“功能指数”) ylabel (“帧”) zlabel (“特征值”)标题(“VGGish特性”

    读入音频文件,听它,然后从音频中提取VGGish特征。

    [audioIn,fs] = audioread(“Counting-16-44p1-mono-15secs.wav”);sound(audioIn,fs) features = vggishFeatures(audioIn,fs);

    随着时间的推移,可视化VGGish特性。许多单独的特征值为零,不包含有用的信息。

    冲浪(特性,“EdgeColor”“没有”)视图([90,-90])轴包含(“功能指数”) ylabel (“帧索引”)标题(“VGGish特性”

    您可以应用主成分分析(PCA)将特征向量映射到强调嵌入之间变化的空间中。调用vggishFeatures再次执行函数并指定ApplyPCA作为真正的.可视化PCA后的VGGish特征。

    vggishFeatures(audioIn,fs,“ApplyPCA”,真正的);冲浪(特性,“EdgeColor”“没有”)视图([90,-90])轴包含(“功能指数”) ylabel (“帧索引”)标题(“VGGish功能+ PCA”

    下载并解压缩空气压缩机数据集。此数据集由处于正常状态或处于七个故障状态之一的空气压缩机的记录组成。

    url =“//www.tatmou.com/金宝appsupportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip”;下载文件夹= fullfile(tempdir,“aircompressordataset”);datasetLocation = tempdir;如果~ (fullfile (tempdir,存在“AirCompressorDataSet”),“dir”) loc = websave(下载文件夹,url);解压缩(loc fullfile (tempdir“AirCompressorDataSet”))结束

    创建一个audioDatastore对象来管理数据并将其分割为训练集和验证集。

    ads = audioDatastore(下载文件夹,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);[adsTrain,adsValidation] = splitEachLabel(ads,0.8,0.2);

    从数据存储中读取音频文件并保存采样率以供以后使用。重置数据存储以将读指针返回到数据集的开头。听音频信号,并在时域中绘制信号。

    [x,fileInfo] = read(adsTrain);fs = fileInfo.SampleRate;reset(adsTrain) sound(x,fs) figure t = (0:size(x,1)-1)/fs;情节(t, x)包含(“时间(s)”)标题('State = '+ string(fileInfo.Label))轴

    从训练集和验证集中提取VGGish特征。变换特征,使时间沿着行。

    trainFeatures = cell(1,numel(adsTrain.Files));idx = 1:numel(adsTrain. files) [audioIn,fileInfo] = read(adsTrain);features = vggishFeatures(audioIn,fileInfo.SampleRate);trainFeatures{idx} = features';结束validationFeatures = cell(1,numel(adsValidation.Files));idx = 1:numel(adsValidation. files) [audioIn,fileInfo] = read(adsValidation);features = vggishFeatures(audioIn,fileInfo.SampleRate);validationFeatures{idx} = features';结束

    定义一个长短期记忆网络(深度学习工具箱)网络。

    层= [sequenceInputLayer(128) lstmLayer(100,“OutputMode”“最后一次”) fullyConnectedLayer(8) softmaxLayer classificationLayer];

    要定义培训选项,请使用trainingOptions(深度学习工具箱)

    miniBatchSize = 64;validationFrequency = 5*floor(nummel (trainFeatures)/miniBatchSize);选项= trainingOptions(“亚当”...“MaxEpochs”12...“MiniBatchSize”miniBatchSize,...“阴谋”“训练进步”...“洗牌”“every-epoch”...“LearnRateSchedule”“分段”...“LearnRateDropPeriod”6...“LearnRateDropFactor”, 0.1,...“ValidationData”, {validationFeatures adsValidation。标签},...“ValidationFrequency”validationFrequency,...“详细”、假);

    为了训练网络,使用trainNetwork(深度学习工具箱)

    net = trainNetwork(trainFeatures,adsTrain.Labels,layers,options)

    net = SeriesNetwork with properties: Layers: [5×1 nnet.cnn.layer.Layer] InputNames: {'sequenceinput'} OutputNames: {'classoutput'}

    可视化验证集的混淆矩阵。

    predictedClass = classification (net,validationFeatures);confusionchart (adsValidation.Labels predictedClass)

    下载并解压缩空气压缩机数据集[1].此数据集由处于正常状态或处于七个故障状态之一的空气压缩机的记录组成。

    url =“//www.tatmou.com/金宝appsupportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip”;下载文件夹= fullfile(tempdir,“aircompressordataset”);datasetLocation = tempdir;如果~ (fullfile (tempdir,存在“AirCompressorDataSet”),“dir”) loc = websave(下载文件夹,url);解压缩(loc fullfile (tempdir“AirCompressorDataSet”))结束

    创建一个audioDatastore对象来管理数据并将其分割为训练集和验证集。

    ads = audioDatastore(下载文件夹,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);

    在本例中,将信号分为健康信号和故障信号。将所有有问题的标签合并为一个标签。将数据存储分为训练集和验证集。

    标签= ads.Labels;标签(标签~ =分类(“健康”)) =绝对的(“错误”);ads.Labels = removecats(标签);[adsTrain,adsValidation] = splitEachLabel(ads,0.8,0.2);

    从训练集中提取VGGish特征。每个音频文件对应多个VGGish特性。复制标签,使它们与特征一一对应。

    trainFeatures = [];trainLabels = [];idx = 1:numel(adsTrain. files) [audioIn,fileInfo] = read(adsTrain);features = vggishFeatures(audioIn,fileInfo.SampleRate);trainFeatures = [trainFeatures;features];trainLabels = [trainLabels;repelem(fileInfo.Label,size(features,1))'];结束

    训练一个三次支持向量机(SV金宝appM)fitcsvm(统计和机器学习工具箱).要了解其他分类器及其性能,请使用分类学习者(统计和机器学习工具箱)

    faultDetector = fitcsvm(...trainFeatures,...trainLabels,...“KernelFunction”多项式的...“PolynomialOrder”3,...“KernelScale”“汽车”...“BoxConstraint”,1,...“标准化”,真的,...“类名”类别(trainLabels));

    对于验证集中的每个文件:

    1. 提取VGGish特征。

    2. 对于文件中的每个VGGish特征向量,使用训练过的分类器来预测机器是健康的还是故障的。

    3. 取每个文件的预测模式。

    预测= [];idx = 1:numel(adsValidation. files) [audioIn,fileInfo] = read(adsValidation);features = vggishFeatures(audioIn,fileInfo.SampleRate);predictionsPerFile = categorical(predict(faultDetector,features));预测=[预测;模式(predictionsPerFile)];结束

    使用confusionchart(统计和机器学习工具箱)显示分类器的性能。

    accuracy = sum(forecasts ==adsValidation.Labels)/numel(adsValidation.Labels);cc =混淆图表(预测,adsValidation.Labels);cc.Title = sprintf('精度= %0.2f %'、准确性* 100);

    参考文献

    [1]维尔马,尼什查尔·K.,拉胡尔·库马尔·塞瓦库拉,索纳尔·迪克西特,阿尔·萨鲁。2016。基于声学信号的空气压缩机智能状态监测IEEE可靠性汇刊65(1): 291-309。https://doi.org/10.1109/TR.2015.2459684。

    输入参数

    全部折叠

    输入信号,指定为列向量或矩阵。如果你指定一个矩阵,vggishFeatures将矩阵的列作为单独的音频通道。

    持续时间audioIn必须等于或大于0.975秒。

    数据类型:|

    输入信号的采样率(以Hz为单位),指定为正标量。

    数据类型:|

    名称-值参数

    指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

    在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

    例子:“OverlapPercentage”,75年

    连续音频帧之间的重叠百分比,指定为范围[0,100)中的标量。

    数据类型:|

    将PCA转换应用到音频嵌入的标志,指定为任意一个真正的

    数据类型:逻辑

    输出参数

    全部折叠

    音频数据的紧凑表示,返回为l由- - - - - - - 128N数组,地点:

    • l——表示音频信号被分割到的帧数。这是由OverlapPercentage

    • 128——表示音频嵌入长度。

    • N——表示通道的数量。

    算法

    全部折叠

    vggishFeatures函数使用VGGish从音频中提取特征嵌入。的vggishFeatures函数对音频进行预处理,使其符合VGGish要求的格式,并可选地对嵌入进行后处理。

    进行预处理

    1. 重新取样audioIn到16千赫,并铸造到单一精度。

    2. 计算单边短时傅里叶变换使用25 ms周期Hann窗口与10 ms跳,和512点DFT。音频现在由257 × -表示l数组,其中257是单向光谱中的箱数,和l取决于输入的长度。

    3. 将复杂光谱值转换为幅度并丢弃相位信息。

    4. 将单侧的幅度谱通过64带mel-spaced滤波器组,然后将每个波段的幅度相加。音频现在由单个64 × -表示l梅尔·声谱图。

    5. 将mel谱图转换为对数刻度。

    6. 将mel谱图缓冲为重叠的片段,每个片段由96个光谱组成。音频现在由96 × 64 × 1 × -表示K数组,其中96是单个mel谱图中的光谱数量,64是mel波段的数量,光谱图沿第四维间隔,以便与VGGish模型兼容。mel谱图的数量,K,取决于输入长度和OverlapPercentage

    特征提取

    传递96 × 64 × 1 × -K阵列的mel谱图通过VGGish返回一个K128年——矩阵。VGGish的输出是音频数据每0.975 s帧对应的特征嵌入。

    后处理

    如果ApplyPCA设置为真正的,特征嵌入进行后处理,以匹配已发布的AudioSet嵌入的后处理。VGGish模型与预先计算的主成分分析(PCA)矩阵和平均向量一起发布,在推理过程中应用PCA变换和美白。后处理包括PCA、增白、量化。

    1. 减去预先计算的1 × 128的PCA平均向量K- × 128的特征矩阵,然后将结果与预计算的128 × 128的PCA矩阵进行预乘。

    2. 将转换后和漂白后的嵌入剪辑到-2到2之间,然后将结果量化为可以由表示的值uint8

    参考文献

    [1] Gemmeke, Jort F., Daniel P. W. Ellis, Dylan Freedman, Aren Jansen, Wade Lawrence, R. Channing Moore, Manoj Plakal, Marvin Ritter。2017。音频集:音频事件的本体和人类标记数据集在2017 IEEE声学、语音和信号处理国际会议(ICASSP), 776 - 80。新奥尔良,洛杉矶:IEEE。https://doi.org/10.1109/ICASSP.2017.7952261。

    [2] Hershey, Shawn, Sourish Chaudhuri, Daniel P. W. Ellis, Jort F. Gemmeke, Aren Jansen, R. Channing Moore, Manoj Plakal,等2017。“大规模音频分类的CNN架构。”在2017 IEEE声学、语音和信号处理国际会议(ICASSP)131 - 35。新奥尔良,洛杉矶:IEEE。https://doi.org/10.1109/ICASSP.2017.7952132。

    扩展功能

    版本历史

    R2020b中介绍

    全部展开