コード生成のための事前学習済みネットワークの読み込み
事前学習済みのニューラル ネットワークのためのコードを生成できます。コード ジェネレーターにネットワークを提供するには、SeriesNetwork
(Deep Learning Toolbox)、DAGNetwork
(Deep Learning Toolbox)、yolov2ObjectDetector
(Computer Vision Toolbox)、yolov3ObjectDetector
(Computer Vision Toolbox)、yolov4ObjectDetector
(Computer Vision Toolbox)、ssdObjectDetector
(Computer Vision Toolbox)、または dlnetwork
(Deep Learning Toolbox) オブジェクトを学習済みネットワークから読み込みます。
coder.loadDeepLearningNetwork
を使用したネットワークの読み込み
coder.loadDeepLearningNetwork
を使用して、コード生成でサポートされているネットワークからネットワーク オブジェクトを読み込むことができます。ネットワークを MAT ファイルから指定できます。MAT ファイルは読み込まれるネットワークのみを含んでいなければなりません。
たとえば、関数 trainNetwork
(Deep Learning Toolbox) を使用して myNet
という学習済みのネットワーク オブジェクトを作成するとします。次に save
を入力してワークスペースを保存します。これによって、そのネットワーク オブジェクトを含む matlab.mat
というファイルが作成されます。ネットワーク オブジェクト myNet
を読み込むには、次のように入力します。
net = coder.loadDeepLearningNetwork('matlab.mat');
事前学習済みの SeriesNetwork
、DAGNetwork
、dlnetwork
、yolov2ObjectDetector
、yolov3ObjectDetector
、yolov4ObjectDetector
、または ssdObjectDetector
オブジェクトを返す関数の名前を提供することで、ネットワークの指定もできます。以下に例を示します。
alexnet
(Deep Learning Toolbox)densenet201
(Deep Learning Toolbox)googlenet
(Deep Learning Toolbox)inceptionv3
(Deep Learning Toolbox)mobilenetv2
(Deep Learning Toolbox)resnet18
(Deep Learning Toolbox)resnet50
(Deep Learning Toolbox)resnet101
(Deep Learning Toolbox)squeezenet
(Deep Learning Toolbox)vgg16
(Deep Learning Toolbox)vgg19
(Deep Learning Toolbox)xception
(Deep Learning Toolbox)
たとえば、次のように入力してネットワーク オブジェクトを読み込みます。
net = coder.loadDeepLearningNetwork('googlenet');
前述のリストにある Deep Learning Toolbox™ 関数には、関数のサポート パッケージをインストールする必要があります。事前学習済みの深層ニューラル ネットワーク (Deep Learning Toolbox)を参照してください。
コード生成のためのネットワーク オブジェクトの指定
codegen
またはアプリを使用してコードを生成する場合、coder.loadDeepLearningNetwork
を使用してエントリポイント関数の内部にネットワーク オブジェクトを読み込みます。次に例を示します。
function out = myNet_predict(in) %#codegen persistent mynet; if isempty(mynet) mynet = coder.loadDeepLearningNetwork('matlab.mat'); end out = predict(mynet,in);
alexnet
、inceptionv3
、googlenet
、および resnet
といったサポート パッケージ関数として使用できる事前学習済みネットワークに対して、サポート パッケージ関数を直接指定できます (たとえば「mynet = googlenet
」と記述する)。
次に、エントリポイント関数のコードを生成します。次に例を示します。
cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); codegen -args {ones(224,224,3,'single')} -config cfg myNet_predict
コード生成のための dlnetwork
オブジェクトの指定
mynet.mat
MAT ファイルに事前学習済みの dlnetwork
ネットワーク オブジェクトがあるとします。このネットワークの応答を予測するには、次のコードに示すようなエントリポイント関数を MATLAB® で作成します。
function a = myDLNet_predict(in) dlIn = dlarray(in, 'SSC'); persistent dlnet; if isempty(dlnet) dlnet = coder.loadDeepLearningNetwork('mynet.mat'); end dlA = predict(dlnet, dlIn); a = extractdata(dlA); end
この例では、myDLNet_predict
の入出力のデータ型は簡略化されており、dlarray
オブジェクトは関数内で作成されます。dlarray
オブジェクトの extractdata
(Deep Learning Toolbox) メソッドは、dlarray
dlA
内のデータを myDLNet_predict
の出力として返します。出力 a
のデータ型は dlA
の基となるデータ型と同じです。このエントリポイント設計には次の利点があります。
スタティック ライブラリ、ダイナミック ライブラリ、実行可能ファイルなどのスタンドアロン コード生成ワークフローとの統合が容易になります。
関数
extractdata
からの出力のデータ形式は、MATLAB 環境と生成コードの両方で同じ順序 ('SCBTU'
) になります。MEX ワークフローのパフォーマンスが向上します。
Simulink® は
dlarray
オブジェクトをネイティブにサポートしていないため、MATLAB Function ブロックを使用して Simulink ワークフローを簡略化します。
次に、エントリポイント関数のコードを生成します。次に例を示します。
cfg = coder.config('lib'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); codegen -args {ones(224,224,3,'single')} -config cfg myDLNet_predict
制限
coder.loadDeepLearningNetwork
は複数のネットワークをもつ MAT ファイルの読み込みはサポートしていません。MAT ファイルは読み込まれるネットワークのみを含んでいなければなりません。
コード ジェネレーターでは、文字はロケール設定で指定された 8 ビットの ASCII コードセットで表されます。したがって、ファイル、フォルダー、またはネットワーク名に ASCII 以外の文字を使用すると、エラーが発生することがあります。詳細については、コード生成での文字のエンコードを参照してください。
参考
関数
codegen
|trainNetwork
(Deep Learning Toolbox) |coder.loadDeepLearningNetwork
オブジェクト
SeriesNetwork
(Deep Learning Toolbox) |DAGNetwork
(Deep Learning Toolbox) |yolov2ObjectDetector
(Computer Vision Toolbox) |ssdObjectDetector
(Computer Vision Toolbox) |dlarray
(Deep Learning Toolbox) |dlnetwork
(Deep Learning Toolbox)