交叉编译为手臂氖目标深度学习代码
这个例子展示了如何保存生成的深度学习代码来创建一个库或者一个可执行文件,然后手臂®上部署库或可执行目标如Hikey 960或960的岩石。下面的例子使用了codegen
命令。
交叉编译的深度学习代码手臂®目标包括以下步骤:
配置安装交叉编译器工具链上执行编译主机MATLAB®。当你编译运行
codegen
在MATLAB命令主机电脑。使用
codegen
命令来构建生成的代码并创建一个库或主机上的一个可执行的。复制生成的库或可执行文件和其他支持文件到目标硬件。金宝app如果你的主机上生成一个图书馆,编译复制目标创建一个可执行的makefile。
运行生成的可执行目标的手臂上的硬件。
您可以使用此工作流对于任何手臂支持氖氖目标| SIMD指令集。这个例子只支持宿主Linux®平台。金宝app
先决条件
ARM处理器,支持霓虹灯| SIMD扩金宝app展
臂计算库(主机)
MATLAB®编码器™
深度学习金宝app的支持软件包MATLAB编码器接口
深度学习工具箱™
支持包深金宝app学习工具箱Inception-v3网络模型
图像处理工具箱™
armv7(32位Arm体系结构)上部署目标,GNU GCC
g++ -arm-linux-gnueabihf
工具链为部署在armv8(64位架构)的目标,GNU GCC
g++ -aarch64-linux-gnu
工具链环境变量的交叉编译器和库
信息如何安装交叉编译器工具链和建立相关的环境变量,看看保存深度学习使用手臂计算库的代码。
臂计算库版本,这个示例使用可能不是最新版本,代码生成支持。金宝app信息支持版本的库和环境变量,明白了金宝app先决条件与MATLAB编码器深度学习。
此示例中的代码行是注释掉了。取消之前运行示例。
这个例子在MATLAB网络不支持。金宝app
的inception_predict_arm
入口点函数
下面的例子使用了Inception-V3图像分类网络。一个pretrained Inception-V3网络MATLAB提供的支持包深度学习工具箱Inception-V3网络模型。金宝app的inception_predict_arm
入口点函数加载Inception-V3网络变成一个持久的网络对象。在随后的调用函数,持久对象重用。
类型inception_predict_arm
函数= inception_predict_arm(在)持续净;如果isempty(净)净= coder.loadDeepLearningNetwork (“inceptionv3”、“inceptionv3”);结束= net.predict(在);结束
建立一个深度学习配置对象
创建一个coder.ARMNEONConfig
对象。指定版本的手臂计算库和ARM的体系结构。
dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg。ArmComputeVersion =“20.02.1”;% dlcfg。ArmArchitecture =“v7”;%或“armv8”
在输入图像分类peppers.png
将图像转换为一个文本文件。
% generateImagetoTxt (“peppers.png”);
第一种方法:主机上创建静态库入口点函数
在这种方法中,首先保存生成的代码创建一个静态库在主机电脑。然后将生成的静态库,手臂计算库文件,makefile和其他支持文件到目标硬件。金宝app您运行这个makefile在目标硬件生成可执行文件。最后,您在目标硬件上运行的可执行文件。
建立一个代码生成配置对象
创建一个静态库的代码生成配置对象。指定目标语言c++。
cfg = coder.config (“自由”);cfg。TargetLang =“c++”;
深度学习配置对象附加到代码生成配置对象。
cfg。DeepLearningConfig = dlcfg;
配置交叉编译器工具链
配置交叉编译器工具链基于ARM架构的目标设备。
% cfg。工具链= ' Linaro AArch64 Linux v6.3.1”; % armv8 Arm体系结构时% cfg。工具链= ' Linaro AArch32 Linux v6.3.1”; %当Arm架构v7
通过使用codegen生成静态库主机
使用codegen
命令来生成代码的入口点函数,构建生成的代码,并为目标创建静态库ARM架构。
% codegen配置cfg inception_predict_arm args{的(299299 3,“单”)}- d arm_compute_cc_lib报告
生成交叉编译静态库复制到目标硬件
静态库,复制本文件,头文件从生成的文件夹arm_compute_cc_lib
到目标ARM硬件。在这段代码行和其他代码行,替换:
密码和你的密码
用户名和你的用户名
主机名与你的设备的名称
targetDir文件的目标文件夹
%系统(“sshpass scp - r arm_compute_cc_lib / * - p密码。本arm_compute_cc_lib / *。自由arm_compute_cc_lib / *。h arm_compute_cc_lib / *。hpp username@hostname: targetDir / ');
将手臂计算库文件复制到目标硬件
可执行文件使用部门计算库文件在运行时。目标板不需要头文件生成可执行和运行时执行。将库复制到所需的路径。
%系统([' sshpass scp - r - p密码”fullfile (getenv (“ARM_COMPUTELIB”),“自由”)' username@hostname: targetDir / ']);
支持文件复金宝app制到目标硬件
将这些文件复制到目标ARM硬件:
Makefile
Makefile_Inceptionv3
从静态库来生成可执行文件。输入图像
inputimage.txt
您想要分类。的文本文件
synsetWords.tx
t,其中包含返回的类名net.Layers(结束). class
主要的包装文件
main_inception_arm.cpp
调用代码生成的inception_predict_arm
函数。
%系统(“scp synsetWords sshpass - p密码。txt。/ Makefile_Inceptionv3。/ inputimage。txt。/ main_inception_arm。cpp username@hostname: targetDir / ');
创建可执行的目标
在目标系统上编译makefile生成静态库的可执行文件。这个makefile链接静态库与主包装文件main_inception_arm.cpp
并生成可执行文件。
%系统(“sshpass ssh - p密码username@hostname“让- c targetDir - f Makefile_Inceptionv3 arm_inceptionv3””);
在目标系统上运行的可执行文件
在目标系统上运行生成的可执行文件。确保出口LD_LIBRARY_PATH指向臂计算库文件在运行可执行文件。
%系统(“sshpass ssh - p密码username@hostname”出口LD_LIBRARY_PATH = targetDir / lib;cd targetDir;。/ inception_predict_arm。精灵inputimage。txt out.txt”);
第二种方法:主机上创建可执行的入口点函数
在这种方法中,首先保存生成的代码在主机上创建一个可执行的。然后将生成的可执行文件,手臂计算库文件,和其他支持文件到目标硬件。金宝app最后,您在目标硬件上运行的可执行文件。
建立一个代码生成配置对象
创建一个代码生成配置为生成一个可执行的对象。设置目标语言c++。
cfg = coder.config (exe”);cfg。TargetLang =“c++”;
深度学习配置对象附加到代码生成配置对象。
cfg。DeepLearningConfig = dlcfg;
声明的主要包装文件main_inception_arm.cpp
自定义的源文件。
cfg。CustomSource =“main_inception_arm.cpp”;
配置交叉编译器工具链
配置交叉编译器工具链基于ARM架构的目标设备。
% cfg。工具链= ' Linaro AArch64 Linux v6.3.1”;% armv8 Arm体系结构时,% cfg。工具链= ' Linaro AArch32 Linux v6.3.1”; % v7 Arm体系结构时,
生成可执行主机使用codegen
使用codegen
命令来生成代码的入口点函数,构建生成的代码,并为目标创建一个executablle ARM架构。
% codegen配置cfg inception_predict_arm args{的(299299 3,“单”)}- d arm_compute_cc_exe报告
将生成的可执行文件复制到目标硬件
将生成的可执行文件和本文件复制到目标ARM硬件。在这段代码行和其他代码行,替换:
密码和你的密码
用户名和你的用户名
主机名与你的设备的名称
targetDir
文件的目标文件夹
%系统(“sshpass scp - r arm_compute_cc_exe / * - p密码。本username@hostname: targetDir / ');%系统(“scp inception_predict_arm sshpass - p密码。精灵username@hostname: targetDir / ');
将手臂计算库文件复制到目标硬件
可执行文件使用部门计算库文件在运行时。在运行时它不使用头文件。将库文件复制到所需的路径。
%系统([' sshpass scp - r - p密码”fullfile (getenv (“ARM_COMPUTELIB”),“自由”)' username@hostname: targetDir / ']);
支持文件拷金宝app贝到目标硬件
将这些文件复制到目标ARM硬件:
输入图像
inputimage.txt
您想要分类。的文本文件
synsetWords.tx
t,其中包含返回的类名net.Layers(结束). class
主要的包装文件
main_inception_arm.cpp
调用代码生成的inception_predict_arm
函数。
%系统(“scp synsetWords sshpass - p密码。txt。/ inputimage。txt。/ main_inception_arm。cpp username@hostname: targetDir / ');
运行可执行文件在目标硬件
在目标系统上运行生成的可执行文件。确保出口LD_LIBRARY_PATH指向臂计算库文件在运行可执行文件。
%系统(“sshpass ssh - p密码username@hostname”出口LD_LIBRARY_PATH = targetDir / lib;cd targetDir;。/ inception_predict_arm。精灵inputimage。txt out.txt”);
将输出数据从目标到MATLAB
当前MATLAB会话复制生成的输出回主机。
%系统(“sshpass - p密码scp username@hostname: targetDir /。txt。/”);
地图预测分数标签
五大预测分数映射到相应的标签在训练网络。
% outputImage = mapPredictionScores;%显示分类的显示图像的分数。% imshow (outputImage);
另请参阅
coder.ARMNEONConfig
|coder.DeepLearningConfig
|coder.hardware