此示例显示了用于使用深度学习的徽标分类应用程序的代码生成。它使用了Codegen.
命令生成对a执行预测的MEX函数系列网络
名为logoNet的对象。
必要
此示例生成CUDA MEX并具有以下第三方要求。
CUDA®支持NVIDIA®GPU和兼容的驱动程序。
可选
对于诸如静态,动态库或可执行文件的非MEX构建,此示例具有以下附加要求。
nvidia工具包。
nvidia cudnn图书馆。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件(GPU编码器)和设置先决条件产品s manbetx 845(GPU编码器)。
用来Coder.CheckGPuInstall.
(GPU编码器)验证运行此示例所需的编译器和库是否已正确设置。
envcfg = coder.gpuenvconfig('主人');envcfg.deeplibtarget =.'cudnn';envcfg.deepcodegen = 1;Envcfg.quiet = 1;Coder.CheckGpuInstall(Envcfg);
徽标协助用户品牌识别和识别。许多公司将他们的徽标纳入广告,文档材料和促销活动。徽标识别网络(LOGONET)是在MATLAB®中开发的,可以在各种照明条件和摄像机运动下识别32个徽标。由于此网络仅关注识别,因此您可以在不需要本地化的应用程序中使用它。
通过使用包含大约200张图像的训练数据,网络在MATLAB中培训。由于用于训练网络的图像数量小,因此数据增强增加了训练样本的数量。使用四种类型的数据增强:对比度标准化,高斯模糊,随机翻转和剪切。该数据增强有助于在不同的照明条件和相机运动中识别图像中的图像中的徽标。LOGONET的输入大小是[227 227 3]。标准SGDM通过使用0.0001的学习速率为40个时级的学习率,迷你批量大小为45.该trainlogonet.m.辅助脚本演示了样本图像,记录的架构和培训选项上的数据增强。
下载LogOnet网络并将其保存到logonet.mat.
。
getLogonet();
保存的网络包含22层,包括卷积,完全连接和分类输出层。
负载('logonet.mat');Convnet.Layers.
ANS = 22×1层阵列,层数:1'ImageInput'图像输入227×227×3图像,具有“Zerocenter”归一化和'Randfliplr'增强2'Conv_1'卷积96 5×5×3卷绕卷发[1 1]和填充[0 0 0 0] 3'Relu_1'Relu Relu 4'MaxPool_1'最大池3×3最大汇集步进[2 2]和填充[0 0 0 0] 5'CONC_2'卷积128 3×3×96围绕的卷曲[1 1]和填充[0 0 0 0] 6'Relu_2'Relu Relu 7'MaxPool_2'最大池3×3最大池与步幅[2 2]和填充[0 0 0 0] 8'conv_3'卷积384 3×3×128卷曲的卷发[11]和填充[0 0 0 0] 9'Creu_3'Relu 10'MaxPool_3'最大池3×3最大汇集步进[2 2]和填充[0 00 0] 11'CONC_4'卷积128 3×3×384卷曲的卷程[2 2]和填充[0 0 0 0] 12'CREU_4'CREU RELU 13'MAXPOOL_4'最大池3×3最大池与步幅汇集[22]和填充[0 0 0 0] 14'FC_1'完全连接的2048完全连接的层15'Relu_5'Relu Relu 16'Dropout_1'DroPOUT 50%丢弃器17'FC_2'完全连接2048完全连接的层18'Relu_6'Relu Relu 19'Dropout_2'丢弃50%丢弃20'FC_3'完全连接的32完全连接的层21'SoftMax'Softmax SoftMax SoftMax 22'ClassOutput'分类输出Frossentropyex与“adidas”和31个其他班级
logonet_predict.
入学点函数当logonet_predict.m.入口点函数采用图像输入并使用保存在的深度学习网络对图像进行预测logonet.mat.
文件。该功能加载网络对象logonet.mat.
进入持久变量记录并在后续预测调用上重用持久变量。
类型('logonet_predict.m')
函数= logonet_predict(in)%#codegen%2017-2019 Mathworks,Inc.持久登录;如果是isempty(ogonet)logonet = coder.loaddeeplearningnetwork('logonet.mat','logonet');结束= logonet.predict(in);结束
logonet_predict.
功能为MEX目标创建GPU配置对象,并将目标语言设置为C ++。用来coder.deeplearningconfig
(GPU编码器)功能创建一个CUDNN.
深度学习配置对象并将其分配给DeeplearningConfig
GPU代码配置对象的属性。要生成CUDA MEX,请使用Codegen.
命令并指定输入为大小[227,227,3]。该值对应于登录网络的输入层大小。
cfg = coder.gpuconfig('mex');cfg.targetlang =.'c ++';cfg.deeplearningconfig = coder.deeplearningconfig('cudnn');Codegen.-Config.CFG.logonet_predict.- args.{ONE(227,227,3,'UINT8')}-report.
代码生成成功:要查看报告,请打开('codegen / mex / logonet_predict / html / eport.mldatx')。
加载输入图像。打电话logonet_predict_mex.
在输入图像上。
Im = imread('test.png');imshow(IM);IM = IMResize(IM,[227,227]);predict_cores = logonet_predict_mex(IM);
将前五个预测分数映射到WordNet Diberst Synset(徽标)中的单词。
synsetut = {'阿迪达斯'那'aldi'那'苹果'那'贝克斯'那'宝马'那'卡尔斯伯格'那......'chimay'那'cocacola'那'Corona'那'dhl'那'erdinger'那'esso'那'Fedex'那......'法拉利'那'福特'那'福斯特'那“谷歌”那'juinness'那'heineken'那'惠普'那......'Milka'那'nvidia'那'paulaner'那'百事可乐'那'rittersport'那'壳'那'singha'那'星巴克'那'stablaartois'那'texaco'那'Tsingtao'那“UPS”};[val,Indx] = sort(predict_scores,“下降”);得分= val(1:5)* 100;top5labels = synsetut(Indx(1:5));
显示前五个分类标签。
OpersimImage =零(227,400,3,'uint8');对于k = 1:3 OutputImage(:,174:结束,k)= IM(:,:,k);结束scol = 1;srow = 20;对于k = 1:5 OutputImage = InsertText(OutputImage,[Scol,Srow],[Top5Labels {K},'',num2str(分数(k),'%2.2f'),'%'],'textcolor'那'W'那'fontsize'15,'boxcolor'那“黑”);srow = srow + 20;结束imshow(产来自Opersimage);
清除加载在内存中的静态网络对象。
清楚梅克斯;