最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

cnncodegen

コードを生成して系列ネットワークまたは DAG ネットワークのスタティック ライブラリをビルドする

説明

cnncodegen(net,'targetlib',libraryname) は C++ コードを生成し、すべてのプロパティに対する既定値を使用して、指定したネットワーク オブジェクトおよびターゲット ライブラリのスタティック ライブラリをビルドします。

cnncodegen(net,'targetlib',libraryname,Name,Value) は C++ コードを生成し、1 つ以上の Name,Value のペアの引数で指定した追加のコード生成オプションを使用して、指定したネットワーク オブジェクトおよびターゲット ライブラリのスタティック ライブラリをビルドします。

すべて折りたたむ

cnncodegen を使用して、ARM プロセッサに展開する事前学習済みのネットワーク用の C++ コードを生成します。

関数 googlenet を使用して事前学習済みの GoogLeNet モデルを取得します。この関数には Deep Learning Toolbox™ Model for GoogLeNet Network が必要です。このサポート パッケージをまだインストールしていない場合は、この関数によりダウンロード リンクが提供されます。あるいは、https://www.mathworks.com/matlabcentral/fileexchange/64456-deep-learning-toolbox-model-for-googlenet-networkを参照してください。

net = googlenet;

cnncodegen を使用して、'targetlib''arm-compute' に設定してコードを生成します。'arm-compute' の場合、'ArmArchitecture' パラメーターを指定しなければなりません。

cnncodegen(net,'targetlib','arm-compute','targetparams',struct('ArmComputeVersion','19.02','ArmArchitecture','armv8'));

YOLO アーキテクチャ用に作成され、PASCAL データセットの分類を学習させた SeriesNetwork オブジェクトから CUDA® C++ コードを生成します。この例には、GPU Coder™ 製品と GPU Coder Interface for Deep Learning Libraries が必要です。

事前学習済みの YOLO Network を取得して、SeriesNetwork オブジェクトに変換します。

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/Yolo/yolonet.mat';
websave('yolonet.mat',url);
net = coder.loadDeepLearningNetwork('yolonet.mat');

SeriesNetwork オブジェクト net には 58 層が含まれます。これらの層は、Leaky ReLU が続く畳み込み層であり、ネットワーク アーキテクチャの最後の全結合層です。net.Layers を使用してこのネットワーク内のすべての層を確認できます。

関数 cnncodegen を使用して、CUDA コードを生成します。

cnncodegen(net,'targetlib','cudnn');

コード ジェネレーターは .cu とヘッダー ファイルを '/pwd/codegen' フォルダーに生成します。系列ネットワークは CnnMain と呼ばれる C++ クラスとして生成され、58 層のクラスの配列を含んでいます。このクラスの setup() メソッドはハンドルを設定し、各層のオブジェクトにリソースを割り当てます。predict() メソッドはネットワークで 58 層それぞれの予測を呼び出します。cleanup() メソッドは、各層のオブジェクトに割り当てられたすべてのメモリとシステム リソースを解放します。ネットワークの畳み込み層に対するすべてのバイナリの重み (cnn_**_w) とバイアス ファイル (cnn_**_b) は codegen フォルダーに保存されます。ファイルはスタティック ライブラリ cnnbuild.a (Linux®) または cnnbuild.lib (Windows®) にコンパイルされます。

入力引数

すべて折りたたむ

事前学習済みの SeriesNetwork または DAGNetwork オブジェクト。

コードを生成するためのターゲット ライブラリとターゲット プラットフォーム。次の表のいずれかの値として指定します。

説明
'arm-compute'

コンピューター ビジョンと機械学習用の ARM® Compute Library を使用して NEON 命令をサポートする ARM CPU プロセッサをターゲットにします。

MATLAB® Coder™ Interface for Deep Learning Libraries が必要です。

'arm-compute-mali'

コンピューター ビジョンと機械学習用の ARM Compute Library を使用して ARM GPU プロセッサをターゲットにします。

GPU Coder 製品と GPU Coder Interface for Deep Learning Libraries が必要です。

'cudnn'

CUDA Deep Neural Network library (cuDNN) を使用して NVIDIA® GPU をターゲットにします。

GPU Coder 製品と GPU Coder Interface for Deep Learning Libraries が必要です。

'mkldnn'

Intel® Math Kernel Library for Deep Neural Network (MKL-DNN) を使用して Intel CPU プロセッサをターゲットにします。

MATLAB Coder Interface for Deep Learning Libraries が必要です。

'tensorrt'

