基于Intel MKL-DNN的卷积LSTM网络代码生成
这个例子展示了如何使用Intel深度神经网络数学内核库(MKL-DNN)为包含卷积和双向长短期记忆(BiLSTM)层的深度学习网络生成MEX函数。生成的MEX函数从指定的视频文件中读取数据作为视频帧序列,并输出一个标签,用于对视频中的活动进行分类。有关该网络培训的更多信息,请参见示例使用深度学习对视频进行分类(深度学习工具箱).
第三方的先决条件
Intel深度神经网络数学内核库(MKL-DNN)
有关支持MKL-DNN库的处理器列表,请参见万博1manbetxMKLDNN CPU支万博1manbetx持
有关编译器和库的支持版本的更多信息,请参见万博1manbetx用MATLAB编码器进行深度学习的先决条件
此示例支持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
的属性cfg
c++。使用编码器。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结束
另请参阅
编码器。DeepLearningConfig
|coder.typeof
|codegen