Main Content

Intel MKL-DNN による音声コマンド認識コードの生成

この例では、音声コマンド認識のための特徴抽出と畳み込みニューラル ネットワーク (CNN) を Intel® プロセッサで展開する方法を説明します。特徴抽出とネットワーク コードを生成するために、MATLAB® Coder™ と Intel® Math Kernel Library for Deep Neural Networks (MKL-DNN) を使用します。この例では、生成されたコードは MATLAB 実行可能ファイル (MEX) 関数であり、予測された音声コマンドと時間領域信号および聴覚スペクトログラムを表示する MATLAB スクリプトによって呼び出されます。オーディオの前処理およびネットワーク学習の詳細については、Train Speech Command Recognition Model Using Deep Learning (Audio Toolbox)を参照してください。

必要条件

  • MATLAB Coder Interface for Deep Learning Libraries サポート パッケージ

  • Intel Advanced Vector Extensions 2 (Intel AVX2) をサポートする Xeon プロセッサ

  • Intel Math Kernel Library for Deep Neural Networks (MKL-DNN)

  • Intel MKL-DNN の環境変数

サポートされるライブラリのバージョン、および環境変数の設定の詳細については、深層学習に MATLAB Coder を使用するための前提条件 (MATLAB Coder)を参照してください。

MATLAB でのストリーミングのデモ

特徴抽出パイプラインおよび分類に関して、Train Speech Command Recognition Model Using Deep Learning (Audio Toolbox)で構築したのと同じパラメーターを使用します。

ネットワークに学習させたのと同じサンプル レート (16 kHz) を定義します。分類レートと、フレームごとに入力されるオーディオ サンプルの数を定義します。ネットワークに入力される特徴は、オーディオ データ 1 秒に対応するバーク スペクトログラムです。バーク スペクトログラムは、10 ms のホップをもつ 25 ms のウィンドウについて計算されます。

fs = 16000; 
classificationRate = 20;
samplesPerCapture = fs/classificationRate;

segmentDuration = 1;
segmentSamples = round(segmentDuration*fs);

frameDuration = 0.025;
frameSamples = round(frameDuration*fs);

hopDuration = 0.010;
hopSamples = round(hopDuration*fs);

audioFeatureExtractor (Audio Toolbox)オブジェクトを作成し、ウィンドウを正規化せずに帯域数 50 のバーク スペクトログラムを抽出します。

afe = audioFeatureExtractor( ...
    SampleRate=fs, ...
    FFTLength=512, ...
    Window=hann(frameSamples,"periodic"), ...
    OverlapLength=frameSamples - hopSamples, ...
    barkSpectrum=true);

numBands = 50;
setExtractorParameters(afe,"barkSpectrum",NumBands=numBands,WindowNormalization=false);

事前学習済みの畳み込みニューラル ネットワークとラベルを読み込みます。

load('SpeechCommandRecognitionNetwork.mat')
numLabels = numel(labels);
backgroundIdx = find(labels == 'background'); 

バッファーおよび判定しきい値を定義し、ネットワーク予測を後処理します。

probBuffer = single(zeros([numLabels,classificationRate/2]));
YBuffer = single(numLabels * ones(1, classificationRate/2)); 

countThreshold = ceil(classificationRate*0.2);
probThreshold = single(0.7);

audioDeviceReader (Audio Toolbox)オブジェクトを作成し、デバイスからオーディオを読み取ります。dsp.AsyncBuffer (DSP System Toolbox)オブジェクトを作成し、オーディオをチャンクにバッファリングします。

adr = audioDeviceReader(SampleRate=fs,SamplesPerFrame=samplesPerCapture,OutputDataType='single');
audioBuffer = dsp.AsyncBuffer(fs);

dsp.MatrixViewer (DSP System Toolbox)オブジェクトおよびtimescope (DSP System Toolbox)オブジェクトを作成し、結果を表示します。

matrixViewer = dsp.MatrixViewer( ...
    ColorBarLabel="Power per band (dB/Band)", ...
    XLabel="Frames", ...
    YLabel="Bark Bands", ...
    Position=[400 100 600 250], ...
    ColorLimits=[-4 2.6445], ...
    AxisOrigin="Lower left corner", ...
    Name="Speech Command Recognition Using Deep Learning");