高性能な深層学習推定オプティマイザーおよびランタイム ライブラリである NVIDIA TensorRT™ を使用して NVIDIA GPU をターゲットにします。

GPU Coder 製品と GPU Coder Interface for Deep Learning Libraries が必要です。

名前と値のペアの引数

オプションのコンマ区切りされた Name,Value の引数ペアを指定します。ここで、Name は引数名、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペア引数を任意の順序で指定できます。

例: cnncodegen(net,'targetlib','mkldnn','codegenonly',0,'batchsize',1) は、MKL-DNN を使用して Intel プロセッサの C++ コードを生成し、net にネットワーク オブジェクトのスタティック ライブラリをビルドます。

一般オプション

すべて折りたたむ

非ゼロの正の整数値。ネットワーク predict() メソッドへの 1 回の呼び出しで処理する観測値の数を指定します。network->predict() を呼び出す場合、入力データのサイズは cnncodegen 中に指定された batchsize 値と一致しなければなりません。

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

boolean フラグ。有効にすると、makefile を生成したりビルドしたりせずに CUDA コードを生成します。

ライブラリ固有のパラメーター。次の表に示すフィールドを含む 11 列の構造体として指定します。

ARM Compute Library のパラメーター

フィールド

説明

ArmComputeVersion

ターゲット ハードウェアの ARM Compute Library のバージョン。'18.03''18.05''18.08''18.11'、または '19.02' として指定します。既定値は '19.02' です。ArmComputeVersion'19.02' よりも新しいバージョンに設定すると、ArmComputeVersion'19.02' に設定されます。

"このプロパティは、ARM CPU ターゲットにのみ影響します。"

ArmArchitecture

ターゲット ハードウェアでサポートされる ARM アーキテクチャ。'armv7 または 'armv8' として指定します。ターゲット ハードウェアの ARM Compute Library のアーキテクチャと同じアーキテクチャを指定しなければなりません。

ArmArchitecture は必須パラメーターです。

"このプロパティは、ARM CPU ターゲットにのみ影響します。"

NVIDIA cuDNN ライブラリのパラメーター

フィールド

説明

AutoTuning

自動調整機能を有効または無効にします。自動調整を有効にすると、cuDNN ライブラリで最速の畳み込みアルゴリズムが検出されるようになります。これにより、SegNet や ResNet のような大規模なネットワークでパフォーマンスが向上します。既定値は true です。

メモ

AutoTuningTensorRT ターゲットに対して有効にすると、ソフトウェアでは自動調整を無効にしてコードが生成されます。これは、警告メッセージやエラー メッセージを生成せずに行われます。

NVIDIA TensorRT ライブラリのパラメーター

フィールド

説明

DataType

ネットワークへのテンソル データ型の入力の精度または層のテンソル出力を指定します。32 ビットの浮動小数点数で推定を実行する場合は、'FP32' を使用します。8 ビット整数の場合、'INT8' を使用します。半精度の場合、'FP16' を使用します。既定値は 'FP32' です。

DataType'FP16' に設定する場合は、computecapability 引数を '7.0' 以上に設定しなければなりません。

DataType'INT8' に設定する場合は、computecapability 引数を '6.1' 以上に設定しなければなりません。Compute Capability 6.2 では INT8 の精度はサポートされません。

DataPath

再キャリブレーション中に使用されるイメージ データセットの場所。既定値は '' です。このオプションは DataType'INT8' に設定されている場合にのみ適用されます。

'INT8' オプションを選択すると、TensorRT は浮動小数点データを int8 に量子化します。再キャリブレーションは、絞り込まれた一連のキャリブレーション データで実行されます。キャリブレーション データは DataPath で指定されるイメージ データの場所に存在しなければなりません。このイメージは、イメージのラベルに対応する名前のフォルダーに存在しなければなりません。

NumCalibrationBatches

キャリブレーションのバッチ サイズを指定する数値。この値はイメージ データセット内に存在するイメージの数を超えてはなりません。このオプションは DataType'INT8' に設定されている場合にのみ適用されます。

GPU オプション (GPU Coder 専用)

すべて折りたたむ

"このプロパティは GPU ターゲットにのみ影響します。"

コンパイルする NVIDIA GPU の計算機能を指定する文字ベクトル。引数は major#.minor# の形式を取ります。可能な値は '3.2'|'3.5'|'3.7'|'5.0'|'5.2'|'5.3'|'6.0'|'6.1'|'6.2'|'7.0'|'7.1'|'7.2' です。

R2017b で導入