主要内容

通过预先训练的音频网络进行迁移学习

这个例子展示了如何使用迁移学习来重新训练YAMNet,一个预先训练的卷积神经网络,来对一组新的音频信号进行分类。要从头开始进行音频深度学习,请看使用深度学习对声音进行分类

迁移学习通常用于深度学习应用。你可以用一个预先训练好的网络作为学习新任务的起点。用迁移学习对网络进行微调通常比用随机初始化权值从头开始训练网络更快、更容易。使用少量的训练信号,您可以快速地将学到的特征转移到新的任务中。

音频工具箱™ 另外还提供分类声音函数,实现了对YAMNet进行必要的预处理和对结果进行方便的后处理。Audio Toolbox还提供预先训练的VGGish网络(vggish)以及vggishFeatures函数,实现对VGGish网络的预处理和后处理。

创建数据

生成100个白噪声信号,100个棕色噪声信号,100个粉色噪声信号。假设采样率为16khz,每个信号代表0.98秒的持续时间。

fs=16e3;duration=0.98;N=duration*fs;numSignals=100;wNoise=2*rand([N,numSignals])-1;wLabels=repelem(分类(“白色”),numSignals,1);bNoise=滤波器(1,[1,-0.999],wNoise);B噪声=B噪声/最大值(abs(B噪声),[],“所有”);bLabels = repelem(分类(“棕色”)、numSignals 1);pNoise = pinknoise ([N, numSignals]);pLabels = repelem(分类(“粉红”)、numSignals 1);

将数据分为训练集和测试集。通常,训练集由大部分数据组成。但是,为了说明迁移学习的威力,您将仅使用少数样本进行训练,而大多数样本用于验证。

K =5.;列车音频=[wNoise(:,1:K),bNoise(:,1:K),pNoise(:,1:K)];列车标签=[wLabels(1:K);bLabels(1:K);pLabels(1:K)];验证音频=[wNoise(:,K+1:end),bNoise(:,K+1:end)];验证标签=[wLabels(K+1:end);bLabels(K+1:end);pLabels(K+1:end)];fprintf(列车集合中每个噪声颜色的样本数= %d\n+..."验证集中每个噪声颜色的样本数= %d\n"K numSignals-K);
列车集合中每个噪声颜色的样本数= 5验证集合中每个噪声颜色的样本数= 95

提取特征

使用光谱图使用与YAMNet模型训练相同的参数,从训练集和验证集提取对数mel谱图。

FFT长度=512;数量=64;频率范围=[125 7500];窗长=0.025*fs;重叠长度=0.015*fs;列车特征=频谱图(列车音频,fs,...“窗口”,hann(窗长,“周期性”),...“重叠长度”,重叠长度,...“FFTLength”,fft长度,...“FrequencyRange”,频率范围,...“NumBands”numBands,...“过滤器组规范化”,“没有”,...“窗口规范化”假的,...“光谱类型”,“级”,...“FilterBankDesignDomain”,“扭曲”);列车特征=对数(列车特征+单个(0.001));列车特征=排列(列车特征[2,1,4,3]);验证特征=光谱图(验证音频,fs,...“窗口”,hann(窗长,“周期性”),...“重叠长度”,重叠长度,...“FFTLength”,fft长度,...“FrequencyRange”,频率范围,...“NumBands”numBands,...“过滤器组规范化”,“没有”,...“窗口规范化”假的,...“光谱类型”,“级”,...“FilterBankDesignDomain”,“扭曲”); validationFeatures=日志(validationFeatures+单个(0.001));validationFeatures=permute(validationFeatures[2,1,4,3]);

转移学习

要加载预训练网络,请调用yamnet. 如果未安装YAMNet的音频工具箱模型,则该函数提供指向网络权重位置的链接。要下载模型,请单击链接。将文件解压缩到MATLAB路径上的某个位置。YAMNet模型可以将音频分为521种声音类别之一,包括白噪声和粉红色噪声(但不是棕色噪声)。

net=yamnet;net.Layers(end.class)
ans=521×1分类语音儿童语音,儿童说话对话旁白,独白咿咿呀咿咿呀语音合成器大声叫喊叫喊叫喊孩子们大声叫喊尖叫低语笑声婴儿笑声咯咯笑咯咯笑肚子笑咯咯笑哭,啜泣婴儿哭,婴儿哭呜咽哭呜咽叹息唱诗班唱诗吟诵咒语儿童歌唱⋮

首先将网络转换为网络,为迁移学习准备模型layerGraph(深度学习工具箱)使用替换层(深度学习工具箱)将完全连接层替换为未经培训的完全连接层。将分类层替换为将输入分类为“白色”、“粉色”或“棕色”的分类层。请参阅深度学习层列表(深度学习工具箱)用于MATLAB®支持的深度学习层。金宝app

uniqueLabels =独特(trainLabels);numLabels =元素个数(uniqueLabels);lgraph = layerGraph (net.Layers);lgraph = replaceLayer (lgraph,“密集”,fullyConnectedLayer(numLabels,“名称”,“密集”)); lgraph=替换层(lgraph,“声音”classificationLayer (“名称”,“声音”,“班级”uniqueLabels));

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

选择= trainingOptions (“亚当”,“ValidationData”,{单身(validationFeatures) validationLabels});

要训练网络,使用列车网络(深度学习工具箱).该网络仅使用每个噪声类型5个信号就能达到100%的验证精度。

列车网络(单个(列车特征)、列车标签、lgraph、选项);
关于单CPU的培训。|=======================================================================================================================================================================================================================================================================================================================================历元|迭代|经过的时间|小批量|验证|小批量|验证|基础学习| | | |(hh:mm:ss)第二方第第二第二方第第第二方第第二方第第第二方第第第第第二方第第第第第第第第第第第二方第第第第第第第第第二方第第第第第第第二方第第二方第第第二方第第二方第二方第二方第第二方第二方第第二方第第第第第第第第二方第=========================================================第第第第第第第第第第第第=================================第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第=========================================================第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第第1922年| 0.6619 | 0.0010 | 30 | 00:00:14 | 100.00%| 100.00%| 9.1076e-06 | 5.0431e-05 | 0.0010 ||======================================================================================================================|