timeScope = timescope( ...
    SampleRate=fs, ...
    YLimits=[-1 1], ...
    Position=[400 380 600 250], ...
    Name="Speech Command Recognition Using Deep Learning", ...
    TimeSpanSource="Property", ...
    TimeSpan=1, ...
    BufferLength=fs);

timeScope.YLabel = "Amplitude";
timeScope.ShowGrid = true;

時間スコープおよび行列ビューアーを表示します。時間スコープおよび行列ビューアーの両方が開いているか、制限時間に達するまで、コマンドを検出します。制限時間に達する前にライブ検出を停止するには、時間スコープ ウィンドウまたは行列ビューアー ウィンドウを閉じます。

show(timeScope)
show(matrixViewer)
timeLimit = 10;

tic
while isVisible(timeScope) && isVisible(matrixViewer) && toc < timeLimit
    %% Capture Audio
    x = adr();
    write(audioBuffer,x);
    y = read(audioBuffer,fs,fs-samplesPerCapture);
    
    % Compute auditory features
    features = extract(afe,y);
    auditory_features = log10(features + 1e-6);
    
    % Transpose to get the auditory spectrum
    auditorySpectrum = auditory_features';
    
    % Perform prediction
    score = predict(net,auditory_features);      
    [~,YPredicted] = max(score);
    
    % Perform statistical post processing
    YBuffer = [YBuffer(2:end),YPredicted];
    probBuffer = [probBuffer(:,2:end),score(:)];

    [YMode_idx, count] = mode(YBuffer);
    count = single(count);
    maxProb = max(probBuffer(YMode_idx,:));

    if (YMode_idx == single(backgroundIdx) || count < countThreshold || maxProb < probThreshold)
        speechCommandIdx = backgroundIdx;
    else
        speechCommandIdx = YMode_idx;
    end
    
    % Update plots
    matrixViewer(auditorySpectrum);
    timeScope(x);

    if (speechCommandIdx == backgroundIdx)
        timeScope.Title = ' ';
    else
        timeScope.Title = char(labels(speechCommandIdx));
    end
    drawnow
end 

スコープを非表示にします。

hide(matrixViewer)
hide(timeScope)

MATLAB コードの展開準備

コード生成と互換性がある特徴抽出を実行する関数を作成するには、audioFeatureExtractor オブジェクトでgenerateMATLABFunction (Audio Toolbox)を呼び出します。オブジェクト関数 generateMATLABFunction は、コード生成と互換性があり、同等の特徴抽出を実行するスタンドアロン関数を作成します。

generateMATLABFunction(afe,"extractSpeechFeatures")

サポート関数 HelperSpeechCommandRecognition は、以前に説明した特徴抽出およびネットワーク予測プロセスをカプセル化します。特徴抽出はコード生成と互換性があるため、特徴抽出は生成された関数 extractSpeechFeatures によって処理されます。ネットワークはコード生成と互換性があるため、サポート関数は関数coder.loadDeepLearningNetwork (MATLAB Coder)を使用してネットワークを読み込みます。

関数 HelperSpeechCommandRecognition を使用し、音声コマンドのライブ検出を実行します。

show(timeScope)
show(matrixViewer)
timeLimit = 10;

tic
while isVisible(timeScope) && isVisible(matrixViewer) && toc < timeLimit
    x = adr();    
        
    [speechCommandIdx, auditorySpectrum] = HelperSpeechCommandRecognition(x);  
		
    matrixViewer(auditorySpectrum);
    timeScope(x);
   
    if (speechCommandIdx == backgroundIdx)
        timeScope.Title = ' ';
    else
        timeScope.Title = char(labels(speechCommandIdx));
    end
    drawnow
end

スコープを非表示にします。

hide(timeScope)
hide(matrixViewer)

MATLAB 実行可能ファイルの生成

実行可能プログラムの生成用にコード生成構成オブジェクトを作成します。ターゲット言語を C++ に指定します。

cfg = coder.config('mex');
cfg.TargetLang = 'C++';

MKL-DNN ライブラリで深層学習コード生成用の構成オブジェクトを作成します。コード生成構成オブジェクトに構成オブジェクトを追加します。

dlcfg = coder.DeepLearningConfig('mkldnn');
cfg.DeepLearningConfig = dlcfg;

