Wolfram AudioIdentify V1(沃尔夫拉姆音频识别V1)培训时间 AudioSet数据

识别音频信号中的声音

Wolfram Research于2019年发布,该网络是Wolfram Language 12.0中AudioIdentification功能后端的一部分。它旨在实现分类精度、大小和评估速度之间的良好平衡。

型号:2

训练集信息

示例

资源检索

获取预先训练过的网:

在[1]中:=
NetModel[“Wolfram AudioIdentification V1基于AudioSet数据进行训练”]
输出[1]=

NetModel参数

该模型由一系列单独的网络组成,每个网络由特定的参数组合标识。检查可用参数:

在[2]中:=
NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”\“参数信息”]
输出[2]=

通过指定参数选择非默认模型:

在[3]中:=
NetModel[{“Wolfram AudioIdentify V1 Trained on AudioSet Data”,“Size”->“Small”}]
输出[3]=

选择一个非默认的未训练网络:

在[4]中:=
NetModel[{“Wolfram AudioIdentify V1 Trained on AudioSet Data”,“Size”->“Large”},“UninitializedEvaluationNet”]
输出[4]=

基本用法

确定音频对象:

在[5]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/40ffce92-738c-4efe-bdbb-ca86d32c3285"]
输出[5]=

预测是一个实体对象,可以查询:

在[6]中:=
pred[“描述”]
输出[6]=

获取预测的可用属性的列表实体:

在[7]中:=
pred[“属性”]
输出[7]=

获得网络预测的十个最可能实体的概率:

在[8]中:=
(*评估此单元格以获取示例输入*)CloudGet[“https://www.wolframcloud.com/obj/349b67b3-91ba-4652-8870-1c8c09ba47a8"]
输出[8]=

由于网络被训练为一组独立的二进制分类器,每个类一个,因此概率之和不等于1。这反映了在单个录音中具有多个声音类别的可能性。

网络接受了关于音频集数据集,其中每个音频信号都用录音中存在的声音类别/源进行注释。这些标签是在大约632个类别的本体中组织的,涵盖了从乐器和音乐类型到动物、机械和人类声音的非常广泛的声音类型或来源。获取所有可用类的名称列表:

在[9]中:=
实体值[NetExtract(网络提取)[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”],“Output”][[“Labels”]],“Name”]
输出[9]=

特征提取

网络的核心采用输入信号的mel谱图的一个固定大小的块,并使用映射到重叠块上NetMap操作员.提取核心网:

在[10]中:=
coreNet=网络提取[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”],{1,“Net”}]
输出[10]=

切掉负责分类的最后几层:

在[11]中:=
singleFrameFeatureExtractor=NetDrop[coreNet,-3]
输出[11]=

该网络获取输入信号的单个块,并输出语义有意义特征的张量。使用以下命令重建整个可变长度网络网络地图操作员计算每个块上的特征聚合层在时间维度上聚合它们:

在[12]中:=
提取器=NetChain[{NetMapOperator[singleFrameFeatureExtractor],AggregationLayer[Max,1],FlattenLayer[]},“Input”->NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”][[“输入”]]]
输出[12]=

获取一组音频物体:

在[13]中:=
audios=压扁[线程[WebAudioSearch[#,“Samples”,#Duration<5&,MaxItems->20]->#]//@{“cow”,“bird”,“cat”}];

可视化一组录制的功能:

在[14]中:=
FeatureSpacePlot[音频,FeatureExtractor->提取器]
输出[14]=

转移学习

使用预训练模型构建分类器,以区分奶牛和鸟类的记录。创建测试集和培训集:

在[15]中:=
种子随机[42];{trainSet,testSet}=TakeDrop[随机样本[选择[audios,MatchQ[#[2]],“cow”|“bird”]&]],30];

从预处理网中去除分类层:

在[16]中:=
featuresNet=NetChain[{NetMapOperator(网络地图操作员)[NetDrop[NetExtract(网络提取)[NetModel(网络模型)[“Wolfram AudioIdentify V1 Trained on AudioSet Data”],{1,“Net”}],-3]],AggregationLayer[Max,1],FlattenLayer[]},“Input”->NetModel[“Wolfram-AudioIdentify V1 Trainify on AudioSet Data”][[“输入”]]]
输出[16]=

使用简单的线性图层:

在[17]中:=
分类器=NetChain〔{LinearLayer[2],SoftmaxLayer[]},“Output”->NetDecoder〔{“Class”,{“bird”,“cow”}〕
输出[17]=

预先计算特征网的结果以避免重复计算。这相当于冻结除新分类器网络中的权重之外的所有权重:

在[18]中:=
trainSet[[All,1]]=featuresNet[trainSet[Call,1]];

对数据集进行培训(使用目标设备->“GPU”用于在GPU上进行培训):

在[19]中:=
trainedNet=NetTrain[分类器,列车集]
输出[19]=

在测试集上获得了完美的精确度:

在[20]中:=
分类器测量[NetJoin[featuresNet,trainedNet],testSet,“报告”]
输出[20]=

净信息

检查网络中所有阵列的参数数量:

在[21]中:=
网络信息[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”]\“阵列元素计数”]
输出[21]=

获取参数总数:

在[22]中:=
网络信息[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”]\“ArraysTotalElementCount”]
输出[22]=

获取层类型计数:

在[23]中:=
网络信息[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”]\“层类型计数”]
输出[23]=

显示摘要图形:

在[24]中:=
网络信息[NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”]\“汇总图形”]
输出[24]=

导出到MXNet

导出将网络转换为可在MXNet中打开的格式:

在[25]中:=
jsonPath=Export[FileNameJoin[{$TemporaryDirectory,“net.json”}],NetModel[“Wolfram AudioIdentify V1 Trained on AudioSet Data”],“MXNet”]
输出[25]=

导出还创建了网络参数包含参数的文件:

在[26]中:=
paramPath=FileNameJoin[{DirectoryName[jsonPath],“net.params”}]
输出[26]=

获取参数文件的大小:

在[27]中:=
文件字节计数[paramPath]
输出[27]=

要求

Wolfram语言12(2019年4月)或以上

资源历史记录

参考