vggish
VGGish神经网络
语法
描述
例子
下载VGGish网络
下载并解压VGGish的Audio Toolbox™模型。
类型vggish
在命令窗口。如果未安装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
在命令窗口。如果网络已安装,则函数返回aSeriesNetwork
(深度学习工具箱)对象。
vggish
ans =带有属性的SeriesNetwork: Layers: [24×1 nnet.cnn.layer.Layer] InputNames: {'InputBatch'} OutputNames: {'regressionoutput'}
加载预训练的VGGish网络
加载一个预先训练的VGGish卷积神经网络,并检查层和类。
使用vggish
加载预先训练的VGGish网络。输出网
是一个SeriesNetwork
(深度学习工具箱)对象。
网= vggish
net = SeriesNetwork属性:Layers: [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 relu 4“pool1”马克斯池2×2马克斯池步(2 - 2)和填充“相同”5 conv2卷积128 3×3×64旋转步[1]和填充“相同”6“relu2”relu relu 7“pool2”马克斯池2×2马克斯池步(2 - 2)和填充“相同”256“conv3_1”卷积3×3×128旋转步[1]和填充“相同”9 relu3_1 reluReLU conv3_2的卷积256 3×3×256旋转步[1]和填充“相同”11的relu3_2 ReLU ReLU 12“pool3”马克斯池2×2马克斯池步(2 - 2)和填充“相同”13 conv4_1卷积512 3×3×256旋转步[1]和填充“相同”14的relu4_1 ReLU ReLU 15 conv4_2卷积512 3×3×512旋转步[1]和填充“相同”16的relu4_2 ReLU ReLU 17“pool4”马克斯池2×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 'EmbeddingBatch' ReLU ReLU 24 'regressionoutput'回归输出均方误差
使用analyzeNetwork
(深度学习工具箱)以可视化的方式探索网络。
analyzeNetwork(净)
使用VGGish提取特征
读入一个音频信号,从中提取特征嵌入。
[audioIn, fs] = audioread (“Ambiance-16-44p1-mono-12secs.wav”);
绘制并收听音频信号。
t =(0:元素个数(audioIn) 1) / fs;情节(t, audioIn)包含(“时间(s)”) ylabel (“Ampltiude”)轴紧
要播放声音,调用soundsc(audioIn,fs)
VGGish需要对音频信号进行预处理,以匹配用于训练网络的输入格式。预处理步骤包括音频信号重采样和计算mel谱图阵列。要了解更多关于mel光谱图的信息,请参见melSpectrogram
.使用vggish进行预处理
对信号进行预处理,提取mel谱图,并将其传递给VGGish。想象一个随机选择的光谱图。
色= vggishPreprocess (audioIn, fs);arbitrarySpect =色(::1,兰迪(大小(谱图,4)));冲浪(arbitrarySpect EdgeColor =“没有”)视图(90、-90)包含(“梅尔乐队”) ylabel (“帧”)标题(“VGGish梅尔光谱图”)轴紧
创建VGGish神经网络。使用vggish
功能需要安装预先训练的VGGish网络。如果没有安装网络,则该函数提供下载预训练模型的链接。
网= vggish;
调用预测
利用该网络对预处理后的MEL谱图图像进行特征提取嵌入。特征嵌入返回为numFrames
128年——矩阵,numFrames
为单个谱图的个数,128为每个特征向量中的元素个数。
特点=预测(净色);[numFrames, numFeatures] =大小(特性)
numFrames = 24
numFeatures = 128
可视化VGGish特性嵌入。
冲浪(特性,EdgeColor =“没有”xlabel([90 -90])“特性”) ylabel (“帧”)标题(“VGGish功能嵌入”)轴紧
使用VGGish进行迁移学习
在本例中,您将VGGish回归模型中的学习转移到音频分类任务中。
下载并解压环境声音分类数据集。该数据集由标记为10种不同音频声音类别(ESC-10)之一的录音组成。
downloadFolder = matlab.internal.examples.downloadSupportFile (“音频”,“esc - 10. - zip”);解压(downloadFolder,tempdir) dataLocation = fullfile(tempdir,“ESC-10”);
创建一个audioDatastore
对象来管理数据并将其划分为训练集和验证集。调用countEachLabel
显示声音类别的分布和唯一标签的数量。
广告= audioDatastore (dataLocation IncludeSubfolders = true, LabelSource =“foldernames”);labelTable = countEachLabel(广告)
labelTable =10×2表标签计数______________ _____电锯40钟滴答40噼里啪啦火40哭闹婴儿40狗40直升机40雨40公鸡38海浪40打喷嚏40
确定类的总数。
numClasses =身高(labelTable);
调用splitEachLabel
将数据集分为训练集和验证集。检查培训集和验证集中标签的分布情况。
[adsTrain, adsValidation] = splitEachLabel(ads,0.8);countEachLabel (adsTrain)
ans =10×2表标签计数______________ _____电锯32钟滴答32噼里啪啦火32哭泣的婴儿32狗32直升机32雨32公鸡30海浪32打喷嚏32
countEachLabel (adsValidation)
ans =10×2表标签计数______________ _____电锯8时钟滴答8噼里啪啦火8哭闹婴儿8狗8直升机8雨8公鸡8海浪8打喷嚏8
VGGish网络期望将音频预处理为log mel谱图。使用vggishPreprocess
从火车集合中提取光谱图。每个音频信号都有多个谱图。复制标签,使它们与光谱图一一对应。
overlapPercentage =75;trainFeatures = [];trainLabels = [];而hasdata(adsTrain) [audioIn,fileInfo] = read(adsTrain);特点= vggishPreprocess (audioIn、fileInfo.SampleRate OverlapPercentage = OverlapPercentage);numSpectrograms =大小(功能,4);trainFeatures =猫(4 trainFeatures功能);trainLabels =猫(2 trainLabels repelem (fileInfo.Label numSpectrograms));结束
从验证集中提取光谱图并复制标签。
validationFeatures = [];validationLabels = [];segmentsPerFile = 0 (numel(adsValidation.Files), 1);idx = 1;而hasdata(adsValidation) [audioIn,fileInfo] = read(adsValidation);特点= vggishPreprocess (audioIn、fileInfo.SampleRate OverlapPercentage = OverlapPercentage);numSpectrograms =大小(功能,4);validationFeatures =猫(4 validationFeatures功能);validationLabels =猫(2 validationLabels repelem (fileInfo.Label numSpectrograms));segmentsPerFile (idx) = numSpectrograms;Idx = Idx + 1;结束
加载VGGish模型并将其转换为layerGraph
(深度学习工具箱)对象。
网= vggish;lgraph = layerGraph (net.Layers);
使用removeLayers
(深度学习工具箱)从图中删除最后的回归输出层。删除回归层之后,图的新最后一层是名为“EmbeddingBatch”
.
lgraph = removeLayers (lgraph,“regressionoutput”);lgraph.Layers(结束)
ans = ReLULayer,属性:Name: EmbeddingBatch
使用addLayers
(深度学习工具箱)添加一个fullyConnectedLayer
(深度学习工具箱),一个softmaxLayer
(深度学习工具箱)和一个classificationLayer
(深度学习工具箱)图。设置WeightLearnRateFactor
而且BiasLearnRateFactor
以使新层中的学习速度比迁移层中的学习速度快。
lgraph = addLayers (lgraph, (...fullyConnectedLayer (numClasses Name =“FCFinal”WeightLearnRateFactor = 10, BiasLearnRateFactor = 10) softmaxLayer (Name =“softmax”) classificationLayer (Name =“classOut”)));
使用connectLayers
(深度学习工具箱)将完全连接层、softmax层和分类层附加到层图中。
lgraph = connectLayers (lgraph,“EmbeddingBatch”,“FCFinal”);
要定义培训选项,请使用trainingOptions
(深度学习工具箱).
miniBatchSize = 128;选择= trainingOptions (“亚当”,...MaxEpochs = 5,...MiniBatchSize = MiniBatchSize,...洗牌=“every-epoch”,...ValidationData = {validationFeatures, validationLabels},...ValidationFrequency = 50,...LearnRateSchedule =“分段”,...LearnRateDropFactor = 0.5,...LearnRateDropPeriod = 2,...OutputNetwork =“best-validation-loss”,...Verbose = false,...情节=“训练进步”);
要训练网络,使用trainNetwork
(深度学习工具箱).
[trainedNet, netInfo] = trainNetwork(trainFeatures,trainLabels,lgraph,options);
每个音频文件被分成几个片段,以输入VGGish网络。使用多数原则决策将验证集中每个文件的预测结合起来。
validationPredictions =分类(trainedNet validationFeatures);idx = 1;validationPredictionsPerFile =分类;为ii = 1:numel(adsValidation.Files) validationPredictionsPerFile(ii,1) =模式(validationprediction (idx:idx+segmentsPerFile(ii)-1));idx = idx + segmentsPerFile(ii);结束
使用confusionchart
(深度学习工具箱)在验证集上评估网络的性能。
图(单位=“归一化”,位置=[0.2 0.2 0.5 0.5]);confusionchart (adsValidation。标签,validationPredictionsPerFile,...标题= sprintf ("验证数据混淆矩阵\nAccuracy = %0.2f %%",意味着(validationPredictionsPerFile = = adsValidation.Labels) * 100),...ColumnSummary =“column-normalized”,...RowSummary =“row-normalized”)
输出参数
网
-预训练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声学、语音和信号处理国际会议, 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。
扩展功能
C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
只有
激活
而且预测
支持对象函数。创建一个
SeriesNetwork
对象用于代码生成,请参见为代码生成加载预先训练的网络(MATLAB编码器).
GPU的代码生成
使用GPU Coder™为NVIDIA GPU生成CUDA®代码。
使用注意事项和限制:
只有
激活
,分类
,预测
,predictAndUpdateState
,resetState
支持对象函数。创建一个
SeriesNetwork
对象用于代码生成,请参见为代码生成加载预先训练的网络(GPU编码器).
版本历史
介绍了R2020b
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。