Main Content

coder.loadDeepLearningNetwork

深層学習ネットワーク モデルの読み込み

説明

net = coder.loadDeepLearningNetwork(filename) は、filename MAT ファイルに保存された事前学習済みの深層学習 SeriesNetwork (Deep Learning Toolbox)DAGNetwork (Deep Learning Toolbox)yolov2ObjectDetector (Computer Vision Toolbox)ssdObjectDetector (Computer Vision Toolbox) または dlnetwork (Deep Learning Toolbox) オブジェクトを読み込みます。filename は、1 つの SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトが含まれる MATLAB® パス上に存在する有効な MAT ファイルでなければなりません。MAT ファイルは読み込まれるネットワークのみを含んでいなければなりません。

net = coder.loadDeepLearningNetwork(functionname) は、事前学習済みの深層学習 SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトを返す関数を呼び出します。functionname は、SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトを返す MATLAB パス上に存在する関数の名前でなければなりません。

net = coder.loadDeepLearningNetwork(___,network_name) は、ネットワークから生成される C++ クラスに名前を付けるオプションをもつ net = coder.loadDeepLearningNetwork(filename) と同じです。network_name は、MAT ファイルに保存されているか、関数によって指定されているネットワーク オブジェクトの記述名です。ネットワーク名は C++ で有効な識別子である char 型でなければなりません。

ネットワーク オブジェクトの推論からコードを生成するときにこの関数を使用します。この関数はこのネットワークから C++ クラスを生成します。クラス名は MAT ファイル名または関数名から派生します。

メモ

coder.loadDeepLearningNetwork の入力引数はコンパイル時の定数でなければなりません。

すべて折りたたむ

関数 coder.loadDeepLearningNetwork を使用して VGG-16 系列ネットワークを読み込み、このネットワーク用の C++ コードを生成します。

事前学習済みの VGG-16 ネットワークが含まれる MAT ファイルを取得します。

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/VGG/vgg16.mat';
websave('vgg16.mat',url);

関数 coder.loadDeepLearningNetwork を使用して vgg16.mat を永続的な mynet SeriesNetwork オブジェクトに読み込むエントリポイント関数 myVGG16 を作成します。

function out = myVGG16(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('vgg16.mat', 'myVGGnet');
end

out = predict(mynet,in);

永続的なオブジェクトは、入力で predict メソッドを呼び出す関数のその後の呼び出し中にネットワーク オブジェクトの再構成と再読み込みを回避します。

事前学習済みの VGG-16 ネットワークの入力層は、サイズ 224x224x3 のイメージを受け入れます。以下のコード行を使用してグラフィックス ファイルから入力イメージを読み取り、224x224 にサイズ変更します。

in = imread('peppers.png');
in = imresize(in,[224,224]);

MEX コード生成用の coder.config 構成オブジェクトを作成し、ターゲット言語を C++ に設定します。構成オブジェクトで、targetlib を使用して DeepLearningConfig'mkldnn' として設定します。関数 codegen は、MATLAB 関数入力のサイズ、クラス、実数/複素数を決定しなければなりません。-args オプションを使用して、エントリポイント関数への入力のサイズを指定します。-config オプションを使用して、コード生成構成オブジェクトを渡します。

cfg = coder.config('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg myVGG16 -report;

codegen コマンドは生成されたすべてのファイルを codegen フォルダーに入れます。このフォルダーには、エントリポイント関数 myVGG16.cpp の C++ コード、ヘッダー、ニューラル ネットワークの C++ クラス定義が含まれるソース ファイル、重み、バイアス ファイルが含まれます。

入力イメージに対して VGG-16 予測を呼び出して、予測された上位 5 つのラベルを表示します。

predict_scores = myVGG16_mex(in);
[scores,indx] = sort(predict_scores, 'descend');
net = coder.loadDeepLearningNetwork('vgg16.mat');
classNames = net.Layers(end).Classes;
disp(classNames(indx(1:5)));
     bell pepper 
     cucumber 
     grocery store 
     acorn squash 
     butternut squash 

関数 coder.loadDeepLearningNetwork を使用して resnet50 系列ネットワークを読み込み、このネットワーク用の CUDA® コードを生成します。

関数 coder.loadDeepLearningNetwork を使用して Deep Learning Toolbox™ ツールボックス関数 resnet50 を呼び出すエントリポイント関数 resnetFun を作成します。この関数は事前学習済みの ResNet-50 ネットワークを返します。

function out = resnetFun(in)

persistent mynet;
if isempty(mynet)
    mynet = coder.loadDeepLearningNetwork('resnet50', 'myresnet');
end

out = predict(mynet,in);

永続的なオブジェクトは、入力で predict メソッドを呼び出す関数のその後の呼び出し中にネットワーク オブジェクトの再構成と再読み込みを回避します。

事前学習済みの ResNet-50 ネットワークの入力層は、サイズ 224x224x3 のイメージを受け入れます。グラフィックス ファイルから入力イメージを読み取り、224x224 にサイズ変更するには、次のコード行を使用します。

in = imread('peppers.png');
in = imresize(in,[224,224]);

MEX コード生成用の coder.gpuConfig 構成オブジェクトを作成し、ターゲット言語を C++ に設定します。関数 codegen は、MATLAB 関数入力のサイズ、クラス、実数/複素数を決定しなければなりません。-args オプションを使用して、エントリポイント関数への入力のサイズを指定し、-config オプションを使用してコード構成オブジェクトを渡します。

cfg = coder.gpuConfig('mex');
cfg.TargetLang = 'C++';
cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); 
codegen -args {ones(224,224,3,'uint8')} -config cfg resnetFun -report;

codegen コマンドは生成されたすべてのファイルを codegen フォルダーに入れます。このフォルダーには、エントリポイント関数 resnetFun.cu の CUDA コード、ヘッダー、ニューラル ネットワークの C++ クラス定義が含まれるソース ファイル、重み、バイアス ファイルが含まれます。

入力引数

すべて折りたたむ

事前学習済みの SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトが含まれる MAT ファイルの名前を指定します。

この入力引数はコンパイル時の定数でなければなりません。

データ型: string

事前学習済みの SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトを返す関数の名前を指定します。

この入力引数はコンパイル時の定数でなければなりません。

データ型: string

MAT ファイルに保存されるネットワーク オブジェクトの記述名。C++ で有効な識別子である char 型でなければなりません。

この入力引数はコンパイル時の定数でなければなりません。

データ型: char

出力引数

すべて折りたたむ

ネットワークの推論。SeriesNetworkDAGNetworkyolov2ObjectDetectorssdObjectDetector または dlnetwork オブジェクトとして返されます。

制限

  • coder.loadDeepLearningNetwork は複数のネットワークをもつ MAT ファイルの読み込みはサポートしていません。

  • MAT ファイルは読み込まれるネットワークのみを含んでいなければなりません。

  • コード ジェネレーターでは、文字はロケール設定で指定された 8 ビットの ASCII コードセットで表されます。したがって、ファイル、フォルダー、またはネットワーク名に ASCII 以外の文字を使用すると、エラーが発生することがあります。詳細については、コード生成での文字のエンコードを参照してください。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

バージョン履歴

R2017b で導入