主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

手臂计算库を使用した、深層学習ネットワークのためのコード生成

MATLAB®编码器™を使用して、霓虹的拡張子をサポートする 臂®プロセッサを使用する組み込みプラットフォームをターゲットとする、既に学習済みの畳み込みニューラル ネットワーク (美国有线电视新闻网)からの予測のためのコードを生成できます。コード ジェネレーターは、コンピューター ビジョンおよび機械学習に 臂计算库を利用します。生成されたコードは,入力SeriesNetwork(深度学习工具箱)またはDAGNetwork(深度学习工具箱)ネットワーク オブジェクトで指定されるアーキテクチャ、レイヤーおよびパラメーターをもつ 有线电视新闻网を実装します。

次のいずれかの方法を使用してコードを生成します。

必要条件

  • 深度学习库的MATLAB编码器接口。サポート パッケージをインストールするには、これを MATLABの[アドオン]メニューから選択します。

  • コンピューター ビジョンと機械学習用の 臂计算库をターゲットハードウェアにインストールしなければなりません。

  • 深度学习工具箱。

  • コンパイラおよびライブラリの環境変数。

メモ

このヘルプ トピックの例で使用する ARM计算库のバージョンは、コード生成でサポートされている最新バージョンではない可能性があります。サポートされているライブラリのバージョンと、環境変数の設定に関する詳細については、MATLAB编码器を使用した深層学習の前提条件を参照してください。

codegenを使用したコード生成

codegenを使用して手臂ターゲットで深層学習のコードを生成するには,次を行います。

  • 事前学習済みのCNNを読み込んで,预测を呼び出すエントリポイント関数を作成します。以下に例を示します。

    作用= squeezenet_predict(中)% # codegen持续的net;opencv_linkflags=pkg-config——cflags——libs opencv ";coder.updateBuildInfo (“addLinkFlags”, opencv_linkflags);如果net = code . loaddeeplearningnetwork (“挤压网”“挤压网”);结束= net.predict(的);结束

  • ターゲット ハードウェアが 覆盆子皮™ である場合、Raspber金宝appry Pi硬件的MATLAB支持包を活用することができます。サポート パッケージを使用すると、codegenは生成コードを覆盆子πに移動させて,覆盆子πで実行可能プログラムをビルドします。ハードウェアサポートパッケージをもっていないターゲット用にコードを生成する場合、コマンドを実行して、生成されたファイルを移動させ、実行可能プログラムを作成しなければなりません。

  • 手臂ターゲットでは,墨西哥人生成による深層学習用のコード生成はサポートされていません。

  • 臂については、複数のイメージまたは観測値 (N>1)をもつ预测(深度学习工具箱)への入力について、1.より大きい小批量はサポートされません。1の小批量を指定します。

覆盆子皮での深層学習用のコード生成

Raspber金宝appry Pi硬件的MATLAB支持包がある場合、覆盆子皮で深層学習用のコードを生成するには、次を行います。

  1. 覆盆子πに接続するには,拉斯皮(树莓派硬件MA金宝appTLAB支持包)を使用します。以下に例を示します。

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

  2. coder.configを使用して、ライブラリまたは実行可能ファイル用のコード生成構成オブジェクトを作成します。TargetLangプロパティを“c++”に設定します。

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

  3. coder.DeepLearningConfigを使用して,深層学習構成オブジェクトを作成します。ArmComputeVersionおよびArmArchitectureプロパティを設定します。コード生成構成オブジェクトの深度学习配置プロパティを编码器。手臂NEONConfigオブジェクトに設定します。以下に例を示します。

    dlcfg =编码器。DeepLearningConfig (“arm计算”);dlcfg.ArmArchitecture=“armv7”;dlcfg。ArmComputeVersion =“19.05”;cfg.DeepLearningConfig=dlcfg;

  4. 覆盆子皮のコード生成ハードウェア設定を構成するには、coder.hardwareを使用して编码器。硬件オブジェクトを作成します。コード生成構成オブジェクトの硬件プロパティを编码器。硬件オブジェクトに設定します。

    hw=编码器硬件(“覆盆子皮”)硬件=硬件;

  5. 実行可能プログラムを生成している場合は,c++メインプログラムを指定します。以下に例を示します。

    cfg.CustomSource=“main.cpp”

  6. コードを生成するには、codegenを使用します。配置オプションを使用して、コード生成構成オブジェクトを指定します。以下に例を示します。

    codegen配置cfg挤压网arg游戏{one(227,227,3,'single')}-报告

    メモ

    コード生成では半精度入力を指定できます。ただし,コードジェネレーターによって入力が単精度に型キャストされます。深度学习工具箱は,MATLABでのすべての計算に単精度浮動小数点演算を使用します。

ハードウェアサポートパッケージがない場合のコード生成

