这个例子展示了一个使用深度学习的标识分类应用程序的代码生成。它使用codegen
命令生成一个MEX函数,该函数对SeriesNetwork
对象称为LogoNet。
要求
本例生成CUDA®MEX,并具有以下第三方需求。
CUDA支持NVIDIA®GPU和兼容驱动程序。
可选
对于非mex构建,如静态、动态库或可执行文件,本例有以下附加要求。
英伟达工具包。
英伟达cuDNN图书馆。
编译器和库的环境变量。有关更多信息,请参见第三方硬件(GPU编码器)和设置前提产品下载188bet金宝搏(GPU编码器).
使用coder.checkGpuInstall
(GPU编码器)函数来验证运行此示例所需的编译器和库是否正确设置。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
标志帮助用户识别和识别品牌。许多公司在广告、文档材料和促销活动中都使用了他们的商标。标志识别网络(logonet)是在MATLAB®中开发的,可以在各种照明条件和摄像机运动下识别32个标志。因为这个网络只专注于识别,所以您可以在不需要本地化的应用程序中使用它。
网络在MATLAB中进行训练,使用的训练数据包含每个标识大约200幅图像。由于用于训练网络的图像数量较少,数据增强增加了训练样本的数量。使用了四种类型的数据增强:对比度归一化、高斯模糊、随机翻转和剪切。这种数据增强有助于在不同光照条件和相机动作捕捉的图像中识别标识。logonet的输入尺寸是227 × 227 × 3。标准的SGDM训练使用学习率0.0001为40个时代,小批量大小为45。的trainLogonet.m助手脚本演示了示例图像上的数据增强、登录网的体系结构和培训选项。
下载logonet网络并保存到LogoNet.mat
.
getLogonet ();
所保存的网络包含22层,包括卷积层、全连接层和分类输出层。
负载(“LogoNet.mat”);事先
事先=SeriesNetwork属性:[22×1 nnet.cnn.layer.Layer] InputNames: {'imageinput'} OutputNames: {'classoutput'}
若要查看网络架构,请使用analyzeNetwork
函数。
analyzeNetwork(事先)
logonet_predict
入口点函数的logonet_predict.m
入口点函数取图像输入,利用存储在的深度学习网络对图像进行预测LogoNet.mat
文件。函数从LogoNet.mat
变成一个持久变量logonet并在后续的预测调用中重用持久变量。
类型(“logonet_predict.m”)
Copyright 2017-2020 The MathWorks, Inc. persistent logonet;if isempty(logonet) logonet = code . loaddeeplearningnetwork (' logonet .mat','logonet');End out = logonet.predict(in);结束
logonet_predict
函数为MEX目标创建GPU配置对象,并设置目标语言为c++。使用编码器。DeepLearningConfig
(GPU编码器)函数创建CuDNN
的深度学习配置对象,并将其分配给DeepLearningConfig
图形处理器代码配置对象的属性。要生成CUDA MEX,使用codegen
命令并指定输入的大小[227,227,3]。这个值对应logonet网络的输入层大小。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfglogonet_predictarg游戏{(227227 3 uint8)}报告
代码生成成功:查看报告
加载一个输入图像。调用logonet_predict_mex
在输入图像上。
我= imread (“test.png”);imshow (im);
Im = imresize(Im, [227,227]);predict_scores = logonet_predict_mex (im);
将排名前五的预测分数映射到Wordnet字典同义词集(徽标)中的单词。
synsetOut = {“阿迪达斯”,“阿尔迪”,“苹果”,“小贝”,“宝马”,“嘉士伯”,...“chimay”,“可口可乐”,“电晕”,“dhl”,“埃尔丁”,“埃索”,“联邦快递”,...“法拉利”,“福特”,“培养”,“谷歌”,“吉尼斯”,“喜力”,“惠普”,...“milka”,“英伟达”,“paulaner”,“百事可乐”,“rittersport”,“壳”,...“啤酒”,“星巴克”,“stellaartois”,“德”,“青岛啤酒”,“ups”};[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;top5labels = synsetOut (indx (1:5));
显示前5个分类标签。
outputImage = 0(227400年3“uint8”);为k = 1:3 outputImage(:,174:end,k) = im(:,:,k);结束scol = 1;srow = 20;为k = 1:5输出说明:...[top5labels {k},' 'num2str(分数(k),' % 2.2 f '),“%”],...“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);Srow = Srow + 20;结束imshow (outputImage);
清除加载到内存中的静态网络对象。
清晰的墨西哥人;