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

cnncodegen

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

説明

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

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

すべて折りたたむ

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'));

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

事前学習済みの YOLO ネットワークを取得し、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 個の層が含まれています。これらの層は畳み込み層で、その後ろに漏洩 ReLU 層が続き、ネットワーク アーキテクチャの最後に全結合層があります。net.Layers を使用して、このネットワークのすべての層を表示できます。

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

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

コード ジェネレーターは、'/pwd/codegen' フォルダーに .cu ファイルとヘッダー ファイルを生成します。この系列ネットワークは、58 個の層クラスから成る配列を含む CnnMain という名前の C++ クラスとして生成されます。このクラスの 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 Networks (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 です。

メモ

TensorRT ターゲットに対して AutoTuning が有効になっている場合、ソフトウェアは自動調整を無効化してコードを生成します。これは、警告メッセージやエラー メッセージを表示することなく行います。

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 Compute Capability を指定する文字ベクトル。引数は 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 で導入