这个例子展示了如何生成和部署使用MaSimeNET-V2预训练网络进行对象预测的C++代码。
支持NEON扩展的ARM处理器金宝app
ARM计算库(在目标ARM硬件上)
开源计算机视觉库(OpenCV)v2.4(在目标ARM硬件上)
编译器和库的环境变量
MATLAB®编码器™
用于深度学习库的MATLAB编码器接口支持包金宝app
深度学习工具箱™
MobileNet-v2网络支持包的深度学习工具箱模型金宝app
图像处理工具箱™
Raspber金宝appry Pi硬件的MATLAB支持包
此示例使用的ARM计算库版本可能不是代码生成支持的最新版本。有关支持的库版本和有关设置环境变量的信息,请参阅金宝app使用MATLAB编码器进行深入学习的先决条件.
MATLAB online不支持此示例。金宝app
此示例使用DAG网络MobileNet-v2使用ARM®计算库执行图像分类。MobileNet-v2网络支持包的深度学习工具箱模型中提供了针对MATLAB的预训练MobileNet-v2网络。金宝app
生成使用ARM计算库和硬件支持包的代码时,金宝app编码基因
在主机上生成代码,将生成的文件复制到目标硬件,并在目标硬件上生成可执行文件。
美孚公司
作用这个美孚公司
函数在输入图像上调用MobileNet-v2网络对象的predict方法,并返回预测分数输出。函数调用coder.updateBuildInfo
为生成的生成文件指定链接选项。
类型美孚公司
函数out=mobilenet_predict(in)persistent net;opencv_linkflags='`pkg config--cflags--libs opencv`';coder.updateBuildInfo('addLinkFlags',opencv_linkflags');如果isempty(net)net=coder.loadDeepLearningNetwork('mobilenetv2',mobilenet');end out=net.predict(in);end
创建C++代码生成配置对象。
cfg=coder.config(“exe”);cfg.TargetLang=“C++”;
指定ARM计算库的使用。ARM计算库为Raspberry Pi硬件提供优化的功能。若要生成使用ARM计算库的代码,请创建ARMNEONConfig编码器
对象。指定Raspberry Pi上安装的ARM计算库的版本和Raspberry Pi的体系结构。将深度学习配置对象附加到代码生成配置对象。
dlcfg=coder.DeepLearningConfig(“arm计算”);s金宝appupportedVersions=dlcfg.GetArmComputesSupportedVersions;dlcfg.ArmaArchitecture=“armv7”;dlcfg.ArmComputeVersion='19.05'; cfg.DeepLearningConfig=dlcfg;
使用MATLAB支持包实现Ra金宝appspberry Pi硬件功能拉斯皮
要创建到Raspberry Pi的连接,请在此代码中替换:
树莓名称
主机名是你的树莓皮
用户名
使用您的用户名
暗语
用你的密码
r=拉斯皮(“raspiname”,“用户名”,“密码”);
创建一个编码器.硬件
对象,并将其附加到代码生成配置对象。
hw=编码器硬件(“覆盆子皮”)硬件=硬件;
在Raspberry Pi上指定生成文件夹:
buildDir=“~/remoteBuildDir”;cfg.Hardware.BuildDir=BuildDir;
指定主文件main_mobilenet.cpp
在代码生成配置对象中,文件调用生成的C++代码美孚公司
该文件读取输入图像,将数据传递给生成的函数调用,检索图像上的预测,并将预测分数打印到文件中。
cfg.CustomSource=“main_mobilenet.cpp”;
生成C++代码。编码基因
通过Raspberry PI硬件金宝app的MATLAB支持包,可执行文件构建在Raspberry PI上。
对于代码生成,必须设置环境变量ARM_COMPUTELIB
和图书馆路径
在覆盆子皮上。
编码基因-配置cfg美孚公司-args{one(2242243,'single')}-报告
要在Raspberry Pi上测试生成的代码,请将输入图像复制到生成的代码文件夹。您可以手动或使用raspi.utils.getRemoteBuildDirectory
此函数列出使用生成的二进制文件的文件夹编码基因
。假设二进制文件仅在一个文件夹中找到,请输入:
ApplicationDirpath=raspi.utils.getRemoteBuildDirectory(“应用程序名”,“mobilenet_预测”);targetDirPath=ApplicationDirPath{1}.目录;
要复制运行可执行程序所需的文件,请使用putFile
.
r、 putFile(“peppers\u raspi\u mobilenet.png”,targetDirPath);
在MATLAB的Raspberry Pi上运行可执行程序,并将输出返回MATLAB。
爱克斯名称=“mobilenet_predict.elf”;Argsforex=“peppers\u raspi\u mobilenet.png”;%提供输入图像;命令=[“cd”目标路径‘sudo’exeName argsforexe];输出=系统(r,命令);
outputfile=[targetDirPath,“/output.txt”];r.getFile(outputfile);
将前五名预测分数映射到训练网络中的相应标签,并显示输出。
类型mapPredictedScores\u mobilenet
%%将预测分数映射到标签并显示输出net=mobilenetv2;ClassNames=net.Layers(end).ClassNames;%%读取分类fid=fopen('Output.txt');S=textscan(fid,'%S');fclose(fid);S=S{1};predict_Scores=cellfun(@(x)str2double(x),S);%%删除字符串predict_Scores(isnan(predict_Scores))=[];[val,indx]=sort(predict_scores,'down');scores=val(1:5)*100;top5labels=ClassNames(indx(1:5));%%在图像上显示分类标签im=imread('peppers_raspi_mobilenet.png');im=imresize(im[224 224 224 224 224]);outputImage=zers(224400,3,'uint8');对于k=1:3 outputImage(:,177:end,k)=:im(:,:,:,k);end scol=1;srow=1;outputImage=insertText(outputImage,[scol,srow],'Classification with MobileNetv2','TextColor','w','FontSize',20','BoxColor','black');srow=srow+30;对于k=1:5,outputImage=insertText(outputImage,[scol,srow],[top5标签{k}','num2str(分数(k),'%2.2f'),'%')],'TextColor','w','FontSize',15',BoxColor','black');srow=srow+25;结束imshow(输出图像);
ARMNEONConfig编码器
|coder.DeepLearningConfig
|编码器硬件