主要内容

关键字定位与英特尔MKL-DNN噪音代码生成

这个例子演示了代码生成关键字定位使用双向久短期记忆(BiLSTM)网络和mel频率cepstral系数(MFCC)特征提取。MATLAB®编码器™与深度学习支持使一代的一个独立的可执行文件(万博1manbetx. exe)文件。之间的通信MATLAB®(.mlx)文件和生成的可执行文件是通过异步用户数据报协议(UDP)。输入的语音信号显示使用timescope。面具显示为蓝色矩形周围发现的实例关键字,是的。更多细节MFCC特征提取和深入学习网络培训,参观关键字定位在噪音使用MFCC和LSTM网络

例子要求

  • 为深度学习MATLAB®编码器接口支持包万博1manbetx

  • 英特尔®Xeon®处理器支持英特尔高级向量扩展2(英特尔万博1manbetxAVX2)

  • 英特尔数学内核库深层神经网络(MKL-DNN)

  • 英特尔MKL-DNN环境变量

为支持版万博1manbetx本的库和设置环境变量信息,明白了先决条件与MATLAB编码器深度学习(MATLAB编码器)

Pretrained网络关键字定位使用MATLAB和流式音频麦克风

pretrained网络的采样率16kHz。设置窗口长度512年样品,重叠的长度384年样品,和跳长度定义为和重叠的窗口长度的区别。定义的速率估计。一个面具每生成一次numHopsPerUpdate音频帧。

fs = 16 e3;windowLength = 512;overlapLength = 384;hopLength = windowLength - overlapLength;numHopsPerUpdate = 16;maskLength = hopLength * numHopsPerUpdate;

创建一个audioFeatureExtractor对象执行MFCC特征提取。

afe = audioFeatureExtractor (“SampleRate”fs,“窗口”损害(windowLength“周期”),“OverlapLength”overlapLength,“mfcc”,真的,“mfccDelta”,真的,“mfccDeltaDelta”,真正的);

下载和加载pretrained网络,以及平均()和标准差(年代)向量用于功能标准化。

url =“http://ssd.mathworks.com/万博1manbetxsupportfiles/audio/KeywordSpotting.zip”;downloadNetFolder =“。/”;netFolder = fullfile (downloadNetFolder,“KeywordSpotting”);如果~存在(netFolder“dir”)disp (文件下载pretrained网络和音频文件(4 - 7 MB)……”解压缩(url, downloadNetFolder)结束负载(fullfile (netFolder“KWSNet.mat”),“KWSNet”,“M”,“S”);

调用generateMATLABFunctionaudioFeatureExtractor对象创建特征提取功能。您将使用此函数在处理循环。

generateMATLABFunction (afe“generateKeywordFeatures”,“IsStreaming”,真正的);

定义一个音频设备的读者从你的麦克风,可以读取音频。设置帧长度等于跳。这使您能够计算一组新的功能,为每一个新的麦克风的音频帧。

frameLength = hopLength;adr = audioDeviceReader (“SampleRate”fs,“SamplesPerFrame”,frameLength);

创建一个时间范围可视化语音信号和估计面具。

范围= timescope (“SampleRate”fs,“TimeSpanSource”,“属性”,“时间间隔”5,“TimeSpanOverrunAction”,“滚动”,“BufferLength”fs * 5 * 2,“ShowLegend”,真的,“ChannelNames”,{“演讲”,“关键词面具”},“YLimits”(-1.2 - 1.2),“标题”,关键字定位的);

初始化音频数据的缓冲,缓冲的计算特性,和一个缓冲图输入音频和输出语音面具。

dataBuff = dsp.AsyncBuffer (windowLength);featureBuff = dsp.AsyncBuffer (numHopsPerUpdate);plotBuff = dsp.AsyncBuffer (numHopsPerUpdate * windowLength);

执行关键字发现收到你的麦克风讲话。无限循环运行,集期限。停止仿真,关闭范围

