Main Content

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

cnncodegen

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

説明

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

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

すべて折りたたむ

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

関数 googlenet (Deep Learning Toolbox) を使用して事前学習済みの 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 を生成したりビルドしたりせずに C++ コードを生成します。

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

ARM Compute Library のパラメーター (CPU)

フィールド

説明

ArmComputeVersion

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

ArmArchitecture

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

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

ARM Compute Library のパラメーター (Mali GPU)

フィールド

説明

ArmComputeVersion

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

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

フィールド

説明

AutoTuning

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

メモ

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

DataType

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

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

CalibrationResultFile

キャリブレーション データを含む MAT ファイルの場所。既定値は '' です。このオプションは DataType'INT8' に設定されている場合にのみ適用されます。

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

int8 キャリブレーションのバッチ数を指定する数値。ソフトウェアでは batchsize*NumCalibrationBatches の積を使用して、キャリブレーションを実行するイメージ データセットからイメージのランダムなサブセットを選択します。batchsize*NumCalibrationBatches の値はイメージ データセット内に存在するイメージの数を超えてはなりません。既定値は 50 です。このオプションは DataType'INT8' に設定されている場合にのみ適用されます。

NVIDIA で推奨されているキャリブレーションに十分なイメージの数は、約 500 です。詳細については、TensorRT のドキュメンテーションを参照してください。

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

すべて折りたたむ

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

コンパイルする NVIDIA GPU の計算機能を指定する文字ベクトルまたは string スカラー。引数は 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' です。

既定値は '3.5' です。

互換性についての考慮事項

すべて展開する

将来のリリースで動作変更

R2017b で導入