代码生成深度学习网络手臂计算库
与MATLAB®编码器™已经预测,你可以生成代码从一个训练有素的卷积神经网络(CNN),针对嵌入式平台,使用一个胳膊®处理器支持霓虹灯扩展。金宝app代码生成器利用的手臂计算库计算机视觉和机器学习。生成的代码实现了一个CNN的体系结构中,层和参数中指定的输入SeriesNetwork
(深度学习工具箱)或DAGNetwork
(深度学习工具箱)网络对象。
生成代码通过使用这些方法之一:
需求
为深度学习MATLAB编码器接口库。安装包的支持,选择从MATLA金宝appB附加组件菜单。
手臂计算库计算机视觉和机器学习必须安装在目标硬件。
深度学习工具箱™。
环境变量的编译器和库。
请注意
手臂计算库版本,这帮助主题中的示例使用可能不是最新版本,代码生成支持。金宝app为支持版金宝app本的库和设置环境变量信息,明白了先决条件与MATLAB编码器深度学习。
代码生成通过使用codegen
来生成代码的深度学习目标用一只手臂codegen
:
写一个入口点函数加载pretrained CNN和调用
预测
。例如:函数= squeezenet_predict(中)% # codegen持续的净;opencv_linkflags =“那pkg-config——cflags——libs opencv”;coder.updateBuildInfo (“addLinkFlags”,opencv_linkflags);如果isempty(净)= coder.loadDeepLearningNetwork (“squeezenet”,“squeezenet”);结束= net.predict(的);结束
如果你的目标硬件覆盆子π™,你可以利用MATLAB为金宝app覆盆子π硬件支持包。支持包,金宝app
codegen
将生成的代码的覆盆子π和构建可执行程序覆盆子π。当您生成代码的目标没有硬件支持包,您必须运行命令将生成的文件和构建可执行程序。金宝app墨西哥人一代不支持为深度学习ARM目标代码生金宝app成。
手臂,输入
预测
(深度学习工具箱)与多个图像或观察(N > 1
),一个MiniBatchSize
不支持的大于1。金宝app指定一个MiniBatchSize
为1。
代码生成深度学习在覆盆子π
当你有MATLAB为金宝app覆盆子π硬件支持包为深度学习生成代码树莓π:
连接到覆盆子π,使用
raspi
(树莓π硬件MA金宝appTLAB支持包)。例如:r = raspi (“raspiname”,“用户名”,“密码”);
创建一个代码生成配置对象的库或可执行的使用
coder.config
。设置TargetLang
财产“c++”
。cfg = coder.config (exe”);cfg。TargetLang =“c++”;
通过创建一个深度学习配置对象
coder.DeepLearningConfig
。设置ArmComputeVersion
和ArmArchitecture
属性。设置DeepLearningConfig
的代码生成配置对象的属性coder.ARMNEONConfig
对象。例如:dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的;dlcfg。ArmComputeVersion =“19.05”;cfg。DeepLearningConfig = dlcfg;
配置代码生成硬件设置覆盆子π,创建一个
coder.Hardware
对象,通过使用coder.hardware
。设置硬件
的代码生成配置对象的属性coder.Hardware
对象。hw = coder.hardware (“树莓π”);cfg。硬件= hw;
如果你是生成一个可执行程序,提供一个c++主程序。例如:
cfg。CustomSource =“main.cpp”;
生成的代码,使用
codegen
。通过使用指定代码生成配置对象配置
选择。例如:codegen配置cfgsqueezenet_predictarg游戏{(227、227、3,“单”)}报告
请注意
您可以指定half-precision输入的代码生成。然而,代码生成器类型将输入转换为单精度。深度学习工具箱使用单精度浮点算法,在MATLAB计算。
代码生成,当你没有硬件支持包金宝app
生成代码的深度学习当你没有硬件支持包的目标:金宝app
在Linux中生成代码®主机。
创建一个配置对象库。例如:
cfg = coder.config (“自由”);
不要使用一个可执行程序的配置对象。
配置生成c++代码生成代码并生成源代码。
cfg。GenCodeOnly = true;cfg。TargetLang =“c++”;
指定代码生成与臂计算库,创建一个
coder.ARMNEONConfig
对象的使用coder.DeepLearningConfig
。设置ArmComputeVersion
和ArmArchitecture
属性。设置DeepLearningConfig
的代码生成配置对象的属性coder.ARMNEONConfig
对象。dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的;dlcfg。ArmComputeVersion =“19.05”;cfg。DeepLearningConfig = dlcfg;
配置代码生成特定于目标硬件参数,设置
ProdHWDeviceType
财产的HardwareImplementation
对象。ARMv7架构的使用
“胳膊兼容- >手臂皮层”
。对于ARMv8架构,使用
手臂兼容- >部门64位(LP64) '
。
例如:
cfg.HardwareImplementation。ProdHWDeviceType =手臂兼容- >部门64位(LP64) ';
生成的代码,使用
codegen
。通过使用指定代码生成配置对象配置
选择。例如:codegen配置cfgsqueezenet_predictarg游戏{(227、227、3,“单”)}- darm_compute
例如,看到的对部门目标代码生成的深度学习。
生成的代码
生成的系列网络作为一个c++类包含层类的数组。
类b_squeezenet_0{公众:int32_T batchSize;int32_T numLayers;real32_T * inputData;real32_T * outputData;MWCNNLayer *层[68];私人:MWTargetNetworkImpl * targetImpl;公众:b_squeezenet_0 ();空白presetup ();空白postsetup ();无效的设置(); void predict(); void cleanup(); real32_T *getLayerOutput(int32_T layerIndex, int32_T portIndex); ~b_squeezenet_0(); };
的设置()
类的方法设置处理,为每一层的网络对象分配内存。的预测()
方法调用预测网络中每个层。假设您生成代码的入口点函数,squeezenet_predict
。在生成的“你”文件,squeezenet_predict.cpp
的入口点函数,squeeznet_predict ()
构造一个静态的对象b_squeezenet_0类类型并调用设置
和预测
网络上的对象。
静态b_squeezenet_0净;静态boolean_T net_not_empty;/ / / / / /函数定义一个持久对象网是用来加载DAGNetwork对象。/ /在第一次调用这个函数,构造持久对象和/或设置。只有在函数被调用时,随后的时间,相同的对象被重复使用/ /叫预测输入,避免重建并重新加载/ /网络对象。/ /参数:const real32_T在[154587]/ / real32_T[1000] / /返回类型:空白/ /空白squeezenet_predict (const real32_T [154587], [1000] real32_T){/ /版权2018 MathWorks公司如果(! net_not_empty) {DeepLearningNetwork_setup(净);net_not_empty = true;}DeepLearningNetwork_predict(净);}
二进制文件是出口的层参数,如完全连接和卷积网络层。例如,文件名称模式cnn_squeezenet_ * _w
和cnn_squeezenet_ * _b
对应的重量和偏见卷积网络层的参数。
cnn_squeezenet_conv10_b cnn_squeezenet_conv10_w cnn_squeezenet_conv1_b cnn_squeezenet_conv1_w cnn_squeezenet_fire2-expand1x1_b cnn_squeezenet_fire2-expand1x1_w cnn_squeezenet_fire2-expand3x3_b cnn_squeezenet_fire2-expand3x3_w cnn_squeezenet_fire2-squeeze1x1_b cnn_squeezenet_fire2-squeeze1x1_w……
量化深度学习网络
看到代码生成量化深度学习网络。
通过使用生成代码MATLAB编码器应用程序
完成选择源文件和定义输入类型步骤。
去生成代码的一步。(跳过检查运行时问题一步,因为墨西哥人一代不支持代码生成与计算图书馆。)金宝app
集语言来c++。
指定目标ARM硬件。
如果你的目标硬件是覆盆子π,你安装了MATLAB为金宝app覆盆子π硬件支持包:
为硬件板中,选择
覆盆子π
。访问的覆盆子π设置,点击更多的设置。然后,单击硬件。指定设备地址,用户名,密码,建立目录。
当你不为你的手臂有一个支持包的目标:金宝app
确保构建类型是
静态库
或动态库
并选择只生成代码复选框。为硬件板中,选择
没有,选择下面的设备
。为设备供应商中,选择
手臂兼容
。为设备类型:
ARMv7架构的选择
手臂皮层
。ARMv8架构的选择
64位(LP64)
。
请注意
如果您生成代码深度学习在一个手臂的目标,并且不使用硬件支持包,只一个Linux主机上生成代码。金宝app
在深度学习窗格中,设置目标库来
臂计算
。指定臂计算库版本和ARM计算架构。生成的代码。
另请参阅
coder.loadDeepLearningNetwork
|coder.DeepLearningConfig
|coder.ARMNEONConfig