期限= 20;显示(范围);抽搐toc <期限& & isVisible(范围)数据= adr ();写(dataBuff、数据);写(plotBuff、数据);帧=阅读(dataBuff windowLength overlapLength);特点= generateKeywordFeatures(框架、fs);写(featureBuff特性。');如果featureBuff。NumUnreadSamples = = numHopsPerUpdate featureMatrix =阅读(featureBuff);featureMatrix (~ isfinite (featureMatrix)) = 0;featureMatrix = (featureMatrix - M)。/ S;[keywordNet v] = classifyAndUpdateState (KWSNet featureMatrix。');v =双(v) - 1;v = repmat (v hopLength 1);v = (,);v =模式(v);predictedMask = repmat (v numHopsPerUpdate * hopLength 1); data = read(plotBuff); scope([data,predictedMask]); drawnowlimitrate;结束结束发行版(adr)藏(范围)

helperKeywordSpotting万博1manbetx支持函数封装捕捉音频、特征提取和网络预测过程演示。特征提取与代码生成兼容,特征提取是由生成的generateKeywordFeatures函数。为了使网络兼容的代码生成,支持函数使用万博1manbetxcoder.loadDeepLearningNetwork(MATLAB编码器)(MATLAB编码器)函数加载网络。

支持函数万博1manbetx使用一个dsp.UDPSender系统对象发送输入数据以及MATLAB面具网络预测的输出。使用MATLAB脚本dsp.UDPReceiver系统对象接收输入数据和输出的面具的预测网络中运行的支持功能。万博1manbetx

在桌面生成可执行文件

创建一个代码生成配置对象生成一个可执行的。指定目标语言c++。

cfg = coder.config (exe”);cfg。TargetLang =“c++”;

创建一个配置对象的深度学习代码生成MKL-DNN图书馆。深度学习配置对象附加到代码生成配置对象。

dlcfg = coder.DeepLearningConfig (“mkldnn”);cfg。DeepLearningConfig = dlcfg;

生成c++主要生产所需的独立的可执行文件。

cfg。GenerateExampleMain =“GenerateCodeAndCompile”;

生成helperKeywordSpotting支持功能万博1manbetx,封装了音频采集、特征提取和网络预测过程。你会得到一个警告的代码生成日志,你可以无视,因为helperKeywordSpotting一个无限循环,不停地寻找一个音频帧从MATLAB。

codegenhelperKeywordSpotting配置cfg报告
警告:函数的helperKeywordSpotting并不因无限循环终止。= = > helperKeywordSpotting行警告:73列:1代码生成成功(警告):查看报告

准备依赖关系和运行生成的可执行文件

在本节中,您生成所有必需的依赖文件并把它们放进一个文件夹。在构建过程中,MATLAB编码器生成buildInfo.mat,一个文件,其中包含编译和运行时依赖信息独立的可执行文件。

设置项目名称helperKeywordSpotting

projName =“helperKeywordSpotting”;packageName = [projName,“包”];如果ispc exeName = [projName,. exe”];其他的exeName = projName;结束

负载buildinfo.mat和使用packNGo(MATLAB编码器)产生一个. zip包中。

负载([“codegen”filesep,exe”,projName filesep filesep,“buildInfo.mat”]);packNGo (buildInfo“文件名”packageName,“zip”),“minimalHeaders”、假);

解压缩包并解压缩目录中的可执行文件。

解压缩([packageName,“zip”),packageName);拷贝文件(exeName packageName,“f”);

调用一个独立的可执行文件,取决于MKL-DNN动态链接库,添加MKL-DNN库位置的路径环境变量路径

setenv (“路径”,采用“INTEL_MKLDNN”)、filesep“自由”、pathsep getenv (“路径”)));

运行生成的可执行文件。

如果ispc系统([“开始cmd / k”称号”packageName,“& & cd”packageName,“& &”exeName]);其他的cd (packageName);系统([“。/”exeName,“&”]);cd。。;结束

使用部署代码执行关键字定位

