深度学习预测臂计算使用codegen
这个例子展示了如何使用codegen
生成代码的标识分类应用程序,使用深度学习在手臂®处理器。商标分类应用程序使用LogoNet
系列网络执行标志识别图像。生成的代码利用手臂的计算对计算机视觉和机器学习库。
先决条件
ARM处理器,支持霓虹灯扩展万博1manbetx
开源的计算机视觉库v3.1 OpenCV
环境变量为臂计算和OpenCV库
MATLAB®编码器™为c++代码生成
深度学习万博1manbetx的支持软件包MATLAB编码器接口
深度学习工具箱™使用
SeriesNetwork
对象
臂计算库版本,这个示例使用可能不是最新版本,代码生成支持。万博1manbetx为支持版万博1manbetx本的库和设置环境变量信息,明白了先决条件与MATLAB编码器深度学习。
这个例子是Linux®和Wind万博1manbetxows®平台上的支持,不支持在线MATLAB。
得到Pretrained SeriesNetwork
下载pretrainedLogoNet
网络并将其保存logonet.mat
,如果它不存在。网络是在MATLAB®开发及其架构类似于AlexNet。这个网络可以识别32标志在各种光线条件下,相机的角度。
网= getLogonet ();
网络包含22层包括卷积,完全连接,输出层的分类。
net.Layers
ans = 22×1层阵列层:1“imageinput”图像输入227×227×3图片zerocenter正常化和‘randfliplr扩增2 conv_1卷积96 5×5×3旋转步[1]和填充[0 0 0 0]3‘relu_1 ReLU ReLU 4“maxpool_1”马克斯池3×3马克斯池步(2 - 2)和填充[0 0 0 0]5 conv_2卷积128 3×3×96旋转步[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旋转步[1]和填充[0 0 0 0]9 ' relu_3 ReLU ReLU 10“maxpool_3”马克斯池3×3马克斯池步(2 - 2)和填充[0 0 0 0]11 conv_4卷积128 3×3×384旋转步(2 - 2)和填充[0 0 0 0]12的relu_4 ReLU ReLU 13“maxpool_4”马克斯池3×3马克斯池步(2 - 2)和填充[0 0 0 0]14 fc_1完全连接2048完全连接层15 ' relu_5 ReLU ReLU 16“dropout_1”辍学50% 2048年辍学17日“fc_2”完全连接完全连接层18“relu_6”ReLU ReLU 19“dropout_2”辍学辍学20“fc_3”完全连接32 50%完全连接层21 ' softmax softmax softmax 22“classoutput”分类输出crossentropyex“阿迪达斯”和31个其他类
设置环境变量
ARM目标硬件,确保ARM_COMPUTELIB这LD_LIBRARY_PATH设置包含臂计算库文件夹的路径。
logonet_predict函数
的logonet_predict.m
入口点函数接受一个图像输入和执行预测使用深度学习的图像保存在网络LogoNet
MAT-file。函数加载网络对象LogoNet.mat
到一个持续的网络变量logonet。在随后的调用函数,持久对象重用。
类型logonet_predict
函数= logonet_predict () % # codegen % MathWorks版权2017 - 2020,公司持续logonet;如果isempty (logonet) logonet = coder.loadDeepLearningNetwork (“LogoNet.mat”、“logonet”);结束= logonet.predict(在);结束
建立一个代码生成静态库的配置对象
当您生成代码针对一个基于arm的设备和不使用硬件支持方案,创建一个配置对象库。万博1manbetx不为一个可执行程序创建一个配置对象。
设置配置对象生成c++代码和生成的代码。
cfg = coder.config (“自由”);cfg。TargetLang =“c++”;cfg。GenCodeOnly = true;
设置一个配置对象的深度学习代码生成
创建一个coder.ARMNEONConfig
对象。指定库版本和目标ARM处理器的体系结构。例如,假设目标板是一个HiKey / Rock960板与ARMv8架构和手臂计算库19.05版本。
dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg.ArmComputeVersion=“19.05”;dlcfg.ArmArchitecture=“armv8”;
深度学习配置对象附加到代码生成配置对象
设置DeepLearningConfig
属性代码生成配置对象的深度学习配置对象。
cfg。DeepLearningConfig = dlcfg;
生成c++代码通过使用来源codegen
codegen配置cfglogonet_predictarg游戏{(227、227、3,“单”)}- darm_compute
在生成的代码arm_compute
在当前工作目录文件夹在主机电脑。
生成Zip文件使用packNGo
函数
packNGo函数在一个压缩包所有相关文件的zip文件。
zipFileName =“arm_compute.zip”;bInfo =负载(fullfile (' arm_compute ', ' buildInfo.mat '));packNGo (bInfo。zipFileName buildInfo,{“文件名”,“minimalHeaders”,假的,“ignoreFileMissing”,真正});
将生成的压缩文件复制到目标硬件
将Zip文件并提取复制到一个文件夹。删除目标硬件的Zip文件。
在以下命令替换:
密码
用你的密码用户名
和你的用户名targetname
与你的设备的名称targetloc
文件的目标文件夹
运行这些命令来复制和提取Linux的zip文件。
如果isunix、系统([“sshpass scp - r - p密码”zipFileName fullfile (pwd)“username@targetname: targetloc /”]),结束如果isunix系统(“sshpass ssh - p密码username@targetname“如果[- d targetloc / arm_compute];然后rm射频targetloc / arm_compute;fi”),结束如果isunix、系统([“sshpass ssh - p密码username@targetname“解压targetloc /zipFileName“- d targetloc / arm_compute””]),结束如果isunix、系统([“sshpass ssh - p密码username@targetname“rm射频targetloc”zipFileName“””]),结束
运行这些命令来复制和提取从Windows zip文件。
如果ispc、系统([“pscp。exe pw - r的密码zipFileName fullfile (pwd)“username@targetname: targetloc /”]),结束如果ispc系统(“叮铃声。exe - l用户名pw密码targetname“如果[- d targetloc / arm_compute];然后rm射频targetloc / arm_compute;fi”),结束如果ispc、系统([“叮铃声。exe - l用户名pw密码targetname“解压targetloc /zipFileName“- d targetloc / arm_compute””]),结束如果ispc、系统([“叮铃声。exe - l”用户名pw密码targetname rm射频targetloc”zipFileName“””]),结束
示例文件拷贝到目标硬件
这些来自主机的支持文件万博1manbetx复制到目标硬件:
输入图像,
coderdemo_google.png
Makefile生成图书馆,
logonet_predict_rtw.mk
Makefile构建可执行程序,
makefile_arm_logo.mk
同义词集词典,
synsetWordsLogoDet.txt
在以下命令替换:
密码
用你的密码用户名
和你的用户名targetname
与你的设备的名称targetloc
文件的目标文件夹
执行以下步骤来复制所有必需的文件在运行Linux
如果isunix系统(“scp logonet_predict_rtw sshpass - p密码。可username@targetname: targetloc / arm_compute /),结束如果isunix系统(“scp coderdemo_google sshpass - p密码。png username@targetname: targetloc / arm_compute /),结束如果isunix系统(“scp makefile_arm_logo sshpass - p密码。可username@targetname: targetloc / arm_compute /),结束如果isunix系统(“scp synsetWordsLogoDet sshpass - p密码。txt username@targetname: targetloc / arm_compute /),结束
执行以下步骤来复制从Windows运行时所需的所有文件
如果ispc系统(“pscp。exe logonet_predict_rtw pw密码。可username@targetname: targetloc / arm_compute /),结束如果ispc系统(“pscp。exe coderdemo_google pw密码。png username@targetname: targetloc / arm_compute /),结束如果ispc系统(“pscp。exe makefile_arm_logo pw密码。可username@targetname: targetloc / arm_compute /),结束如果ispc系统(“pscp。exe synsetWordsLogoDet pw密码。txt username@targetname: targetloc / arm_compute /),结束
构建图书馆在目标硬件
构建图书馆在目标硬件、ARM硬件上执行生成的makefile。
确保你ARM_COMPUTELIB设置环境变量LD_LIBRARY_PATH在目标硬件。看到先决条件与MATLAB编码器深度学习。ARM_ARCH变量Makefile通过编译器标志中使用基于Arm架构。ARM_VER Makefile编译的代码中使用的变量是基于Arm计算版本。在这些命令取代硬件的凭证和路径类似于前一节。
执行以下步骤来构建图书馆从Linux。
如果isunix系统(“scp main_arm_logo sshpass - p密码。cpp username@targetname: targetloc / arm_compute /),结束如果isunix、系统([“sshpass ssh - p密码username@targetname“让- c targetloc / arm_compute / - f logonet_predict_rtw。可ARM_ARCH = 'dlcfg.ArmArchitecture“ARM_VER = 'dlcfg.ArmComputeVersion“””]),结束
执行以下步骤来构建图书馆从windows。
如果ispc系统(“pscp。exe main_arm_logo pw密码。cpp username@targetname: targetloc / arm_compute /),结束如果ispc、系统([“叮铃声。exe - l用户名pw密码targetname“让- c targetloc / arm_compute / - f logonet_predict_rtw。可ARM_ARCH = 'dlcfg.ArmArchitecture“ARM_VER = 'dlcfg.ArmComputeVersion“””]),结束
从图书馆创建可执行文件在目标硬件
构建图书馆与源主要包装文件创建可执行的。main_arm_logo.cpp
是c++主要包装文件调用哪一个logonet_predict
函数。
运行以下命令创建从Linux可执行。
如果isunix系统(“sshpass ssh - p密码username@targetname“让- c targetloc / arm_compute / - f makefile_arm_logo。可targetDirName = targetloc / arm_compute”),结束
运行下面的命令来创建可执行从Windows。
如果ispc系统(“叮铃声。exe - l用户名pw密码targetname“让- c targetloc / arm_compute / - f makefile_arm_logo。可targetDirName = targetloc / arm_compute”),结束
运行可执行文件在目标硬件
从Linux使用以下命令运行可执行。
如果isunix系统(“sshpass ssh - p密码username@targetname“cd targetloc arm_compute /;。/ logonet coderdemo_google.png”),结束
从Windows使用以下命令运行可执行文件。
如果ispc系统(“叮铃声。exe - l用户名pw密码targetname“cd targetloc arm_compute /;。/ logonet coderdemo_google.png”),结束
5大预言:- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 99.992%谷歌0.003%电晕0.003%啤酒0.001%埃索0.000%联邦快递
另请参阅
cnncodegen
|coder.DeepLearningConfig
|coder.loadDeepLearningNetwork