此示例显示了如何生成和部署使用MobiLenet-V2备用网络进行对象预测的C ++代码。
支持霓虹灯扩展的ARM处理器金宝app
ARM Compute库(目标臂硬件上)
开源计算机视觉库(OpenCV)V2.4(在目标臂硬件上)
编译器和库的环境变量
MATLAB®Coder™
MATLAB编码器界面用于深度学习库支持包金宝app
深度学习工具箱™
MobileNet-V2网络支持包的深度学习工具箱模型金宝app
图像处理工具箱™
覆盆子PI硬件金宝app的MATLAB支持包
此示例使用的ARM计算库版本可能不是代码生成支持的最新版本。金宝app有关设置金宝app环境变量的支持版本,请参阅与Matlab编码器深入学习的先决条件。
Matlab在线不支持此示例。金宝app
此示例使用DAG网络MobileNet-V2与ARM®计算库执行图像分类。MobileNet-V2网络支持包的深度学习工具箱模型中提供了MATLAB的预雷达MobileNet-V2网络。金宝app
生成使用ARM Compute库和硬件支持包的代码时,金宝appCodegen.
在主机上生成代码,将生成的文件复制到目标硬件,并在目标硬件上构建可执行文件。
MobileNet_Predict.
功能这MobileNet_Predict.
函数调用在输入图像上的MobileNet-V2网络对象的预测方法,并返回预测分数输出。函数调用Coder.updateBuildInfo.
为生成的makefile指定链接选项。
类型MobileNet_Predict.
函数OUT = MOBILENET_PREDICT(IN)持久网络;opencv_linkflags ='`pkg-config --cflags --libs opencv`';coder.updatebuildinfo('addlinkflags',opencv_linkflags);如果是isempty(net)net = coder.loaddeeplearningnetwork('mobilenetv2','mobilenet');结束= net.predict(in);结尾
创建C ++代码生成配置对象。
cfg = coder.config('EXE文件');cfg.targetlang ='c ++';
指定ARM计算库的使用。ARM Compute库为Raspberry PI硬件提供了优化的功能。要生成使用ARM Compute库的代码,请创建一个Coder.armneonConfig
目的。指定Raspberry PI上安装的ARM计算库的版本以及覆盆子PI的体系结构。将深度学习配置对象附加到代码生成配置对象。
dlcfg = coder.deeplearningconfig('arm-compute');金宝app支持versions = dlcfg.getarmcomputesupportedVersions;dlcfg.armarchitecture ='ARMV7';dlcfg.armcomputeversion =.'19 .05';cfg.deeplearningconfig = dlcfg;
使用MATLAB支持包进行覆盆金宝app子PI硬件功能raspi.
创建与Raspberry PI的连接。在此代码中,替换:
raspiname.
使用覆盆子pi的主机名
用户名
使用您的用户名
密码
使用您的密码
r = raspi('raspiname'那'用户名'那'密码');
创建一个编码器。硬件
raspberry pi对象并将其附加到代码生成配置对象。
hw = coder.hardware('覆盆子pi');cfg.hardware = hw;
在raspberry pi上指定构建文件夹:
builddir ='〜/ remotebuilddir';cfg.hardware.builddir = builddir;
指定主文件main_mobilenet.cpp.
在代码生成配置对象中。该文件调用生成的C ++代码MobileNet_Predict.
功能。该文件读取输入映像,将数据传递给生成的函数调用,检索图像上的预测,并将预测得分打印到文件。
cfg.cusomsource ='main_mobilenet.cpp';
生成C ++代码。当你使用时Codegen.
使用Raspberry PI硬件金宝app的MATLAB支持包,可执行文件基于覆盆子PI构建。
对于代码生成,必须设置环境变量ARM_Comptelib.
和ld_library_path.
在覆盆子pi上。
Codegen.-Config.CFG.MobileNet_Predict.- args.{ONE(224,224,3,'单')}-报告
要在raspberry pi上测试生成的代码,请将输入图像复制到生成的代码文件夹。您可以手动或使用此文件夹或使用Raspi.utils.getRemoteBuildDirectory.
API。此函数列出了使用的二进制文件的文件夹Codegen.
。假设二进制文件仅在一个文件夹中找到,请输入:
applicationDirPaths = Raspi.utils.getRemoteBuildDirectory('应用名称'那'mobilenet_predict');targetdirpath = applicationdirpaths {1} .directory;
要复制运行可执行程序所需的文件,请使用putfile.
。
r.putfile('peppers_raspi_mobilenet.png',targetdirpath);
从MATLAB运行Raspberry PI上的可执行程序并将输出引导回MATLAB。
exename ='mobilenet_predict.elf';argsforexe ='peppers_raspi_mobilenet.png';%提供输入图像;命令= ['CD'targetdirpath.'; sudo ./'exename argsforexe];输出=系统(r,命令);
outputfile = [targetdirpath,'/output.txt'];r.getfile(outputfile);
将前五个预测分数映射到培训的网络中的相应标签,并显示输出。
类型mappredicticeScores_Mobilenet.
%%将预测分数映射到标签和显示输出NET = MOBILENETV2;ClassNames = Net.Layers(END).Classnames;%%读取分类FID = fopen('output.txt');s = TextScan(FID,'%S');fclose(FID);s = s {1};predict_cores = cellfun(@(x)str2double(x),s);%%删除了字符串预测_cores的NaN值(ISNAN(Predict_scores))= [];[val,Indx] =排序(预测_cores,'descend');得分= val(1:5)* 100; top5labels = ClassNames(indx(1:5)); %% Display classification labels on the image im = imread('peppers_raspi_mobilenet.png'); im = imresize(im, [224 224]); outputImage = zeros(224,400,3, 'uint8'); for 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; for k = 1:5 outputImage = insertText(outputImage, [scol, srow], [top5labels{k},' ',num2str(scores(k), '%2.2f'),'%'], 'TextColor', 'w','FontSize',15, 'BoxColor', 'black'); srow = srow + 25; end imshow(outputImage);
Coder.armneonConfig
|coder.deeplearningconfig
|编码器。硬件