このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
GPU Coder™ を使用して、Deep Learning Toolbox™ からさまざまな事前学習済みの深層学習ネットワークの予測に対する最適化されたコードを生成できます。生成コードでは、アーキテクチャを使用した深層畳み込みニューラル ネットワーク (CNN)、層、および入力オブジェクト (SeriesNetwork
(Deep Learning Toolbox) または DAGNetwork
(Deep Learning Toolbox)) で指定したパラメーターが実装されます。コード ジェネレーターはコンピューター ビジョンおよび機械学習用の ARM® Compute Library を利用します。ARM Mali GPU ターゲットで深層学習を実行するために、ホスト開発コンピューターでコードを生成します。次に、実行可能プログラムをビルドして実行するために、生成されたコードを ARM ターゲット プラットフォームに移動します。たとえば、HiKey960 は生成されたコードを実行できるターゲット プラットフォームの 1 つです。
Deep Learning Toolbox.
Deep Learning Toolbox Model for MobileNet-v2 Network サポート パッケージ。
GPU Coder Interface for Deep Learning Libraries サポート パッケージ。サポート パッケージをインストールするには、MATLAB® の [アドオン] メニューでサポート パッケージを選択します。
コンピューター ビジョンおよび機械学習用の ARM Compute Library をターゲット ハードウェアにインストールしなければなりません。サポートされているコンパイラおよびライブラリのバージョンの詳細は、前提条件となる製品のインストールを参照してください。
コンパイラおよびライブラリの環境変数。詳細については、環境変数を参照してください。
事前学習済みの MobileNet-v2 ネットワークを読み込みます。イメージ分類用の異なる事前学習済みネットワークの読み込みを選択できます。必要なサポート パッケージがインストールされていない場合、ダウンロード用リンクが表示されます。
net = mobilenetv2;
オブジェクト net
には DAGNetwork
オブジェクトが格納されています。関数 analyzeNetwork
(Deep Learning Toolbox) を使用して、ネットワーク アーキテクチャを対話的に可視化して表示し、ネットワークに関するエラーや問題を検出して、ネットワーク層についての詳細情報を表示します。層の情報には、層の活性化と学習可能なパラメーターのサイズ、学習可能なパラメーターの総数、および再帰層の状態パラメーターのサイズが含まれます。
analyzeNetwork(net);
分類するイメージのサイズは、ネットワークの入力サイズと同じでなければなりません。GoogLeNet の場合、imageInputLayer
(Deep Learning Toolbox) のサイズは 224 x 224 x 3 です。出力 classificationLayer
(Deep Learning Toolbox) の Classes
プロパティには、ネットワークによって学習されたクラスの名前が含まれています。合計 1000 個のクラス名のうち 10 個をランダムに表示します。
classNames = net.Layers(end).Classes; numClasses = numel(classNames); disp(classNames(randperm(numClasses,10)))
cock apiary soap dispenser titi car wheel guenon muzzle agaric buckeye megalith
詳細については、深層学習層の一覧 (Deep Learning Toolbox)を参照してください。
cnncodegen
を使用したコード生成ARM Compute Library を使ってコードを生成するには、cnncodegen
コマンドの targetlib
オプションを使用します。cnncodegen
コマンドは SeriesNetwork
または DAGNetwork
ネットワーク オブジェクトの C++ コードを生成します。
'arm-compute-mali'
として指定された 'targetlib'
をもつ cnncodegen
を呼び出します。次に例を示します。
net = googlenet; cnncodegen(net,'targetlib','arm-compute-mali','batchsize',1);
'arm-compute-mali'
の場合、batchsize
の値は 1
でなければなりません。
ARM Compute Library のライブラリ固有のパラメーターを指定できる 'targetparams'
の名前と値のペアの引数は、ARM Mali GPU をターゲットとする場合、適用されません。
cnncodegen
コマンドは、コード、makefile、cnnbuild_rtw.mk
、およびその他のサポート ファイルを生成して、ターゲット ハードウェアに生成されたコードをビルドします。コマンドはすべての生成されたファイルを codegen
フォルダーに配置します。
predict
を呼び出す C++ main 関数を作成します。生成されたコードと統合するメイン ファイルの例については、ARM Mali GPU での深層学習の予測を参照してください。
優先する Secure File Copy (SCP) と Secure Shell (SSH) クライアントを使用して、生成された codegen
フォルダーとその他のファイルをホスト開発コンピューターから ARM ハードウェアに移動します。ターゲットで実行可能プログラムをビルドします。
DAG ネットワークは、103 個の層クラスから成る配列を含む C++ クラス (CnnMain
) として生成されます。コード ジェネレーターは畳み込み層とバッチ正規化層のレイヤー フュージョン最適化で層の数を削減します。cnn_exec.hpp
ファイルからのクラス宣言のスニペットが表示されます。
このクラスの setup()
メソッドは、ハンドルを設定し、ネットワーク オブジェクトの各層にメモリを割り当てます。
predict()
メソッドは、ネットワーク内の 103 個の層それぞれについて予測を呼び出します。
cnn_exec.cpp
ファイルには CnnMain
クラスのオブジェクト関数の定義が含まれます。
バイナリ ファイルは、ネットワーク内の全結合層や畳み込み層などのパラメーターを持つ層に対してエクスポートされます。たとえば、ファイル cnn_CnnMain_Conv*_w
および cnn_CnnMain_Conv*_b
は、ネットワーク内の convolutional
層の重みとバイアス パラメーターに対応します。コード ジェネレーターは、これらのバイナリ ファイルを codegen
フォルダーに配置します。コード ジェネレーターはライブラリ ファイル cnnbuild
をビルドし、生成されたすべてのファイルを codegen
フォルダーに配置します。
ARM Mali GPU のコード生成は、'channel-wise'
として設定された NumGroups
プロパティまたは 2 を超える値をもつ 2 次元のグループ化された畳み込み層でサポートされません。