vggishFeatures
(待移除)提取VGGish特征
的vggishFeatures
函数将在未来的版本中删除。使用vggishEmbeddings
代替。有关更多信息,请参见兼容性的考虑.
描述
例子
下载vggishFeatures
功能
下载并解压缩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”))
提取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
提高VGGish特征的时间分辨率
创建一个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嵌入中的应用
读入音频文件,听它,然后从音频中提取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”)
使用VGGish Embeddings进行深度学习
下载并解压缩空气压缩机数据集。此数据集由处于正常状态或处于七个故障状态之一的空气压缩机的记录组成。
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)
使用VGGish Embeddings进行机器学习
下载并解压缩空气压缩机数据集[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));
对于验证集中的每个文件:
提取VGGish特征。
对于文件中的每个VGGish特征向量,使用训练过的分类器来预测机器是健康的还是故障的。
取每个文件的预测模式。
预测= [];为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。
输入参数
audioIn
- - - - - -输入信号
列向量|矩阵
输入信号,指定为列向量或矩阵。如果你指定一个矩阵,vggishFeatures
将矩阵的列作为单独的音频通道。
持续时间audioIn
必须等于或大于0.975秒。
数据类型:单
|双
fs
- - - - - -采样率(Hz)
积极的标量
输入信号的采样率(以Hz为单位),指定为正标量。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“OverlapPercentage”,75年
OverlapPercentage
- - - - - -连续音频帧之间的重叠百分比
50
(默认)|范围[0,100)中的标量
连续音频帧之间的重叠百分比,指定为范围[0,100)中的标量。
数据类型:单
|双
ApplyPCA
- - - - - -标志应用PCA转换到音频嵌入
假
(默认)|真正的
将PCA转换应用到音频嵌入的标志,指定为任意一个真正的
或假
.
数据类型:逻辑
输出参数
嵌入的
-音频数据的紧凑表示
l由- - - - - - - 128N数组
音频数据的紧凑表示,返回为l由- - - - - - - 128N数组,地点:
l——表示音频信号被分割到的帧数。这是由
OverlapPercentage
.128——表示音频嵌入长度。
N——表示通道的数量。
算法
的vggishFeatures
函数使用VGGish从音频中提取特征嵌入。的vggishFeatures
函数对音频进行预处理,使其符合VGGish要求的格式,并可选地对嵌入进行后处理。
进行预处理
重新取样
audioIn
到16千赫,并铸造到单一精度。计算单边短时傅里叶变换使用25 ms周期Hann窗口与10 ms跳,和512点DFT。音频现在由257 × -表示l数组,其中257是单向光谱中的箱数,和l取决于输入的长度。
将复杂光谱值转换为幅度并丢弃相位信息。
将单侧的幅度谱通过64带mel-spaced滤波器组,然后将每个波段的幅度相加。音频现在由单个64 × -表示l梅尔·声谱图。
将mel谱图转换为对数刻度。
将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 × 128的PCA平均向量K- × 128的特征矩阵,然后将结果与预计算的128 × 128的PCA矩阵进行预乘。
将转换后和漂白后的嵌入剪辑到-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。
扩展功能
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
本功能完全支持GPU阵列。金宝app有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
R2020b中介绍R2022a:vggishFeatures
将被移除
的vggishFeatures
函数将在未来的版本中删除。使用vggishEmbeddings
代替。现有的对vggishFeatures
继续跑。
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。