主要内容

基于Intel MKL-DNN的卷积LSTM网络代码生成

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

第三方的先决条件

此示例支持Mac®,Linux®万博1manbetx和Windows®平台,不支持MATLAB Online。

准备输入

阅读视频文件pushup.mp4通过使用readvideo辅助函数包含在支持文件中。万博1manbetx要查看视频,请循环遍历视频文件的各个帧并使用imshow函数。

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

对输入视频帧进行居中裁剪,使其符合训练过的网络的输入大小centerCrop辅助函数作为支持文件附加。万博1manbetx

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 %提供输入并执行预测输出=分类(mynet,in);

生成墨西哥人

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

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

运行getVideoClassificationNetwork助手功能下载视频分类网络并将网络保存在MAT文件中net.mat

getVideoClassificationNetwork ();

使用coder.typeof函数指定入口点函数的输入参数的类型和大小。在本例中,输入是具有大小的双重类型[224 224 3]和可变的序列长度。

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

命令生成MEX函数codegen命令。

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

运行生成的MEX

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

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

将预测覆盖到输入视频上。

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

另请参阅

||

相关的话题