关键字定位与英特尔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网络的采样率16
kHz。设置窗口长度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”);
调用generateMATLABFunction
在audioFeatureExtractor
对象创建特征提取功能。您将使用此函数在处理循环。
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