codegen (MATLAB Coder)を呼び出し、関数 HelperSpeechCommandRecognition 用の C++ コードを生成します。構成オブジェクトとプロトタイプの引数を指定します。HelperSpeechCommandRecognition_mex という名前の MEX ファイルが現在のフォルダーに生成されます。

codegen HelperSpeechCommandRecognition -config cfg -args {rand(samplesPerCapture, 1, 'single')} -profile -report -v
### Compiling function(s) HelperSpeechCommandRecognition ...
------------------------------------------------------------------------
[1/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  HelperSpeechCommandRecognition_data.cpp /Fobuild\win64\HelperSpeechCommandRecognition_data.obj
HelperSpeechCommandRecognition_data.cpp
[2/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  eml_int_forloop_overflow_check.cpp /Fobuild\win64\eml_int_forloop_overflow_check.obj
eml_int_forloop_overflow_check.cpp
[3/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  rt_nonfinite.cpp /Fobuild\win64\rt_nonfinite.obj
rt_nonfinite.cpp
[4/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  colon.cpp /Fobuild\win64\colon.obj
colon.cpp
[5/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  HelperSpeechCommandRecognition_initialize.cpp /Fobuild\win64\HelperSpeechCommandRecognition_initialize.obj
HelperSpeechCommandRecognition_initialize.cpp
[6/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  HelperSpeechCommandRecognition_terminate.cpp /Fobuild\win64\HelperSpeechCommandRecognition_terminate.obj
HelperSpeechCommandRecognition_terminate.cpp
[7/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  log10.cpp /Fobuild\win64\log10.obj
log10.cpp
[8/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  interface\_coder_HelperSpeechCommandRecognition_mex.cpp /Fobuild\win64\_coder_HelperSpeechCommandRecognition_mex.obj
_coder_HelperSpeechCommandRecognition_mex.cpp
[9/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  interface\_coder_HelperSpeechCommandRecognition_api.cpp /Fobuild\win64\_coder_HelperSpeechCommandRecognition_api.obj
_coder_HelperSpeechCommandRecognition_api.cpp
[10/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  sort.cpp /Fobuild\win64\sort.obj
sort.cpp
[11/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  permute.cpp /Fobuild\win64\permute.obj
permute.cpp
[12/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\version\cpp_mexapi_version.cpp /Fobuild\win64\cpp_mexapi_version.obj
cpp_mexapi_version.cpp
[13/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  interface\_coder_HelperSpeechCommandRecognition_info.cpp /Fobuild\win64\_coder_HelperSpeechCommandRecognition_info.obj
_coder_HelperSpeechCommandRecognition_info.cpp
[14/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  HelperSpeechCommandRecognition_mexutil.cpp /Fobuild\win64\HelperSpeechCommandRecognition_mexutil.obj
HelperSpeechCommandRecognition_mexutil.cpp
[15/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  extractSpeechFeatures.cpp /Fobuild\win64\extractSpeechFeatures.obj
extractSpeechFeatures.cpp
[16/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  stft.cpp /Fobuild\win64\stft.obj
stft.cpp
[17/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  sortIdx.cpp /Fobuild\win64\sortIdx.obj
sortIdx.cpp
[18/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  DeepLearningNetwork.cpp /Fobuild\win64\DeepLearningNetwork.obj
DeepLearningNetwork.cpp
[19/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  predict.cpp /Fobuild\win64\predict.obj
predict.cpp
[20/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  HelperSpeechCommandRecognition.cpp /Fobuild\win64\HelperSpeechCommandRecognition.obj
HelperSpeechCommandRecognition.cpp
[21/22] cl /c /Zp8 /GR /W3 /EHs /nologo /MD /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   /DMATLAB_MEX_FILE  /DMATLAB_MEX_FILE /O2 /Oy- /DNDEBUG /fp:strict /utf-8 /I "." /I "C:\Users\bhemmat\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\bhemmat.Bdoc24a.j2459562\deeplearning_shared-ex90506783" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include\mkldnn" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\layer" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\derived\win64\src\include\onednn" /I ".\interface" /I "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\include" /I "." -DMODEL=HelperSpeechCommandRecognition_mex -DMW_NEEDS_VERSION_H /wd4251  AsyncBuffer.cpp /Fobuild\win64\AsyncBuffer.obj
AsyncBuffer.cpp
[22/22] link build\win64\HelperSpeechCommandRecognition_data.obj build\win64\rt_nonfinite.obj build\win64\HelperSpeechCommandRecognition_initialize.obj build\win64\HelperSpeechCommandRecognition_terminate.obj build\win64\HelperSpeechCommandRecognition.obj build\win64\DeepLearningNetwork.obj build\win64\colon.obj build\win64\stft.obj build\win64\permute.obj build\win64\predict.obj build\win64\extractSpeechFeatures.obj build\win64\_coder_HelperSpeechCommandRecognition_api.obj build\win64\_coder_HelperSpeechCommandRecognition_mex.obj build\win64\eml_int_forloop_overflow_check.obj build\win64\log10.obj build\win64\sort.obj build\win64\sortIdx.obj build\win64\AsyncBuffer.obj build\win64\HelperSpeechCommandRecognition_mexutil.obj build\win64\_coder_HelperSpeechCommandRecognition_info.obj build\win64\cpp_mexapi_version.obj "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\lib\win64\mwdnnl.lib" "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\lib\win64\shared_layers.lib" "Z:\85\bhemmat.Bdoc24a.j2459562\matlab\lib\win64\onednn_layers.lib" /nologo /manifest   /DLL /LIBPATH:"Z:\85\bhemmat.Bdoc24a.j2459562\matlab\extern\lib\win64\microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libMatlabDataArray.lib libMatlabEngine.lib  /out:"HelperSpeechCommandRecognition_mex.mexw64" libemlrt.lib libcovrt.lib libut.lib libmwmathutil.lib 
   Creating library HelperSpeechCommandRecognition_mex.lib and object HelperSpeechCommandRecognition_mex.exp

------------------------------------------------------------------------
### Generating compilation report ...
Code generation successful: View report

展開されたコードを使用した音声コマンド認識の実行

時間スコープおよび行列ビューアーを表示します。時間スコープおよび行列ビューアーの両方が開かれている間、または制限時間に達するまで、生成された MEX を使用してコマンドを検出します。制限時間に達する前にライブ検出を停止するには、時間スコープ ウィンドウまたは行列ビューアー ウィンドウを閉じます。

show(timeScope)
show(matrixViewer)

timeLimit = 20;

tic
while isVisible(timeScope) && isVisible(matrixViewer) && toc < timeLimit
    x = adr();    
        
    [speechCommandIdx, auditorySpectrum] = HelperSpeechCommandRecognition_mex(x);
		
    matrixViewer(auditorySpectrum);
    timeScope(x);
   
    if (speechCommandIdx == backgroundIdx)
        timeScope.Title = ' ';
    else
        timeScope.Title = char(labels(speechCommandIdx));
    end
    drawnow
end

hide(matrixViewer)
hide(timeScope)

LivespeechCommandRecognsnapshot-right.png

MEX 実行時間の評価

tic および toc を使用し、MATLAB でシミュレーションを完全に実行するための実行時間と、MEX 関数の実行時間を比較します。

シミュレーション コードのパフォーマンスを測定します。

testDur = 50e-3;
x = pinknoise(fs*testDur,'single');
numLoops = 100;
tic
for k = 1:numLoops
    [speechCommandIdx, auditory_features] = HelperSpeechCommandRecognition(x);
end
exeTime = toc;
fprintf('SIM execution time per 50 ms of audio = %0.4f ms\n',(exeTime/numLoops)*1000);
SIM execution time per 50 ms of audio = 11.4019 ms

MEX コードのパフォーマンスを測定します。

tic
for k = 1:numLoops
    [speechCommandIdx, auditory_features] = HelperSpeechCommandRecognition_mex(x);
end
exeTimeMex = toc;
fprintf('MEX execution time per 50 ms of audio = %0.4f ms\n',(exeTimeMex/numLoops)*1000);
MEX execution time per 50 ms of audio = 1.6856 ms

MEX 関数を使用し、得られるパフォーマンスを評価します。このパフォーマンス テストは、NVIDIA Titan V GPU と、3.60 GHz で動作する Intel(R) Xeon(R) W-2133 CPU を使用するマシン上で実行されています。

PerformanceGain = exeTime/exeTimeMex
PerformanceGain = 6.7643