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 は、単一の SeriesNetwork オブジェクト、DAGNetwork オブジェクト、yolov2ObjectDetector オブジェクト、ssdObjectDetector オブジェクト、または dlnetwork オブジェクトが含まれた、MATLAB® パス上に存在する有効な MAT ファイルでなければなりません。MAT ファイルには、読み込まれるネットワークのみが含まれていなければなりません。

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

net = coder.loadDeepLearningNetwork(___,network_name) は、net = coder.loadDeepLearningNetwork(filename) と同じですが、ネットワークから生成される C++ クラスに名前を付けるためのオプションを指定しています。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'mkldnn' にして DeepLearningConfig を設定します。関数 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 predict を呼び出し、上位 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++ クラス定義を含むソース ファイル、重みファイル、およびバイアス ファイルが含まれます。

入力引数

すべて折りたたむ

事前学習済みの SeriesNetwork オブジェクト、DAGNetwork オブジェクト、yolov2ObjectDetector オブジェクト、ssdObjectDetector オブジェクト、または dlnetwork オブジェクトを含む MAT ファイルの名前を指定します。

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

データ型: string

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

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

データ型: string

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

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

データ型: char

出力引数

すべて折りたたむ

ネットワーク推論。SeriesNetwork オブジェクト、DAGNetwork オブジェクト、yolov2ObjectDetector オブジェクト、ssdObjectDetector オブジェクト、または dlnetwork オブジェクトとして返されます。

制限

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

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

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

拡張機能

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

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

バージョン履歴

R2017b で導入