VGGish神经网络
下载并解压缩音频工具箱™ VGISH的模型。
类型vggish
在命令窗口。如果没有安装VGGish的Audio Toolbox模型,那么该函数将提供到网络权重位置的链接。要下载模型,请单击链接。解压文件到MATLAB路径上的一个位置。
或者,执行这些命令下载VGISH模型并将其解压缩到临时目录中。
downloadFolder = fullfile (tempdir,“VGGishDownload”); loc=websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/vggish.zip”);VGGishLocation = tempdir;VGGishLocation解压(loc)目录(fullfile (VGGishLocation,“vggish”))
输入以下命令,检查安装是否成功vggish
在命令窗口。如果网络已安装,则该函数返回aSeriesNetwork
(深度学习工具箱)对象
vggish
ans=具有以下属性的系列网络:层:[24×1 nnet.cnn.layer.layer]输入名称:{'InputBatch'}输出名称:{'regressionoutput'}
加载一个预训练的VGISH卷积神经网络并检查层和类。
使用vggish
加载预训练的VGISH网络。输出网
是一个SeriesNetwork
(深度学习工具箱)对象
净=vggish
[24×1 nnet.cnn.layer.Layer] InputNames: {'InputBatch'} OutputNames: {'regressionoutput'}
使用查看网络体系结构层
属性。网络有24层。有9层具有可学习的权重,其中6层为卷积层,3层为完全连接层。
网。层
ans=24×1带层的层阵列:1“InputBatch”图像输入96×64×1图像2“conv1”卷积64 3×3×1带跨距卷积[1]和填充“相同的”3“relu”relu 4“pool1”最大池2×2最大池带跨距卷积[2]和填充“相同的”5“conv2”卷积128 3×3×64带跨距卷积[1]和填充“相同的”6“relu2”ReLU ReLU 7“pool2”Max pool 2×2 Max pool with stride[2],填充“相同的”8“conv3_1”卷积256 3×3×128卷积with stride[1],填充“相同的”9“relu3_1”ReLU 10“conv3_2”卷积256 3×3×256卷积with stride[1]和填充'same'11'relu3_2'ReLU ReLU 12'pool3'Max pool 2×2 Max pool with stride[2],填充'same'13'conv4_1'卷积512 3×3×256卷积with stride[1],填充'same'14'relu4_1'ReLU 15'conv4_2'卷积512 3×3×512卷积with stride[1]和填充'same'16'relu4_2'ReLU ReLU 17'pool4'最大池2×2最大池与步幅[2]和填充“相同”18“fc1_1”完全连接4096完全连接层19“relu5_1”ReLU ReLU 20“fc1_2”完全连接4096完全连接层21“relu5_2”ReLU ReLU 22“fc2”完全连接128完全连接层23“嵌入批处理”ReLU ReLU 24“回归输出”回归输出均方误差
使用分析网络
(深度学习工具箱)以可视化方式浏览网络。
分析网络(net)
VGGish网络要求您通过将音频信号转换为网络训练的采样率,然后提取对数mel谱图,来预处理和提取音频信号的特征。本例将介绍所需的预处理和特征提取,以匹配用于训练VGISH的预处理和特征提取。这个VGISH特性
函数为您执行这些步骤。
读入音频信号进行分类。将音频信号重新采样至16 kHz,然后将其转换为单精度。
[audioIn, fs0] = audioread (“Ambiance-16-44p1-mono-12secs.wav”);fs = 16 e3;audioIn =重新取样(fs, audioIn fs0);audioIn =单(audioIn);
定义mel谱图参数,然后利用该方法提取特征光谱图
函数。
FFTLength=512;numBands=64;频率范围=[125 7500];窗长=0.025*fs;重叠长度=0.015*fs;melSpect=melSpectrogram(音频输入,fs,...“窗口”,hann(窗长,“周期”),...“重叠长度”overlapLength,...“FFTLength”,fft长度,...“FrequencyRange”,频率范围,...“NumBands”numBands,...“过滤器组规范化”,“没有”,...“窗口规范化”错误的...“光谱类型”,“震级”,...“FilterBankDesignDomain”,“扭曲”);
转换mel谱图到对数尺度。
melSpect=log(melSpect+单个(0.001));
重新调整mel光谱图的方向,使时间沿第一维度成行。
melSpect=melSpect.;[numsftftwindows,numBands]=大小(melSpect)
numsftwindows=1222
numBands=64
将光谱图分成96帧,重叠48帧。沿第四维放置这些帧。
frameWindowLength=96;frameOverlapLength=48;hopLength=frameWindowLength-frameOverlapLength;numHops=floor((numSTFTWindows-frameWindowLength)/hopLength)+1;frames=0(frameWindowLength,NumHands,1,numHops,“喜欢”, melSpect);为hop = 1:numHops range = 1 + hopLength*(hop-1):hopLength*(hop -1) + frameWindowLength;跳帧(::1)= melSpect(范围:);结束
创建VGGish网络。
净=vggish;
呼叫预测
从谱图图像中提取特征嵌入。特征嵌入被返回为numFrames
128年——矩阵,numFrames
是单个光谱图的数量,128是每个特征向量中的元素数量。
特征=预测(净,帧);[numFrames,numFeatures]=大小(特征)
numFrames=24
numFeatures=128
比较mel频谱图和VGGish特征嵌入的可视化效果。
melSpectrogram (audioIn fs,...“窗口”,hann(窗长,“周期”),...“重叠长度”overlapLength,...“FFTLength”,fft长度,...“FrequencyRange”,频率范围,...“NumBands”numBands,...“过滤器组规范化”,“没有”,...“窗口规范化”错误的...“光谱类型”,“震级”,...“FilterBankDesignDomain”,“扭曲”);
冲浪(特性,“EdgeColor”,“没有”)视图([90,-90])轴([1 numFeatures 1 numFrames]) xlabel(“功能”)伊拉贝尔(“帧”)标题(“VGGish功能嵌入”)
在本例中,您将VGGish回归模型中的学习转移到音频分类任务中。
下载并解压环境声音分类数据集。该数据集由标记为10个不同音频声音类(ESC-10)之一的录音组成。
url ='http://ssd.mathworks.com/金宝appsupportfiles/audio/ESC-10.zip';downloadFolder = fullfile (tempdir,“ESC-10”);datasetLocation=tempdir;如果~ (fullfile (tempdir,存在“ESC-10”),“dir”) loc = websave(downloadFolder,url);解压缩(loc fullfile (tempdir“ESC-10”))结束
创建一个audioDatastore
对象来管理数据并将其拆分为训练集和验证集。调用计数标签
显示声音类别的分布和唯一标签的数量。
广告= audioDatastore (downloadFolder,“包含子文件夹”符合事实的“标签源”,“foldernames”); labelTable=countEachLabel(ads)
易变的=10×2表标签数______________ _____链锯40时钟40噼啪火40哭泣的婴儿40狗40直升机40雨40公鸡38海浪40打喷嚏40
确定类的总数。
numClasses=尺寸(可标签,1);
呼叫splitEachLabel
将数据集分割为训练集和验证集。检查培训和验证集中标签的分发情况。
[adsTrain,adsValidation]=拆分每个标签(ads,0.8);计数每个标签(adsTrain)
ans=10×2表标签数______________ _____链锯32 clock_tick 32 crackling_fire 32啼哭的婴儿32狗32直升机32雨32公鸡30海浪32打喷嚏32
countEachLabel(adsValidation)
ans=10×2表标签数______________ _____链锯8发条8噼啪8火8啼哭8婴儿8狗8直升机8雨8公鸡8海浪8打喷嚏8
VGISH网络希望将音频预处理为对数mel频谱图。支持功能金宝appvggishPreprocess
需要audioDatastore
对象和logmel谱图的重叠百分比作为输入,并返回适合作为VGGish网络输入的预测器和响应矩阵。
重叠百分比=75;[trainFeatures,trainLabels]=vggishPreprocess(adsTrain,重叠百分比);[validationFeatures,validationLabels,segmentsPerFile]=vggishPreprocess(adsValidation,重叠百分比);
加载VGISH模型并将其转换为分层图
(深度学习工具箱)对象
net=vggish;lgraph=layerGraph(net.Layers);
使用搬运工
(深度学习工具箱)将最终的回归输出层从图中移除。在移除回归层之后,图的最后一层是一个名为ReLU的层“EmbeddingBatch”
.
lgraph=拆除层(lgraph,“regressionoutput”); lgraph.Layers(结束)
ans = ReLULayer with properties: Name: ' embedingbatch '
使用添加层
(深度学习工具箱)添加fullyConnectedLayer
(深度学习工具箱)A.软MaxLayer
(深度学习工具箱)和一个分类层
(深度学习工具箱)图。
lgraph=addLayers(lgraph,fullyConnectedLayer(numclass,“名字”,“FCFinal”));lgraph = addLayers (lgraph softmaxLayer (“名字”,“softmax”)); lgraph=添加层(lgraph,classificationLayer(“名字”,“退出”));
使用连接层
(深度学习工具箱)将完全连接的图层、softmax图层和分类图层附加到图层图中。
lgraph = connectLayers (lgraph,“EmbeddingBatch”,“FCFinal”);lgraph = connectLayers (lgraph,“FCFinal”,“softmax”);lgraph = connectLayers (lgraph,“softmax”,“退出”);
要定义培训选项,请使用培训选项
(深度学习工具箱).
miniBatchSize=128;选项=培训选项(“亚当”,...“MaxEpochs”5,...“MiniBatchSize”,小批量,...“洗牌”,“每个时代”,...“验证数据”{validationFeatures, validationLabels},...“验证频率”, 50岁,...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”,0.5,...“LearnRateDropPeriod”2);
要训练网络,使用trainNetwork
(深度学习工具箱).
[trainedNet, netInfo] = trainNetwork(trainFeatures,trainLabels,lgraph,options);
单GPU训练。|======================================================================================================================| | 时代| |迭代时间| Mini-batch | |验证Mini-batch | |验证基地学习 | | | | ( hh: mm: ss) | | |精度精度损失| | |率损失|======================================================================================================================| | 1 | 1 |就是| | 10.94% 26.03% | 2.2253 | 2.0317 | 0.0010 | | 2 | 50 | 00:00:05 | | 93.75% 83.75% | 0.1884 | 0.7001 | 0.0010 | | 3 | 100 | 00:00:10 | | 96.88% 80.07% | 0.1150 | 0.7838 | 0.0005 | | 150 | | 00:00:15 |92.97% | 81.99% | 0.1656 | 0.7612 | 0.0005 | | 200 | | 00:00:20 | | 92.19% 79.04% | 0.1738 | 0.8192 | 0.0003 | | 210 | | 00:00:21 95.31% | | | 0.1389 | 0.8581 | 0.0003 80.15% | |======================================================================================================================|
每个音频文件被分成若干段,以馈送到VGISH网络。使用多数规则决策组合验证集中每个文件的预测。
validationPredictions=分类(trainedNet、validationFeatures);idx=1;validationPredictionsPerFile=分类的;为ii=1:numel(adsvalization.Files)validationpredictionperfile(ii,1)=模式(validationPredictions(idx:idx+segmentsPerFile(ii)-1));idx=idx+segmentsPerFile(ii);结束
使用混淆图
(深度学习工具箱)评估网络在验证集上的性能。
图(“单位”,“归一化”,“位置”,[0.2 0.2 0.5 0.5]);厘米= confusionchart (adsValidation.Labels validationPredictionsPerFile);厘米。标题= sprintf ('验证数据混淆矩阵\nAccuracy = %0.2f %%',平均值(validationPredictionsPerFile==adsValidation.Labels)*100);厘米=“column-normalized”;厘米。RowSummary =“row-normalized”;
金宝app辅助功能
作用[predictor,response,segmentsPerFile]=vggishPreprocess(ads,重叠)%此功能仅用于示例目的,可以更改或删除%在未来的版本中。创建过滤器组FFTLength = 512;numBands = 64;fs0 = 16 e3;filterBank = designAuditoryFilterBank (fs0,...“FrequencyScale”,“梅尔”,...“FFTLength”,fft长度,...“FrequencyRange”(125 7500),...“NumBands”numBands,...“正常化”,“没有”,...“FilterBankDesignDomain”,“扭曲”);%定义STFT参数窗长=0.025*fs0;hopLength=0.01*fs0;win=hann(窗长,“周期”);%定义谱图分割参数segmentDuration = 0.96;%秒segmentRate = 100;%赫兹segmentLength = segmentDuration * segmentRate;%每个听觉频谱图的频谱数分段持续时间=(100次重叠)*分段持续时间/100;%听觉频谱图之间的持续时间提前segmentHopLength=圆形(segmentHopDuration*segmentRate);%在听觉光谱图之间先进的光谱数量%预先分配预测器和响应的单元阵列numFiles =元素个数(ads.Files);预测=细胞(numFiles, 1);响应=预测;segmentsPerFile = 0 (numFiles, 1);提取每个文件的预测器和响应为ii=1:numFiles[audioIn,info]=read(ads);x=single(重采样(audioIn,fs0,info.SampleRate));Y=stft(x,...“窗口”,赢了,...“重叠长度”windowLength-hopLength,...“FFTLength”,fft长度,...“FrequencyRange”,“片面的”)Y=abs(Y);对数谱图=log(滤波器组*Y+单个(0.01));%段log-mel谱图numHops = floor((size(Y,2)-segmentLength)/segmentHopLength) + 1;segmentedLogMelSpectrogram = 0 (segmentLength numBands 1, numHops);为hop=1:numHops分段对数谱图(:,:,1,hop)=对数谱图(1+分段hopLength*(hop-1):分段长度+分段hopLength*(hop-1),:);结束预测器{ii}=分段对数谱图;响应{ii}=重复(信息标签,numHops);分段谱文件(ii)=numHops;结束%将预测器和响应连接到数组中预测预测=猫(4日{:});响应=猫(2、响应{:});结束
网
-预训练的VGGish神经网络SeriesNetwork
对象预训练的VGGish神经网络,返回为SeriesNetwork
(深度学习工具箱)对象
[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.
Hershey, Shawn, Sourish Chaudhuri, Daniel P. W. Ellis, Jort F. Gemmeke, Aren Jansen, R. Channing Moore, Manoj Plakal, et al. 2017。CNN大规模音频分类架构在2017年IEEE声学、语音和信号处理国际会议(ICASSP),131–35。新奥尔良,洛杉矶:IEEE。https://doi.org/10.1109/ICASSP.2017.7952132.
使用说明和限制:
只有激活
和预测
支持对象函数。金宝app
创建SeriesNetwork
对象用于代码生成,请参见用于代码生成的负载预训练网络(MATLAB编码器).
使用说明和限制:
只有激活
,分类
,预测
,预测和更新房地产
和resetState
支持对象函数。金宝app
创建SeriesNetwork
对象用于代码生成,请参见用于代码生成的负载预训练网络(GPU编码器).
与MATLAB公司通信的客户:
在介绍MATLAB公司的情况下,纳维加多尔网站并不赞赏MATLAB公司。
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。