主要内容

vggishEmbeddings

提取VGGish特征嵌入

    描述

    例子

    嵌入的= vggishEmbeddings (audioInfs返回音频输入的VGGish特征随时间的嵌入audioIn与采样率fs.输入的列被视为单独的通道。

    例子

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

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

    例子

    全部折叠

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

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

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

    downloadFolder = fullfile (tempdir,“VGGishDownload”);loc = websave (downloadFolder,“https://ssd.mathworks.com/supportfiles/audio/vggish.zip”);VGGishLocation = tempdir;VGGishLocation解压(loc)目录(fullfile (VGGishLocation,“vggish”))

    读一个音频文件。

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

    调用vggishEmbeddings函数,从音频中提取VGGish特征嵌入。使用vggishEmbeddings功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。

    嵌入= vggishEmbeddings (audioIn, fs);

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

    [numHops, numElementsPerHop numChannels] =大小(嵌入)
    numHops = 23
    numElementsPerHop = 128
    numChannels = 1

    创建一个10秒的粉色噪声信号,然后提取VGGish嵌入。的vggishEmbeddings函数从重叠50%的MEL谱图中提取特征嵌入。使用vggishEmbeddings功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。

    fs = 16 e3;大调的= 10;audioIn = pinknoise(大调的* fs, 1“单身”);嵌入= vggishEmbeddings (audioIn, fs);

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

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

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

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

    读入一个音频文件,听它,然后从音频中提取VGGish特征嵌入。使用vggishEmbeddings功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。

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

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

    冲浪(嵌入EdgeColor =“没有”)视图((90、-90))轴包含(“功能指数”) ylabel (“帧索引”)标题(“VGGish功能嵌入”

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

    嵌入= vggishEmbeddings (fs, audioIn ApplyPCA = true);冲浪(嵌入EdgeColor =“没有”)视图((90、-90))轴包含(“功能指数”) ylabel (“帧索引”)标题(“VGGish特征+ PCA”

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

    zipFile = matlab.internal.examples.downloadSupportFile (“音频”...“AirCompressorDataset / AirCompressorDataset.zip”);unzip(zipFile,tempdir) dataLocation = fullfile(tempdir,“AirCompressorDataset”);

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

    广告= audioDatastore (dataLocation IncludeSubfolders = true,...LabelSource =“foldernames”);[adsTrain, adsValidation] = splitEachLabel(广告,0.8);

    从数据存储中读取一个音频文件。重置数据存储以返回指向数据集开头的读指针。听音频信号,并在时域绘制信号。

    [x, fileInfo] =阅读(adsTrain);fs = fileInfo.SampleRate;set(adsTrain) sound(x,fs) figure t = (0:size(x,1)-1)/fs;情节(t, x)包含(“时间(s)”)标题(“国家= "+字符串(fileInfo.Label)轴

    图中包含一个axes对象。标题State = Bearing的axis对象包含一个类型为line的对象。

    从训练集和验证集中提取VGGish特征嵌入。使用vggishEmbeddings功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。每个音频文件都有多个嵌入向量。复制标签,使它们与嵌入向量一一对应。

    trainFeatures = [];trainLabels = [];hasdata(adsTrain) [audioIn,fileInfo] = read(adsTrain);= vggishEmbeddings (audioIn, fileInfo特性。SampleRate,...OverlapPercentage = 75);numFeatureVecs =大小(功能,1);trainFeatures =猫(1 trainFeatures功能);trainLabels =猫(1 trainLabels repelem (fileInfo.Label numFeatureVecs) ');结束validationFeatures = [];validationLabels = [];segmentsPerFile = 0 (numel(adsValidation.Files), 1);idx = 1;hasdata(adsValidation) [audioIn,fileInfo] = read(adsValidation);= vggishEmbeddings (audioIn, fileInfo特性。SampleRate,...OverlapPercentage = 75);numFeatureVecs =大小(功能,1);validationFeatures =猫(1 validationFeatures功能);validationLabels validationLabels =猫(1,...repelem (fileInfo.Label numFeatureVecs) ');segmentsPerFile (idx) = numFeatureVecs;Idx = Idx + 1;结束

    定义一个具有两个完全连接层的简单网络。

    layers = [featureInputLayer(128) fullyConnectedLayer(32) reluLayer fullyConnectedLayer(8) softmaxLayer classificationLayer];

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

    miniBatchSize = 128;选择= trainingOptions (“亚当”...MaxEpochs = 20,...MiniBatchSize = MiniBatchSize,...洗牌=“every-epoch”...ValidationData = {validationFeatures, validationLabels},...ValidationFrequency = 50,...情节=“训练进步”...Verbose = false);

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

    网= trainNetwork (trainFeatures、trainLabels层,选项)

    {

    layer: [6×1 nnet.cnn.layer.Layer] InputNames: {'input'} OutputNames: {'classoutput'}

    每个音频文件被分割成几个片段,以输入网络。使用多数原则决策将验证集中每个文件的预测结合起来。

    validationPredictions =分类(净,validationFeatures);idx = 1;validationPredictionsPerFile =分类;ii = 1:numel(adsValidation.Files) validationPredictionsPerFile(ii,1) =...模式(validationPredictions (idx: idx + segmentsPerFile (ii) 1));idx = idx + segmentsPerFile(ii);结束

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

    图confusionchart (adsValidation。标签,validationPredictionsPerFile,...标题= sprintf ("验证数据混淆矩阵\nAccuracy = %0.2f %%"...意思是(validationPredictionsPerFile = = adsValidation.Labels) * 100))

    MATLAB图

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

    datasetZipFile = matlab.internal.examples.downloadSupportFile (“音频”“AirCompressorDataset / AirCompressorDataset.zip”);datasetFolder = fullfile (fileparts (datasetZipFile),“AirCompressorDataset”);如果~存在(datasetFolder“dir”)解压缩(datasetZipFile fileparts (datasetZipFile));结束

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

    广告= audioDatastore (datasetFolder IncludeSubfolders = true, LabelSource =“foldernames”);

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

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

    从训练集中提取VGGish特征嵌入。每个音频文件对应多个VGGish特性。复制标签,使它们与特性一一对应。使用vggishEmbeddings功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。

    trainFeatures = [];trainLabels = [];idx = 1:numel(adsTrain. files) [audioIn,fileInfo] = read(adsTrain);嵌入= vggishEmbeddings (audioIn fileInfo.SampleRate);trainFeatures = (trainFeatures;嵌入的);trainLabels = [trainLabels; repelem (fileInfo.Label大小(嵌入的,1))');结束

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

    faultDetector = fitcsvm (...trainFeatures,...trainLabels,...KernelFunction =“多项式”...PolynomialOrder = 3,...KernelScale =“汽车”...BoxConstraint = 1,...规范= true,...一会=类别(trainLabels));

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

    1. 提取VGGish特征嵌入。

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

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

    预测= [];idx = 1:numel(adsValidation. files) [audioIn,fileInfo] = read(adsValidation);嵌入= vggishEmbeddings (audioIn fileInfo.SampleRate);predictionsPerFile =分类(预测(faultDetector,嵌入的));预测=[预测;模式(predictionsPerFile)];结束

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

    精度= = = adsValidation.Labels(预测)和/元素个数(adsValidation.Labels);cc = confusionchart(预测,adsValidation.Labels);cc.Title = sprintf (“准确度= %0.2f %”、准确性* 100);

    参考文献

    [1] Verma, Nishchal K., Rahul Kumar Sevakula, Sonal Dixit和Al Salour. 2016。基于声学信号的空压机智能状态监测IEEE可靠性汇刊65(1): 291 - 309。https://doi.org/10.1109/TR.2015.2459684。

    输入参数

    全部折叠

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

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

    数据类型:|

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

    数据类型:|

    名称-值参数

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

    在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

    例子:OverlapPercentage = 75

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

    数据类型:|

    标志将PCA转换应用于音频嵌入,指定为真正的

    数据类型:逻辑

    输出参数

    全部折叠

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

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

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

    • N——表示通道数。

    算法

    全部折叠

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

    进行预处理

    1. 重新取样audioIn到16khz和铸造到单一精度。

    2. 使用具有10毫秒跳的25毫秒周期汉恩窗和512点DFT计算单侧短时傅里叶变换。音频现在用257by -表示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通过VGGish的mel谱图数组返回一个K128年——矩阵。VGGish的输出是对应于每一帧0.975 s音频数据的特征嵌入。

    后处理

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

    1. 减去预先计算的1 × 128 PCA平均向量K-128 × 128的主成分分析矩阵,然后用预先计算的128 × 128的主成分分析矩阵对结果进行预乘。

    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声学、语音和信号处理国际会议, 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声学、语音和信号处理国际会议131 - 35。新奥尔良,洛杉矶:IEEE。https://doi.org/10.1109/ICASSP.2017.7952132。

    扩展功能

    版本历史

    介绍了R2022a

    Baidu
    map