vggishEmbeddings
提取VGGish特征嵌入
描述
例子
下载vggishEmbeddings
功能
下载并解压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”))
提取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
提高VGGish嵌入的时间分辨率
创建一个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嵌入中的应用
读入一个音频文件,听它,然后从音频中提取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”)
使用VGGish嵌入进行深度学习
下载并解压空压机数据集。该数据集由空气压缩机处于正常状态或处于七个故障状态之一的记录组成。
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)轴紧
从训练集和验证集中提取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))
在机器学习中使用VGGish嵌入
下载并解压空压机数据集[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));
对于验证集中的每个文件:
提取VGGish特征嵌入。
对于文件中的每个VGGish特征向量,使用经过训练的分类器来预测机器是正常的还是故障的。
取每个文件的预测模式。
预测= [];为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。
输入参数
audioIn
- - - - - -输入信号
列向量|矩阵
输入信号,指定为列向量或矩阵。如果你指定一个矩阵,vggishEmbeddings
将矩阵的列视为单独的音频通道。
的持续时间audioIn
必须等于或大于0.975秒。
数据类型:单
|双
fs
- - - - - -采样率(赫兹)
积极的标量
输入信号的采样率(以Hz为单位),指定为正标量。
数据类型:单
|双
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:OverlapPercentage = 75
OverlapPercentage
- - - - - -连续音频帧之间的重叠百分比
50
(默认)|[0,100)范围内的标量
连续音频帧之间的重叠百分比,指定为范围[0,100)中的标量。
数据类型:单
|双
ApplyPCA
- - - - - -标志,将PCA转换应用于音频嵌入
假
(默认)|真正的
标志将PCA转换应用于音频嵌入,指定为真正的
或假
.
数据类型:逻辑
输出参数
嵌入的
-音频数据的紧凑表示
l由- - - - - - - 128N数组
音频数据的紧凑表示形式,返回为l由- - - - - - - 128N数组,地点:
l——表示音频信号被分割成的帧数。这是由
OverlapPercentage
.128——表示音频嵌入长度。
N——表示通道数。
算法
的vggishEmbeddings
函数使用VGGish从音频中提取特征嵌入。的vggishEmbeddings
函数对音频进行预处理,使其符合VGGish所需的格式,并可选地对嵌入进行后处理。
进行预处理
重新取样
audioIn
到16khz和铸造到单一精度。使用具有10毫秒跳的25毫秒周期汉恩窗和512点DFT计算单侧短时傅里叶变换。音频现在用257by -表示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通过VGGish的mel谱图数组返回一个K128年——矩阵。VGGish的输出是对应于每一帧0.975 s音频数据的特征嵌入。
后处理
如果ApplyPCA
被设置为真正的
,对特征嵌入进行后处理,以匹配发布的AudioSet嵌入的后处理。VGGish模型采用预先计算的主成分分析(PCA)矩阵和平均向量,在推理过程中进行PCA变换和增白。后处理包括应用PCA、增白和量化。
减去预先计算的1 × 128 PCA平均向量K-128 × 128的主成分分析矩阵,然后用预先计算的128 × 128的主成分分析矩阵对结果进行预乘。
将转换后的和增白的嵌入剪辑到-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。
扩展功能
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
该功能完全支持GPU阵列。有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
介绍了R2022a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。