主要内容

代码生成深度学习网络

这个例子展示了如何执行代码生成图像分类应用程序,使用深度学习。它使用codegen命令来生成一个墨西哥人函数运行预测通过使用图像分类网络如MobileNet-v2 ResNet, GoogLeNet。

第三方的先决条件

要求

这个示例中生成CUDA墨西哥人,有以下第三方的要求。

  • CUDA®启用NVIDIA GPU®和兼容的驱动程序。

可选

等non-MEX构建静态、动态库或可执行文件,这个例子有以下额外的需求。

验证GPU环境

使用coder.checkGpuInstall函数来确认所需的编译器和库运行这个例子是正确设置。

envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

mobilenetv2_predict入口点函数

MobileNet-v2是一个卷积神经网络,训练图像从ImageNet数据库超过一百万。网络是155层深,可以分类图像到1000年对象类别,如键盘,鼠标,铅笔,和许多动物。的网络图像输入大小224 - 224。使用analyzeNetwork(深度学习工具箱)函数显示深度学习网络的交互式可视化体系结构。

网= mobilenetv2 ();analyzeNetwork(净);

mobilenetv2_predict.m入口点函数接受一个图像输入和运行预测图像使用pretrained MobileNet-v2卷积神经网络。函数使用一个持久对象mynet加载系列网络对象和重用的持久对象预测在随后的电话。

类型(“mobilenetv2_predict.m”)
% 2017 - 2019版权MathWorks公司= mobilenetv2_predict函数()% # codegen持久mynet;如果isempty (mynet) mynet = coder.loadDeepLearningNetwork (“mobilenetv2”、“mobilenetv2”);结束%通过在输入= mynet.predict(的);

墨西哥人运行代码生成

生成CUDA代码mobilenetv2_predict入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig函数创建一个CuDNN深度学习配置对象,并将其分配给DeepLearningConfigGPU代码配置对象的属性。运行codegen命令并指定一个输入(224224 3)的大小。这个值对应的输入层大小MobileNet-v2网络。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfgmobilenetv2_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

生成的代码描述

系列网络生成c++类包含一个数组的155层类和函数,调用预测,清理网络。

b_mobilenetv2_0{公众:b_mobilenetv2_0 ();无效的设置();无效的预测();无效的清理();~ b_mobilenetv2_0 ();};

设置()类的方法设置处理,为每一层的网络对象分配内存。的预测()方法执行预测网络中为每个155层。

的入口点函数mobilenetv2_predict ()在生成的代码文件中mobilenetv2_predict.cu构造一个静态的对象b_mobilenetv2类类型并调用设置和预测网络对象。

静态b_mobilenetv2_0mynet;静态boolean_Tmynet_not_empty;
/ *函数定义* /无效mobilenetv2_predict (const real_T [150528], [1000] real32_T){如果(! mynet_not_empty) {DeepLearningNetwork_setup (&mynet);mynet_not_empty = true;}
/ *通过输入* / DeepLearningNetwork_predict (&mynet,,);}

二进制文件导出为层参数完全连接和卷积等在网络层。例如,文件cnn_mobilenetv2_conv * _w和cnn_mobilenetv2_conv * _b对应重量和偏见卷积网络层的参数。看到生成的文件的列表,使用:

dir (fullfile (pwd,“codegen”,墨西哥人的,“mobilenetv2_predict”))

运行生成的墨西哥人

加载一个输入图像。

我= imread (“peppers.png”);imshow (im);

调用mobilenetv2_predict_mex在输入图像。

[224224]im = imresize (im);predict_scores = mobilenetv2_predict_mex(双(im));

五大预测分数和标签。

[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用MobileNet-v2”)

清晰的静态网络对象在内存中加载。

清晰的墨西哥人;

通过使用ResNet-50网络分类的图像

您还可以使用DAG网络ResNet-50图像分类。一个pretrained ResNet-50 MATLAB模型中可用ResNet-50深度学习工具箱支持包。金宝app下载并安装包的支持,使用附加的探险家。金宝app更多地了解查找和安装附件,请参阅获取和管理插件

网= resnet50;disp(净)
DAGNetwork属性:层:[177×1 nnet.cnn.layer.Layer]连接:[192×2表]InputNames: {“input_1”} OutputNames: {“ClassificationLayer_fc1000”}

墨西哥人运行代码生成

生成CUDA代码resnet_predict.m入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。这个入口点函数调用resnet50函数加载网络和对输入图像进行预测。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfgresnet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

调用resnet_predict_mex在输入图像。

predict_scores = resnet_predict_mex(双(im));

五大预测分数和标签。

[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用ResNet-50”)

清晰的静态网络对象在内存中加载。

清晰的墨西哥人;

分类的图像通过使用GoogLeNet(《盗梦空间》)网络

一个pretrained GoogLeNet MATLAB模型中可用GoogLeNet深度学习工具箱支持包。金宝app下载并安装包的支持,使用附加的探险家。金宝app更多地了解查找和安装附件,请参阅获取和管理插件

网= googlenet;disp(净)
DAGNetwork属性:层:[144×1 nnet.cnn.layer.Layer]连接:[170×2表]InputNames:{“数据”}OutputNames:{“输出”}

墨西哥人运行代码生成

生成CUDA代码googlenet_predict.m入口点函数。这个入口点函数调用googlenet函数加载网络和对输入图像进行预测。生成代码入口点函数,为墨西哥人创建一个GPU配置对象的目标。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“cudnn”);codegen配置cfggooglenet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

调用googlenet_predict_mex在输入图像。

[224224]im = imresize (im);predict_scores = googlenet_predict_mex(双(im));

五大预测分数和标签。

[分数,indx] =排序(predict_scores“下”);一会= net.Layers .ClassNames(结束);classNamesTop =一会(indx (1:5));h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);图像(ax₁, im);barh (ax2,分数(5:1:1))包含(ax2,“概率”)yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle (“五大预测使用GoogLeNet”)

清晰的静态网络对象在内存中加载。

清晰的墨西哥人;

另请参阅

功能

对象

相关的话题