主要内容

标志识别网络

这个例子展示了一个使用深度学习的标识分类应用程序的代码生成。它使用codegen命令生成一个MEX函数,该函数对SeriesNetwork对象称为LogoNet。

第三方的先决条件

要求

本例生成CUDA®MEX,并具有以下第三方需求。

  • CUDA支持NVIDIA®GPU和兼容驱动程序。

可选

对于非mex构建,如静态、动态库或可执行文件,本例有以下附加要求。

验证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助手脚本演示了示例图像上的数据增强、登录网的体系结构和培训选项。

得到Pretrained SeriesNetwork

下载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);结束

生成CUDA MEXlogonet_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);

清除加载到内存中的静态网络对象。

清晰的墨西哥人

相关的话题