主要内容

yamnet

YAMNet神经网络

    语法

    描述

    例子

    = yamnet返回一个预先训练的YAMNet模型。

    此功能需要音频工具箱™和深度学习工具箱™。

    例子

    全部折叠

    下载并解压缩用于YAMNet的Audio Toolbox™模型。

    类型yamnet在命令窗口。如果未安装YAMNet的音频工具箱模型,则该函数提供指向网络权重位置的链接。要下载模型,请单击该链接。将文件解压缩到MATLAB路径上的某个位置。

    或者,执行以下命令将YAMNet模型下载并解压缩到临时目录。

    downloadFolder = fullfile (tempdir,“YAMNetDownload”); loc=websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/yamnet.zip”);YAMNetLocation = tempdir;YAMNetLocation解压(loc)目录(fullfile (YAMNetLocation,“yamnet”))

    输入以下命令,检查安装是否成功yamnet在命令窗口。如果网络已安装,则该函数返回aSeriesNetwork(深度学习工具箱)对象。

    yamnet
    ans=具有以下属性的系列网络:层:[86×1 nnet.cnn.layer.layer]输入名称:{'input_1'}输出名称:{'Sound'}

    加载一个预先训练的YAMNet卷积神经网络并检查层和类。

    使用yamnet加载预先训练的YAMNet网络。净输出是aSeriesNetwork(深度学习工具箱)对象。

    网= yamnet
    net = SeriesNetwork with properties: Layers: [86×1 net.cnn.layer. layer] InputNames: {'input_1'} OutputNames: {'Sound'}

    使用命令查看网络架构财产。该网络有86层。有28个具有可学习权值的层:27个卷积层和1个完全连接层。

    网。层
    ans=86x1带层的层阵列:1“输入_1”图像输入96×64×1图像2“conv2d”卷积32 3×3×1卷积带跨距[2]和填充“相同的”3“b”批标准化批标准化带32个通道4“激活”ReLU ReLU 5“深度_conv2d”分组卷积32组1 3×3×1卷积带跨距[1]和填充“相同的”6“L11”批标准化批标准化与32个通道7“激活\u 1”ReLU ReLU 8“conv2d\u 1”卷积64 1×1×32卷积与步幅[1]和填充“相同的”9“L12”批标准化批标准化与64个通道10“激活2”ReLU ReLU 11“深度2”conv2d_1”分组卷积64组1 3×3×1卷积与步幅[2]和填充“相同的”12“L21”批标准化批标准化与64个通道13“激活_3”ReLU ReLU 14“conv2d_2”卷积128 1×1×64卷积与步长[1]和填充“相同的”15“L22”批次标准化批次标准化128个通道16“激活4”ReLU ReLU 17“深度2”conv2d 2“分组卷积128组1 3×3×1卷积带步长[1 1]和填充“相同的”18“L31”批次标准化批次标准化128通道19“激活_5”ReLU ReLU 20“conv2d_3”卷积128 1×1×128卷积带步长[1]和填充“相同的”21“L32”批次标准化批次标准化128个通道22“激活”6“ReLU ReLU 23“深度”conv2d_3”分组卷积128组1 3×3×1卷积带步长[2]和填充“相同”24“L41”批次标准化批次标准化128通道25“激活7”ReLU ReLU 26“conv2d_4”卷积256 1×1×128卷积带步长[1]和填充“相同的”27“L42”批次标准化批次标准化256通道28“激活”8“ReLU ReLU 29“深度”conv2d_4”分组卷积256组1 3×3×1卷积带步长[1]和填充“相同”30“L51”批次标准化批次标准化256个通道31“激活_9”ReLU ReLU 32“conv2d_5”卷积256个1×1×256卷积带步长[1]和填充“相同”33“L52”批次标准化批次标准化256个通道34“激活”10“ReLU ReLU 35”深度2“conv2d”5“分组卷积256组1 3×3×1卷积带步长[2]和填充“相同”36“L61”批次标准化批次标准化256通道37“激活11”ReLU ReLU 38“conv2d_6”卷积512 1×1×256卷积带步长[1]和填充“相同的”39“L62”批次标准化批次标准化与512个通道40“激活”\u 12“ReLU ReLU 41”深度”\u conv2d\u 6“分组卷积512组1 3×3×1卷积,步幅[1]和填充“相同的”42“L71”批标准化批标准化与512个通道43“激活\u 13”ReLU ReLU 44“conv2d\u 7”卷积512 1×1×512带步长的卷积[1]和填充“相同的”45“L72”批标准化批标准化与512个通道46“激活”\u 14“ReLU ReLU 47”深度”\u conv2d\u 7“分组卷积512组1 3×3×1卷积带步长[1 1]和填充“相同的”48“L81”批标准化批标准化与512个通道49“激活\u 15”ReLU ReLU 50“conv2d\u 8”卷积512 1×1×512带步长的卷积[1]和填充“相同的”51“L82”批次标准化批次标准化512通道52“激活”\u 16“ReLU ReLU 53”深度”\u conv2d\u 8“分组卷积512组1 3×3×1卷积带步长[1 1]和填充“相同的”54“L91”批标准化批标准化512通道55“激活”17“ReLU ReLU 56“conv2d_9”卷积512 1×1×512带步长卷积[1]和填充“相同的”57“L92”批次标准化批次标准化与512个通道58“激活18”ReLU ReLU 59“深度”conv2d_9”分组卷积512组1 3×3×1卷积步幅[1]和填充“相同的”60“L101”批次标准化批次标准化512通道61“激活_19”ReLU ReLU 62“conv2d_10”卷积512 1×1×512带步长卷积[1]和填充“相同的”63“L102”批次标准化批次标准化与512个通道64“激活”\u 20“ReLU ReLU 65”深度”\u conv2d\u 10“分组卷积512组1 3×3×1卷积,步幅[1]和填充“相同的”66“L111”批标准化批标准化512通道67“激活\u 21”ReLU ReLU 68“conv2d\u 11”卷积512 1×1×512带步长卷积[1]和填充“相同”69“L112”批次标准化批次标准化512通道70“激活”22“ReLU ReLU 71“深度”conv2d_11”分组卷积512组1 3×3×1卷积步幅[2]和填充“相同”72“L121”批次标准化批次标准化512通道73“激活”\u 23“ReLU ReLU 74“conv2d\u 12”卷积1024 1×1×512卷积步长[1],并填充“相同”75“L122”批次标准化批次标准化批次标准化1024通道76“激活”\u 24“ReLU ReLU 77”深度_conv2d_12' Grouped Convolution 1024 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 78 'L131' Batch Normalization Batch normalization with 1024 channels 79 'activation_25' ReLU ReLU 80 'conv2d_13' Convolution 1024 1×1×1024 convolutions with stride [1 1] and padding 'same' 81 'L132' Batch Normalization Batch normalization with 1024 channels 82 'activation_26' ReLU ReLU 83 'global_average_pooling2d' Global Average Pooling Global average pooling 84 'dense' Fully Connected 521 fully connected layer 85 'softmax' Softmax softmax 86 'Sound' Classification Output crossentropyex with 'Speech' and 520 other classes

    要查看网络学习的课程名称,您可以查看属性的分类输出层(最后一层)。通过指定前10个元素来查看前10个类。

    net.Layers(结束). class (1:10)
    ans =10×1分类演讲儿童演讲,儿童演讲对话叙述,独白喋喋不休的演讲合成器大喊大叫

    使用analyzeNetwork(深度学习工具箱)可视化地探索网络。

    analyzeNetwork(净)

    YAMNet发布时带有相应的声音类本体,您可以使用阴阳图对象。

    ygraph = yamnetGraph;p =情节(ygraph);布局(p,“分层”

    本体论图绘制了所有521种可能的声音类。绘制与呼吸音相关的音的子图。

    allRespiratorySounds = dfsearch (ygraph,“呼吸音”);ygraphSpeech =子图(ygraph allRespiratorySounds);情节(ygraphSpeech)

    YAMNet网络要求您通过将音频信号转换为网络训练的采样率,然后提取重叠的对数mel谱图,来预处理和提取音频信号的特征。本例将介绍所需的预处理和特征提取,以匹配用于训练YAMNet的预处理和特征提取。这个classifySound函数为您执行这些步骤。

    读入音频信号进行分类。重新采样音频信号到16千赫,然后将其转换为单一精度。

    [audioIn, fs0] = audioread (“Counting-16-44p1-mono-15secs.wav”);fs = 16 e3;audioIn =重新取样(fs, audioIn fs0);audioIn =单(audioIn);

    定义mel谱图参数,然后利用该方法提取特征melSpectrogram函数。

    FFTLength = 512;numBands = 64;frequencyRange = [125 7500];windowLength = 0.025 * fs;overlapLength = 0.015 * fs;melSpect = melSpectrogram (audioIn fs,...“窗口”损害(windowLength“周期”),...“OverlapLength”overlapLength,...“FFTLength”FFTLength,...“频率范围”frequencyRange,...“NumBands”,麻木,...“FilterBankNormalization”“没有”...“WindowNormalization”假的,...“SpectrumType”“级”...“FilterBankDesignDomain”“扭曲的”);

    转换mel谱图到对数尺度。

    melSpect = log(melSpect + single(0.001));

    重新定位mel谱图,使时间以行的形式沿第一个维度排列。

    melSpect = melSpect。”;[numSTFTWindows, numBands] =大小(melSpect)
    numsftftwindows=1551
    numBands = 64

    将声谱图分成长度为96、重叠48的帧。沿着第四维度放置框架。

    frameWindowLength = 96;frameOverlapLength = 48;hopLength = frameWindowLength - frameOverlapLength;numHops = floor((numSTFTWindows - frameWindowLength)/hopLength) + 1;帧= 0 (numHops frameWindowLength numBands 1,“喜欢”,melSpect);hop = 1:numHops range = 1 + hopLength*(hop-1):hopLength*(hop -1) + frameWindowLength;跳帧(::1)= melSpect(范围:);结束

    创建一个YAMNet网络。

    网= yamnet ();

    对谱图图像进行分类。

    类别=分类(网络、帧);

    将音频信号分类为最常出现的声音。

    实例命名=模式(类)
    我的声音=明确的演讲

    下载并解压空压机数据集[1].该数据集由处于健康状态或7种故障状态之一的空压机的记录组成。

    网址=“//www.tatmou.com/金宝appsupportfiles/audio/AirCompressorDataset/AirCompressorDataset.zip”;downloadFolder = fullfile (tempdir,“aircompressordataset”);datasetLocation = tempdir;如果~ (fullfile (tempdir,存在“AirCompressorDataSet”),“dir”) loc = websave(downloadFolder,url);解压缩(loc fullfile (tempdir“AirCompressorDataSet”))结束

    创建一个audioDatastore对象来管理数据,并将其分解为训练集和验证集。

    广告= audioDatastore (downloadFolder,“IncludeSubfolders”,真的,“LabelSource”“foldernames”);[adsTrain,adsValidation]=splitEachLabel(ads,0.8,0.2);

    从数据存储中读取音频文件,并保存采样率供以后使用。重新设置数据存储,将读指针返回到数据集的开头。听音频信号,并在时域中绘制信号。

    [x, fileInfo] =阅读(adsTrain);fs = fileInfo.SampleRate;reset(adsTrain) sound(x,fs) figure t = (0:size(x,1)-1)/fs;情节(t, x)包含(“时间(s)”)头衔(“国家=”+字符串(fileInfo.Label)轴牢固的

    使用从列车组中提取Mel光谱图yamnetPreprocess.每个音频信号都有多个声谱图。复制标签,使它们与光谱图一一对应。

    emptyLabelVector = adsTrain.Labels;emptyLabelVector (:) = [];trainFeatures = [];trainLabels = emptyLabelVector;hasdata(adsTrain) [audioIn,fileInfo] = read(adsTrain);特点= yamnetPreprocess (audioIn fileInfo.SampleRate);numSpectrums =大小(功能,4);trainFeatures =猫(4 trainFeatures功能);trainLabels =猫(2 trainLabels repmat (fileInfo.Label 1 numSpectrums));结束

    从验证集中提取特征并复制标签。

    validationFeatures=[];validationLabels=emptyLabelVector;hasdata(adsValidation) [audioIn,fileInfo] = read(adsValidation);特点= yamnetPreprocess (audioIn fileInfo.SampleRate);numSpectrums =大小(功能,4);validationFeatures =猫(4 validationFeatures功能);validationLabels =猫(2 validationLabels repmat (fileInfo.Label 1 numSpectrums));结束

    空压机数据集只有8类。

    读入YAMNet并将其转换为layerGraph(深度学习工具箱)

    如果您的机器上没有安装YAMNet预训练网络,请执行以下命令将YAMNet模型下载并解压缩到临时目录。

    downloadFolder = fullfile (tempdir,“YAMNetDownload”); loc=websave(下载文件夹,“https://ssd.mathworks.com/金宝appsupportfiles/audio/yamnet.zip”);YAMNetLocation = tempdir;YAMNetLocation解压(loc)目录(fullfile (YAMNetLocation,“yamnet”))

    读入YAMNet并将其转换为layerGraph(深度学习工具箱),替换finalfullyConnectedLayer(深度学习工具箱)决赛呢classificationLayer(深度学习工具箱)来反映新的任务。

    uniqueLabels=unique(adsTrain.Labels);numLabels=numel(uniqueLabels);net=yamnet;lgraph=layerGraph(net.Layers);newDenseLayer=fullyConnectedLayer(numLabels,“名称”“密集”);lgraph = replaceLayer (lgraph,“密集”, newDenseLayer);newClassificationLayer = classificationLayer (“名称”“声音”“类”,独一无二的标签);lgraph=替换层(lgraph,“声音”,新分类层);

    要确定培训选项,请使用trainingOptions(深度学习工具箱)

    miniBatchSize=128;validationFrequency=floor(numel(列车标签)/miniBatchSize);options=trainingOptions(“亚当”...“InitialLearnRate”3的军医,...“MaxEpochs”2....“MiniBatchSize”,小批量,...“洗牌”“every-epoch”...“阴谋”“训练进步”...“详细”假的,...“ValidationData”{单(validationFeatures), validationLabels},...“ValidationFrequency”, validationFrequency);

    要训练网络,使用trainNetwork(深度学习工具箱)

    airCompressorNet = trainNetwork (trainFeatures trainLabels、lgraph选项);

    保存训练有素的网络airCompressorNet.mat.您现在可以通过加载airCompressorNet.mat文件。

    保存airCompressorNet.matairCompressorNet

    参考文献

    [1] Verma, Nishchal K.等,“基于智能状态的空气压缩机声信号监测”。IEEE可靠性汇刊,第65卷,第5期1, 2016年3月,第291-309页。DOI.org (Crossref), doi: 10.1109 / TR.2015.2459684。

    输出参数

    全部折叠

    预训练YAMNet神经网络,返回为SeriesNetwork(深度学习工具箱)对象。

    参考文献

    [1] Gemmeke, Jort F., et al. <音频集:用于音频事件的本体和人类标记数据集>。2017 IEEE声学、语音和信号处理国际会议(ICASSP), IEEE, 2017, pp. 776-80。DOI.org (Crossref), doi: 10.1109 / ICASSP.2017.7952261。

    Hershey, Shawn, et al. < CNN大规模音频分类架构>。2017 IEEE声学、语音和信号处理国际会议(ICASSP), IEEE, 2017,第131-35页。DOI.org (Crossref), doi: 10.1109 / ICASSP.2017.7952132。

    扩展功能

    介绍了R2020b