创建一个dsp.UDPReceiver系统对象接收语音数据和预测语音面具从独立的可执行文件。每个收到可执行包括UDP数据包maskLength面具样品和语音样本。的最大消息长度dsp.UDPReceiver对象是65507年字节。计算缓冲区的大小,以适应UDP数据包的最大数量。

sizeOfFloatInBytes = 4;speechDataLength = maskLength;numElementsPerUDPPacket = maskLength + speechDataLength;maxUDPMessageLength =地板(65507 / sizeOfFloatInBytes);samplesPerPacket = 1 + numElementsPerUDPPacket;numPackets =地板(maxUDPMessageLength / samplesPerPacket);bufferSize = numPackets * samplesPerPacket * sizeOfFloatInBytes;UDPReceive = dsp.UDPReceiver (“LocalIPPort”,20000,“MessageDataType”,“单一”,“MaximumMessageLength”samplesPerPacket,“下面的”bufferSize);

无限期地关键词定位,集期限。停止仿真,关闭范围

抽搐;期限= 20;显示(范围);toc <期限& & isVisible(范围)数据= UDPReceive ();如果~ isempty(数据)plotMask =数据(1:maskLength);plotAudio =数据(maskLength + 1: maskLength + speechDataLength);范围([plotAudio plotMask]);结束drawnowlimitrate;结束隐藏(范围);

释放系统的对象和终止独立可执行文件。

释放(UDPReceive);释放(范围);如果ispc系统([“taskkill / F / FI”WindowTitle eq”projName,“*”/ T”]);其他的系统([“killall”exeName]);结束
成功:过程与PID 4644(子进程的PID 21188)已经被终止。成功:过程与PID 20052(子进程的PID 21188)已经被终止。成功:过程与PID 21188(子进程的PID 22940)已经被终止。

评估执行时间使用替代墨西哥人工作流功能

类似的工作流程包括使用一个墨西哥人而不是独立的可执行文件。执行墨西哥人分析测量的计算时间工作流。

创建一个代码生成配置对象生成墨西哥人的功能。指定目标语言c++。

cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;

创建一个配置对象的深度学习代码生成MKL-DNN图书馆。深度学习配置对象附加到代码生成配置对象。

dlcfg = coder.DeepLearningConfig (“mkldnn”);cfg。DeepLearningConfig = dlcfg;

叫codegen生成的墨西哥人函数profileKeywordSpotting

inputAudioFrame = 1 (hopLength 1“单一”);codegenprofileKeywordSpotting配置cfgarg游戏{inputAudioFrame}报告
代码生成成功:查看报告

测量MATLAB代码的执行时间。

x = pinknoise (hopLength 1“单一”);numPredictCalls = 100;totalNumCalls = numPredictCalls * numHopsPerUpdate;exeTimeStart =抽搐;= 1:totalNumCalls [outputMask、inputData plotFlag] = profileKeywordSpotting (x);结束exeTime = toc (exeTimeStart);流(MATLAB的执行时间/ % d音频女士= % 0.4 f \ n '女士int32 (1000 * numHopsPerUpdate * hopLength / fs), (exeTime / numPredictCalls) * 1000);
MATLAB执行时间每128毫秒的音频= 24.9238 ms

措施的执行时间墨西哥人的功能。

exeTimeMexStart =抽搐;= 1:totalNumCalls [outputMask、inputData plotFlag] = profileKeywordSpotting_mex (x);结束exeTimeMex = toc (exeTimeMexStart);流(“墨西哥人执行时间/ % d音频女士= % 0.4 f \ n '女士int32 (1000 * numHopsPerUpdate * hopLength / fs), (exeTimeMex / numPredictCalls) * 1000);
墨西哥人每128毫秒执行时间的音频= 5.2710 ms

比较独立的可执行的方法的总执行时间和墨西哥人功能的方法。这样做性能测试是在一台计算机上使用NVIDIA方形住宅区®P620(26)版GPU和Intel Xeon w - 2133 CPU运行在3.60 GHz。

PerformanceGain = exeTime / exeTimeMex
PerformanceGain = 4.7285