主要内容

vggish

VGGish神经网络

自从R2020b

    语法

    描述

    例子

    = vggish返回一个pretrained VGGish模型。

    这个函数需要音频工具箱™和深度学习工具箱™。

    例子

    全部折叠

    下载并解压缩音频工具箱VGGish™模型。

    类型vggish在命令窗口。如果音频VGGish工具箱模型没有安装,那么函数提供了一个链接到网络权值的位置。下载模式,点击链接。将文件解压缩到一个位置在MATLAB的道路。

    另外,执行这些命令下载并解压缩VGGish模型到你的临时目录中。

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

    通过输入检查安装是否成功vggish在命令窗口。如果安装了网络,那么函数返回SeriesNetwork(深度学习工具箱)对象。

    vggish
    ans = SeriesNetwork属性:层:[24×1 nnet.cnn.layer.Layer] InputNames: {“InputBatch”} OutputNames: {“regressionoutput”}

    加载一个pretrained VGGish卷积神经网络和检查层和类。

    使用vggish加载pretrained VGGish网络。输出是一个SeriesNetwork(深度学习工具箱)对象。

    网= vggish
    网= SeriesNetwork属性:层:[24×1 nnet.cnn.layer.Layer] InputNames: {“InputBatch”} OutputNames: {“regressionoutput”}

    查看网络体系结构使用财产。网络有24层。可学的权重有九层,其中六个是卷积层和三个完全连接层。

    net.Layers
    ans = 24×1层阵列层:1“InputBatch”图像输入96×64×64 2的conv1卷积图像卷积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”relu relu 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(净)

    读入一个音频信号提取特征嵌入。

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

    情节和听音频信号。

    t =(0:元素个数(audioIn) 1) / fs;情节(t, audioIn)包含(“时间(s)”)ylabel (“Ampltiude”)轴

    %的声音,调用soundsc (audioIn fs)

    VGGish需要预处理音频信号来匹配输入格式用于训练网络。预处理步骤包括音频信号重采样和计算数组的梅尔·色。学习更多关于梅尔·色,看到的melSpectrogram。使用vggish进行预处理对信号进行预处理和提取的梅尔·色传递给VGGish。可视化的一个声音(随机选取的。

    色= vggishPreprocess (audioIn, fs);arbitrarySpect =色(::1,兰迪(大小(谱图,4)));冲浪(arbitrarySpect EdgeColor =“没有”)视图(90、-90)包含(“梅尔乐队”)ylabel (“帧”)标题(“VGGish梅尔声谱图”)轴

    创建一个VGGish神经网络。使用vggish函数需要安装pretrained VGGish网络。如果网络没有安装,功能提供了一个链接到下载pretrained模型。

    网= vggish;

    调用预测与网络预处理梅尔声谱图嵌入图像提取特征。作为一个返回的功能嵌入numFrames128年——矩阵,numFrames是个人谱图和128的数量在每个特征向量元素的数量。

    特点=预测(净色);[numFrames, numFeatures] =大小(特性)
    numFrames = 24
    numFeatures = 128

    可视化VGGish功能嵌入。

    冲浪(特性,EdgeColor =“没有”)视图(-90年[90])包含(“特性”)ylabel (“帧”)标题(“VGGish功能嵌入”)轴

    在本例中,您将学习VGGish回归模型的音频分类的任务。

    下载并解压缩环境声音分类数据集。该数据集由录音贴上一个10个不同的音频声音类(ESC-10)。

    downloadFolder = matlab.internal.examples.download金宝appSupportFile (“音频”,“esc - 10. - zip”);解压缩(downloadFolder tempdir) dataLocation = fullfile (tempdir,“ESC-10”);

    创建一个audioDatastore对象来管理数据并把它分割为训练和验证集。调用countEachLabel显示声音类的分布和数量的独特的标签。

    广告= audioDatastore (dataLocation IncludeSubfolders = true, LabelSource =“foldernames”);labelTable = countEachLabel(广告)
    labelTable =10×2表_____电锯标签数* * * 40 clock_tick 40 crackling_fire 40 crying_baby 40狗40直升机40雨40公鸡38 sea_waves 40打喷嚏40

    确定类的总数。

    numClasses =身高(labelTable);

    调用splitEachLabel将数据集分为训练和验证集。检查标签的分布在训练集和验证集。

    [adsTrain, adsValidation] = splitEachLabel(广告,0.8);countEachLabel (adsTrain)
    ans =10×2表_____电锯标签数* * * 32 clock_tick 32 crackling_fire 32 crying_baby 32狗32直升机32雨32公鸡30 sea_waves 32打喷嚏32
    countEachLabel (adsValidation)
    ans =10×2表_____电锯标签数* * * 8 clock_tick 8 crackling_fire 8 crying_baby 8只狗8直升机8雨8公鸡8 sea_waves 8打喷嚏8

    VGGish网络预计音频预处理到日志梅尔·色。使用vggishPreprocess提取声音从火车集。有多个每个音频信号的谱图。复制标签,这样他们是一一对应的谱图。

    overlapPercentage =75年;trainFeatures = [];trainLabels = [];hasdata (adsTrain) [audioIn fileInfo] =阅读(adsTrain);特点= vggishPreprocess (audioIn、fileInfo.SampleRate OverlapPercentage = OverlapPercentage);numSpectrograms =大小(功能,4);trainFeatures =猫(4 trainFeatures功能);trainLabels =猫(2 trainLabels repelem (fileInfo.Label numSpectrograms));结束

    从验证集和提取谱图复制标签。

    validationFeatures = [];validationLabels = [];segmentsPerFile = 0(元素个数(adsValidation.Files), 1);idx = 1;hasdata (adsValidation) [audioIn fileInfo] =阅读(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(深度学习工具箱)删除最后回归的输出层图。删除回归层后,新的图的最后一层是ReLU层命名“EmbeddingBatch”

    lgraph = removeLayers (lgraph,“regressionoutput”);lgraph.Layers(结束)
    ans = ReLULayer属性:名称:“EmbeddingBatch”

    使用addLayers(深度学习工具箱)添加一个fullyConnectedLayer(深度学习工具箱),一个softmaxLayer(深度学习工具箱)和一个classificationLayer(深度学习工具箱)图。设置WeightLearnRateFactorBiasLearnRateFactor新的完全连接层的快10这样学习是新层的传输层。

    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,选项);

    图培训进展(07 - 7 - 2022 14:34:35)包含2轴uigridlayout类型的对象和另一个对象。坐标轴对象1包含12块类型的对象,文本行。坐标轴对象2包含12块类型的对象,文本行。

    每个音频文件分成几段注入VGGish网络。结合预测每个文件的验证集使用少数服从多数原则决定。

    validationPredictions =分类(trainedNet validationFeatures);idx = 1;validationPredictionsPerFile =分类;2 = 1:元素个数(adsValidation.Files) validationPredictionsPerFile(2, 1) =模式(validationPredictions (idx: idx + segmentsPerFile (ii) 1));idx = idx + segmentsPerFile (ii);结束

    使用confusionchart(深度学习工具箱)评估网络的性能验证集。

    图(单位=“归一化”位置= (0.2 - 0.2 0.5 - 0.5));confusionchart (adsValidation.Labels validationPredictionsPerFile,标题= sprintf (“验证数据混淆矩阵\ nAccuracy = % 0.2 f % % ",意味着(validationPredictionsPerFile = = adsValidation.Labels) * 100),ColumnSummary =“column-normalized”,RowSummary =“row-normalized”)

    输出参数

    全部折叠

    Pretrained VGGish神经网络,作为一个返回SeriesNetwork(深度学习工具箱)对象。

    引用

    [1]Gemmeke, Jort F。,Daniel P. W. Ellis, Dylan Freedman, Aren Jansen, Wade Lawrence, R. Channing Moore, Manoj Plakal, and Marvin Ritter. 2017. “Audio Set: An Ontology and Human-Labeled Dataset for Audio Events.” In2017年IEEE国际会议音响、演讲和信号处理(ICASSP),776 - 80。新奥尔良,LA: IEEE。https://doi.org/10.1109/ICASSP.2017.7952261。

    [2]好时,肖恩,微酸的乔杜里,丹尼尔·p·w·埃利斯Jort f . Gemmeke Jansen, r·钱宁摩尔Manoj Plakal,等。2017。“CNN架构对大规模音频分类。“在2017年IEEE国际会议音响、演讲和信号处理(ICASSP)131 - 35。新奥尔良,LA: IEEE。https://doi.org/10.1109/ICASSP.2017.7952132。

    扩展功能

    版本历史

    介绍了R2020b