主要内容

代码生成深度学习网络手臂计算库

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覆盆子π硬件支持包。支持包,金宝appcodegen将生成的代码的覆盆子π和构建可执行程序覆盆子π。当您生成代码的目标没有硬件支持包,您必须运行命令将生成的文件和构建可执行程序。金宝app

  • 墨西哥人一代不支持为深度学习ARM目标代码生金宝app成。

  • 手臂,输入预测(深度学习工具箱)与多个图像或观察(N > 1),一个MiniBatchSize不支持的大于1。金宝app指定一个MiniBatchSize为1。

代码生成深度学习在覆盆子π

当你有MATLAB为金宝app覆盆子π硬件支持包为深度学习生成代码树莓π:

  1. 连接到覆盆子π,使用raspi(树莓π硬件MA金宝appTLAB支持包)。例如:

    r = raspi (“raspiname”,“用户名”,“密码”);

  2. 创建一个代码生成配置对象的库或可执行的使用coder.config。设置TargetLang财产“c++”

    cfg = coder.config (exe”);cfg。TargetLang =“c++”;

  3. 通过创建一个深度学习配置对象coder.DeepLearningConfig。设置ArmComputeVersionArmArchitecture属性。设置DeepLearningConfig的代码生成配置对象的属性coder.ARMNEONConfig对象。例如:

    dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的;dlcfg。ArmComputeVersion =“19.05”;cfg。DeepLearningConfig = dlcfg;

  4. 配置代码生成硬件设置覆盆子π,创建一个coder.Hardware对象,通过使用coder.hardware。设置硬件的代码生成配置对象的属性coder.Hardware对象。

    hw = coder.hardware (“树莓π”);cfg。硬件= hw;

  5. 如果你是生成一个可执行程序,提供一个c++主程序。例如:

    cfg。CustomSource =“main.cpp”;

  6. 生成的代码,使用codegen。通过使用指定代码生成配置对象配置选择。例如:

    codegen配置cfgsqueezenet_predictarg游戏{(227、227、3,“单”)}报告

    请注意

    您可以指定half-precision输入的代码生成。然而,代码生成器类型将输入转换为单精度。深度学习工具箱使用单精度浮点算法,在MATLAB计算。

代码生成,当你没有硬件支持包金宝app

生成代码的深度学习当你没有硬件支持包的目标:金宝app

  1. 在Linux中生成代码®主机。

  2. 创建一个配置对象库。例如:

    cfg = coder.config (“自由”);

    不要使用一个可执行程序的配置对象。

  3. 配置生成c++代码生成代码并生成源代码。

    cfg。GenCodeOnly = true;cfg。TargetLang =“c++”;

  4. 指定代码生成与臂计算库,创建一个coder.ARMNEONConfig对象的使用coder.DeepLearningConfig。设置ArmComputeVersionArmArchitecture属性。设置DeepLearningConfig的代码生成配置对象的属性coder.ARMNEONConfig对象。

    dlcfg = coder.DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的;dlcfg。ArmComputeVersion =“19.05”;cfg。DeepLearningConfig = dlcfg;

  5. 配置代码生成特定于目标硬件参数,设置ProdHWDeviceType财产的HardwareImplementation对象。

    • ARMv7架构的使用“胳膊兼容- >手臂皮层”

    • 对于ARMv8架构,使用手臂兼容- >部门64位(LP64) '

    例如:

    cfg.HardwareImplementation。ProdHWDeviceType =手臂兼容- >部门64位(LP64) ';

  6. 生成的代码,使用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_ * _wcnn_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编码器应用程序

  1. 完成选择源文件定义输入类型步骤。

  2. 生成代码的一步。(跳过检查运行时问题一步,因为墨西哥人一代不支持代码生成与计算图书馆。)金宝app

  3. 语言c++

  4. 指定目标ARM硬件。

    如果你的目标硬件是覆盆子π,你安装了MATLAB为金宝app覆盆子π硬件支持包:

    • 硬件板中,选择覆盆子π

    • 访问的覆盆子π设置,点击更多的设置。然后,单击硬件。指定设备地址,用户名,密码,建立目录

    当你不为你的手臂有一个支持包的目标:金宝app

    • 确保构建类型静态库动态库并选择只生成代码复选框。

    • 硬件板中,选择没有,选择下面的设备

    • 设备供应商中,选择手臂兼容

    • 设备类型:

      • ARMv7架构的选择手臂皮层

      • ARMv8架构的选择64位(LP64)

    请注意

    如果您生成代码深度学习在一个手臂的目标,并且不使用硬件支持包,只一个Linux主机上生成代码。金宝app

  5. 深度学习窗格中,设置目标库臂计算。指定臂计算库版本ARM计算架构

  6. 生成的代码。

另请参阅

||

相关的话题