主要内容

使用Intel MKL-DNN的卷积LSTM网络代码生成

这个例子展示了如何为深度学习网络生成MEX函数,该网络包含卷积和双向长短期记忆(BiLSTM)层,使用英特尔深度神经网络数学内核库(MKL-DNN)。生成的MEX函数从指定的视频文件中读取数据作为视频帧序列,并输出一个标签,用于对视频中的活动进行分类。有关该网络培训的更多信息,请参见示例使用深度学习对视频进行分类(深度学习工具箱)

第三方的先决条件

这个例子支持Mac®,Linux金宝app®和Windows®平台,不支持MATLAB在线。

准备输入

读取视频文件pushup.mp4通过使用readvideo辅助函数包含在支持文件中。金宝app若要查看视频,请遍历视频文件的各个帧,并使用imshow函数。

文件名=“pushup.mp4”;视频= readVideo(文件名);numFrames =大小(视频、4);数字帧=视频(:,:,:,i);imshow(帧/ 255);drawnow结束

将输入的视频帧裁剪为训练后的网络的输入大小centerCrop作为支持文件附加的助手函数。金宝app

inputSize = [224 224 3];视频= centerCrop(视频、inputSize);

video_classify入口点函数

video_classify.m入口点函数将图像序列传递给训练好的网络进行预测。该函数使用示例中训练的卷积LSTM网络使用深度学习对视频进行分类(深度学习工具箱).函数从文件中加载网络对象net.mat文件转换为持久变量,然后使用分类(深度学习工具箱)函数执行预测。在随后的调用中,该函数重用已经加载的持久对象。

类型(“video_classify.m”
在执行第一个函数调用期间,网络对象%被加载到持久变量mynet中。在随后的调用中,这个加载的%对象将被重用。持久mynet;if isempty(mynet) mynet = code . loaddeeplearningnetwork ('net.mat');end %提供输入并执行预测输出= classification (mynet,in);

生成墨西哥人

要生成MEX函数,请创建编码器。MexCodeConfig对象cfg.设置TargetLang的属性cfgc++。使用编码器。DeepLearningConfig函数为MKL-DNN创建一个深度学习配置对象。将其分配给DeepLearningConfig财产的cfg

cfg = coder.config (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“mkldnn”);

运行getVideoClassificationNetwork下载视频分类网络并将网络保存到MAT文件中net.mat

getVideoClassificationNetwork ();

使用coder.typeof函数指定入口点函数的输入参数的类型和大小。在这个例子中,输入是具有大小的double类型(224 224)一个可变的序列长度。

Input = coder.typeof(double(0),[224 224 3 Inf],[false false false true]);

控件生成一个MEX函数codegen命令。

codegen配置cfgvideo_classifyarg游戏{输入}报告
代码生成成功:查看报告

运行生成的墨西哥人

使用中间裁剪的视频输入运行生成的MEX函数。

输出= video_classify_mex(视频)
输出=分类俯卧撑

将预测叠加到输入视频上。

视频= readVideo(文件名);numFrames =大小(视频、4);数字帧=视频(:,:,:,i);frame = insertText(frame, [1 1], char(output),“输入TextColor”, [255 255 255],“字形大小”30岁的“BoxColor”, [0 0 0]);imshow(帧/ 255);drawnow结束

另请参阅

||

相关的话题