ターゲット用のハードウェアサポートパッケージがない場合に深層学習用のコードを生成するには,次を行います。

  1. Linux®ホストでのみコードを生成します。

  2. ライブラリ用の構成オブジェクトを作成します。以下に例を示します。

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

    実行可能プログラムに対して構成オブジェクトを使用しないでください。

  3. C++コードおよびソース コードのみを生成するように、コード生成を設定します。

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

  4. ARM计算库を使用したコード生成を指定するには、coder.DeepLearningConfigを使用して编码器。手臂NEONConfigオブジェクトを作成します。ArmComputeVersionおよびArmArchitectureプロパティを設定します。コード生成構成オブジェクトの深度学习配置プロパティを编码器。手臂NEONConfigオブジェクトに設定します。

    dlcfg =编码器。DeepLearningConfig (“arm计算”);dlcfg.ArmArchitecture=“armv7”;dlcfg。ArmComputeVersion =“19.05”;cfg.DeepLearningConfig=dlcfg;

  5. ターゲット ハードウェアに固有のコード生成パラメーターを設定するには、HardwareImplementationオブジェクトのProdHWDeviceTypeプロパティを設定します。

    • v7アーキテクチャの場合,'手臂兼容->手臂皮质'を使用します。

    • ARMv8アーキテクチャの場合,ARM兼容->ARM 64位(LP64)を使用します。

    次に例を示します。

    cfg.HardwareImplementation.ProdHWDeviceType=ARM兼容->ARM 64位(LP64)

  6. コードを生成するには、codegenを使用します。配置オプションを使用して,コード生成構成オブジェクトを指定します。次に例を示します。

    codegen配置cfg挤压网arg游戏{one (227, 227, 3, 'single')}-darm_compute

例については,手臂ターゲットでの深層学習用のコード生成を参照してください。

生成コード

系列ネットワークは、層のクラスの配列を含む C++クラスとして生成されます。

类b_squeezenet_0{public:int32_T batchSize;int32_T numLayers;real32_T*inputData;real32_T*outputData;MWCNNLayer*层[68];private:MWTargetNetworkImpl*targetImpl;public:b_squeezenet_0();void预置();void postsetup();void设置();void预测();void清理();real32_T*getLayerOutput(int32_T layerIndex,int32_T portIndex)~b_squezenet_0();};

このクラスの设置()メソッドは、ハンドルを設定し、ネットワーク オブジェクトの各層にメモリを割り当てます。预测()メソッドは,ネットワークの各層の予測を呼び出します。エントリポイント関数挤压网のコードを生成するとします。生成された”ユーザー用“のファイル挤压网では,エントリポイント関数squeeznet_predict ()によってb_squeezenet_0クラス タイプのスタティック オブジェクトが作成され、ネットワーク オブジェクトに対して设置および预测が呼び出されます。

静态b_squeezenet_0净;静态boolean_T net_not_empty;//函数定义// //持久化对象net用于加载DAGNetwork对象。//在第一次调用该函数时,构造并设置持久对象。当该函数随后被调用时,相同的对象被重用//以调用预测输入,避免重新构造和重新加载//网络对象。// Arguments: const real32_T in[154587] // real32_T out[1000] //返回类型:void // void squeezenet_predict(const real32_T in[154587], real32_T out[1000]) {// Copyright 2018 The MathWorks,公司if (!net_not_empty) {DeepLearningNetwork_setup(&net);net_not_empty = true;} DeepLearningNetwork_predict(&net, in, out);}

バイナリ ファイルは、パラメーターをもつ層 (ネットワークの全結合層および畳み込み層など) に対してエクスポートされます。たとえば、有线电视新闻网およびcnn挤压网というパターンの名前をもつファイルは,ネットワークの畳み込み層の重みパラメーターおよびバイアスパラメーターに対応します。

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

量子化された深層学習ネットワークのためのコード生成

量化深度学习网络的代码生成を参照してください。

MATLAB编码员アプリを使用したコード生成

  1. [ソースファイルの選択]ステップと(入力の型を定義]ステップを完了します。

  2. [コード生成)ステップに進みます(臂计算库を使用したコード生成では墨西哥人生成はサポートされていないため,(実行時の問題の確認]ステップはスキップします)。

  3. [言語][C++]に設定します。

  4. ターゲット 臂ハードウェアを指定します。

    ターゲット ハードウェアが 覆盆子皮で、Raspber金宝appry Pi硬件的MATLAB支持包をインストールしている場合は,次を行います。

    • [ハードウェアボード]に対して[覆盆子皮]を選択します。

    • 覆盆子皮設定にアクセスするには、[詳細設定]をクリックします。次に,[ハードウェア]をクリックします。(设备地址)[ユーザー名][パスワード]、および[ビルド ディレクトリ]を指定します。

    手臂ターゲットのサポートパッケージがない場合は,次を行います。

    • [ビルド タイプ][スタティック ライブラリ]または[ダイナミックライブラリ]であることを確認し、[コード生成のみ]チェック ボックスをオンにします。

    • [ハードウェアボード]では[なし——以下のデバイスを選択]を選択します。

    • [デバイス ベンダー]では(手臂兼容)を選択します。

    • [デバイス タイプ]に対しては、次のとおりです。

      • v7アーキテクチャの場合,(手臂皮层)を選択します。

      • ARMv8アーキテクチャの場合,(臂64位(LP64))を選択します。

    メモ

    臂ターゲットで深層学習用のコードを生成して、ハードウェア サポート パッケージを使用しない場合は、コードを Linuxホスト上でのみ生成します。

  5. [深層学習]ペインで,[ターゲット ライブラリ](臂计算)に設定します。[ARM计算库のバージョン]および[ARM计算机アーキテクチャ]を指定します。

  6. コードを生成します。

参考

||

関連するトピック