メインコンテンツ

コード生成のための事前学習済みネットワークの読み込み

コード生成用に、事前学習済みの深層学習ネットワークを MATLAB® および Simulink® に読み込むことができます。事前学習済みネットワークからコードを生成するには、以下の関数を使用してネットワークを読み込みます。

次のように dlnetwork オブジェクトを渡すこともできます。

  • エントリポイント関数に直接渡す。

  • 定数オブジェクトを coder.Constant を使用してラップし、引数としてエントリポイント関数に渡す

事前学習済みネットワークの読み込み

事前学習済みネットワークは、いくつかの異なる方法で読み込むことができます。

MAT ファイルに保存されたネットワークを coder.loadDeepLearningNetwork を使用して読み込む

コード生成用に任意の MAT ファイルから dlnetwork オブジェクトを読み込むことができます。dlnetwork を MAT ファイルに保存し、この MAT ファイルを coder.loadDeepLearningNetwork で指定してネットワークを読み込みます。MAT ファイルは読み込むネットワークのみを含んでいなければなりません。

たとえば、次のコマンドは、myNet という名前の MAT ファイルを読み込みます。

net = coder.loadDeepLearningNetwork('myNet.mat');

coder.loadDeepLearningNetwork に関数名を渡してネットワークを読み込む

coder.loadDeepLearningNetwork を使用して、dlnetwork またはオブジェクト検出器を返す関数の名前を渡すことで事前学習済みネットワークを読み込むことができます。サポートされるクラスの詳細については、サポートされているクラスを参照してください。

たとえば、imagePretrainedNetwork を使用して Squeeze ネットワークを読み込む関数 getNetwork を記述します。

function dlnet = getNetwork()

dlnet = imagePretrainedNetwork("squeezenet");

end

次のコードを使用してネットワーク オブジェクトを読み込むことができます。

net = coder.loadDeepLearningNetwork('getNetwork');

事前学習済みネットワークを imagePretrainedNetwork を使用して読み込む

imagePretrainedNetwork (Deep Learning Toolbox) 関数を使用して、コード生成用に Deep Learning Toolbox™ で提供されている事前学習済みネットワークを読み込むことができます。

net = imagePretrainedNetwork("googlenet")

googlenet などの事前学習済みニューラル ネットワークについては、必要なサポート パッケージをダウンロードしてインストールする必要があります。imagePretrainedNetwork 関数によってダウンロード用リンクが提供されます。詳細については、事前学習済みの深層ニューラル ネットワーク (Deep Learning Toolbox)を参照してください。

事前学習済みネットワークを coder.load 関数を使用して読み込む

事前学習済みネットワークが dlnetwork オブジェクトの場合、エントリポイント関数で coder.load 関数を使用してネットワークを読み込むことができます。この方法は、汎用 C/C++ コードまたは標準 CUDA コードの生成にのみ使用できます。 (R2025a 以降)

たとえば、次の関数は、ネットワークを含む MAT ファイルを構造体として読み込みます。

function out = myNet_predict(matfile, varName, in)

S = coder.load(matfile);
dlnet = S.(varName);
out = predict(dlnet, in);

end

codegen 関数を使用してエントリポイント関数のコードを生成します。

cfg = coder.config('mex');

dlnet = imagePretrainedNetwork('squeezenet');
save('myNet.mat','dlnet');

args = {coder.Constant('dlnet.mat'),coder.Constant('dlnet'), dlarray(ones(224,224,3,'single'), 'SSC')};

codegen -args args -config cfg myNet_predict

事前学習済みネットワークをコンパイル時の外部関数から読み込む

getNetwork 関数を外部関数として宣言し、coder.const 関数を使用してコンパイル時の定数としてネットワークを読み込むことで、事前学習済みネットワークを読み込むことができます。この方法は、汎用 C/C++ コードまたは標準 CUDA コードの生成にのみ使用できます。 (R2025a 以降)

たとえば、imagePretrainedNetwork を使用して Squeeze ネットワークを読み込む関数 getNetwork を記述します。

function dlnet = getNetwork()

dlnet = imagePretrainedNetwork("squeezenet");

end

次に、coder.extrinsic を使用して getNetwork を外部関数として宣言し、coder.const ステートメントで getNetwork を呼び出します。

function out = myNet_predict(in)

coder.extrinsic('getNetwork');
dlnet = coder.const(getNetwork());
out = predict(dlnet, in);

end

codegen 関数を使用してエントリポイント関数のコードを生成します。

cfg = coder.config('mex');

codegen -args {dlarray(ones(224,224,3,'single'), 'SSC')} -config cfg myNet_predict

事前学習済みネットワークをエントリポイント関数に渡す

事前学習済みネットワークが dlnetwork オブジェクトの場合、そのオブジェクトをエントリポイント関数に直接渡すことでネットワークを読み込むことができます。この方法は、汎用 C/C++ コードまたは標準 CUDA コードの生成にのみ使用できます。 (R2025a 以降)

事前学習済みネットワークをエントリポイント関数に直接渡すのはプロトタイピングでは便利ですが、スタンドアロンの実行可能ファイルの生成には推奨されません。

たとえば、次のコードは、dlnetwork オブジェクトをエントリポイント関数に入力として渡します。

function out = myNet_predict(dlnet,in)

out = predict(dlnet, in);

end

codegen 関数を使用してエントリポイント関数のコードを生成します。

cfg = coder.config('mex');
dlnet = imagePretrainedNetwork('squeezenet');

codegen -args {dlnet, dlarray(ones(224,224,3,'single'), 'SSC')} -config cfg myNet_predict

制限

  • coder.loadDeepLearningNetwork は、複数のネットワークまたは複数のオブジェクト検出器をもつ MAT ファイルの読み込みはサポートしていません。

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

参考

関数

オブジェクト

トピック