主要内容

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

手臂马里GPUをターゲットとする深層学習ネットワークのコード生成

GPU编码器™を使用して,深度学习工具箱™からさまざまな事前学習済みの深層学習ネットワークの予測に対する最適化されたコードを生成できます。生成コードでは,アーキテクチャを使用した深層畳み込みニューラルネットワーク(CNN),層,および入力オブジェクト(SeriesNetwork(深度学习工具箱)またはDAGNetwork(深度学习工具箱))で指定したパラメーターが実装されます。コードジェネレーターはコンピュータービジョンおよび機械学習用の手臂®计算库を利用します。手臂Mali GPU ターゲットで深層学習を実行するために、ホスト開発コンピューターでコードを生成します。次に、実行可能プログラムをビルドして実行するために、生成されたコードを ARM ターゲット プラットフォームに移動します。たとえば、HiKey960 は生成されたコードを実行できるターゲット プラットフォームの 1 つです。

要件

  1. 深度学习工具。

  2. 深度学习工具箱MobileNet-v2网络模型サポートパッケージ。

  3. 深度学习库的GPU编码器接口サポートパッケージ。サポートパッケージをインストールするには、MATLAB®[アドオン]メニューでサポートパッケージを選択します。

  4. コンピューター ビジョンおよび機械学習用の 手臂计算库をターゲットハードウェアにインストールしなければなりません。サポートされているコンパイラおよびライブラリのバージョンの詳細は、前提条件となる製品のインストールを参照してください。

  5. コンパイラおよびライブラリの環境変数。詳細については,環境変数を参照してください。

事前学習済みのネットワークの読み込み

  1. 事前学習済みの MobileNet-v2ネットワークを読み込みます。イメージ分類用の異なる事前学習済みネットワークの読み込みを選択できます。必要なサポート パッケージがインストールされていない場合、ダウンロード用リンクが表示されます。

    网= mobilenetv2;

  2. オブジェクトにはDAGNetworkオブジェクトが格納されています。関数analyzeNetwork(深度学习工具箱)を使用して、ネットワーク アーキテクチャを対話的に可視化して表示し、ネットワークに関するエラーや問題を検出して、ネットワーク層についての詳細情報を表示します。層の情報には、層の活性化と学習可能なパラメーターのサイズ、学習可能なパラメーターの総数、および再帰層の状態パラメーターのサイズが含まれます。

    analyzeNetwork(净);

  3. 分類するイメージのサイズは,ネットワークの入力サイズと同じでなければなりません。GoogLeNetの場合,imageInputLayer(深度学习工具箱)のサイズは224 x 224 x 3です。出力classificationLayer(深度学习工具箱)プロパティには、ネットワークによって学習されたクラスの名前が含まれています。合計 1000個のクラス名のうち 10個をランダムに表示します。

    一会= net.Layers . class(结束);numClasses =元素个数(类名);disp(类名(randperm (numClasses 10)))
    公鸡,蜂房,肥皂分配器,titi,汽车车轮,guenon,枪口,木耳,七叶石柱

    詳細については,深層学習層の一覧(深度学习工具箱)を参照してください。

cnncodegenを使用したコード生成

臂计算库を使ってコードを生成するには,cnncodegenコマンドのtargetlibオプションを使用します。cnncodegenコマンドはSeriesNetworkまたはDAGNetworkネットワークオブジェクトのc++コードを生成します。

  1. “arm-compute-mali”として指定された“targetlib”をもつcnncodegenを呼び出します。次に例を示します。

    网= googlenet;cnncodegen(净,“targetlib”“arm-compute-mali”“batchsize”1);

    “arm-compute-mali”の場合、batchsizeの値は1でなければなりません。

    臂计算库のライブラリ固有のパラメーターを指定できる“targetparams”の名前と値のペアの引数は,手臂马里GPUをターゲットとする場合,適用されません。

  2. cnncodegenコマンドは,コード,makefile,cnnbuild_rtw.mk,およびその他のサポートファイルを生成して,ターゲットハードウェアに生成されたコードをビルドします。コマンドはすべての生成されたファイルをcodegenフォルダーに配置します。

  3. 预测を呼び出すc++主要関数を作成します。生成されたコードと統合するメインファイルの例については,ARM马里GPUでの深層学習の予測を参照してください。

  4. 優先する安全文件副本(SCP)とSecure Shell (SSH)クライアントを使用して,生成されたcodegenフォルダーとその他のファイルをホスト開発コンピューターから 手臂ハードウェアに移動します。ターゲットで実行可能プログラムをビルドします。

生成コード

103年DAGネットワークは個の層クラスから成る配列を含むc++クラス(CnnMain)として生成されます。コードジェネレーターは畳み込み層とバッチ正規化層のレイヤーフュージョン最適化で層の数を削減します。cnn_exec.hppファイルからのクラス宣言のスニペットが表示されます。

cnn_exec.hppファイル

  • このクラスの设置()メソッドは,ハンドルを設定し,ネットワークオブジェクトの各層にメモリを割り当てます。

  • 预测()メソッドは,ネットワーク内の103個の層それぞれについて予測を呼び出します。

  • cnn_exec.cppファイルにはCnnMainクラスのオブジェクト関数の定義が含まれます。

バイナリファイルは,ネットワーク内の全結合層や畳み込み層などのパラメーターを持つ層に対してエクスポートされます。たとえば,ファイル美国有线电视新闻网および美国有线电视新闻网は,ネットワーク内の卷积層の重みとバイアス パラメーターに対応します。コード ジェネレーターは、これらのバイナリ ファイルをcodegenフォルダーに配置します。コードジェネレーターはライブラリファイルcnnbuildをビルドし、生成されたすべてのファイルをcodegenフォルダーに配置します。

制限

  • 手臂马里GPUのコード生成は,“channel-wise”として設定されたNumGroupsプロパティまたは2を超える値をもつ2次元のグループ化された畳み込み層でサポートされません。

参考

関数

関連するトピック