主要内容

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

深層学習ネットワークのコード生成

この例では,深層学習を使用するイメージ分類用途のコード生成を実行する方法を説明します。Codegen.,MobileNet-V2,Reset,Googlenetなどのイメージイメージイメージを使するするするMex关联数を生成します。

サードパーティの必要条件

必須

この例では,CUDA墨西哥人を生成します。以下のサードパーティ要件が適用されます。

  • CUDA®対応NVIDIA GPU®および互換性のあるドライバー。

オプション

スタティックライブラリ,ダイナミックライブラリ,または実行可能ファイルなどの墨西哥人以外のビルドについて,この例では以下の要件も適用されます。

GPU環境の検証

关节coder.checkGpuInstallをを使し,この例を実行するにに必要コンパイラライブラリライブラリ设定设定れているを検证しして検证しし

envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

エントリポイント関数mobilenetv2_predict

MobileNet-v2は,ImageNetデータベースの100年万枚を超えるイメージで学習済みの畳み込みニューラルネットワークです。このネットワークは,深さが155層であり,イメージを1000個のオブジェクトカテゴリ(キーボード,マウス,鉛筆,多くの動物など)に分類できます。ネットワークのイメージ入力サイズは224 x 224です。关节analyzeNetwork(深度学习工具箱)を使用して,深層学習ネットワークアーキテクチャを対話的に可視化して表示します。

net = mobilenetv2();分析(网);

エントリポイント関数mobilenetv2_predict.mは,イメージ入力を受け取り,事前学習済みMobileNet-v2畳み込みニューラルネットワークを使用して,イメージについて予測を実行します。この関数は永続オブジェクトyeNet.を使用して系列ネットワークオブジェクトを読み込み,それ以降の呼び出しではこの永続オブジェクトを予測に再利用します。

类型(“mobilenetv2_predict.m”
% Copyright 2017-2019 The MathWorks, Inc. function out = mobilenetv2_predict(in) %#codegen persistent mynet;如果是空的(mynet) mynet = code . loaddeeplearningnetwork ('mobilenetv2','mobilenetv2');输入输出= mynet.predict(in);

墨西哥人コード生成の実行

エントリポイント関数mobilenetv2_predict用のCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。关节编码器。DeepLearningConfigを使用してCuDNN深层学习构成オブジェクト作物,それをgpuコード成オブジェクトのDeepLearningConfigプロパティに割り当てます。Codegen.コマンドコマンド実行,入力サイズサイズ[224,224,3]ににはmobilenet-v2ネットワークのの力层サイズにします。

cfg = coder.gpuconfig('mex');cfg.targetlang =.'c ++';cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);Codegen.-Config.CFG.mobilenetv2_predict-  args.{ONE(224,224,3)}报告
代码生成成功:要查看报告,打开('codegen/mex/mobilenetv2_predict/html/report.mldatx')。

生成されたコードの説明

系列ネットワークは,155個の層クラスから成る配列と,ネットワークの設定,予測の呼び出し,クリーンアップを行う関数を含むc++クラスとして生成されます。

b_mobilenetv2_0{......公众:b_mobilenetv2_0 ();无效的设置();无效的预测();无效的清理();~ b_mobilenetv2_0 ();};

このクラスの设置()メソッドは,ハンドルを設定し,ネットワークオブジェクトの各層にメモリを割り当てます。预测()メソッドは,ネットワーク内の155个の层それぞれについて予测をししし。

生成さされたコードコードmobilenetv2_predict.cu内のエントリポイント关圈mobilenetv2_predict ()は,b_mobilenetv2.クラス型の静的オブジェクトをし,このネットワークオブジェクトに対して设置や预测を呼び出します。

静止的b_mobilenetv2_0yeNet.;静止的boolean_Tmynet_not_empty.
/ *函数定义*/无效mobilenetv2_predict(const real_T in[150528], real32_T out[1000]){如果! mynet_not_empty) {DeepLearningNetwork_setup (&mynet);mynet_not_empty = true;}
/ *通过输入* / deeplearningnetwork_predict(&mynet,在,出);}

バイナリファイルは,ネットワーク内の全結合層や畳み込み層などのパラメーターを持つ層に対してエクスポートされます。たとえば,ファイルcnn_mobilenetv2_conv * _wおよびcnn_mobilenetv2_conv * _bは,ネットワーク内の畳み込み層の重みとバイアスパラメーターに対応します。生成されたファイルのリストを表示するには,次を使用します。

dir(fullfile(pwd,“codegen”'mex''mobilenetv2_predict'))

生成された墨西哥人の実行

入力イメージを読み込みます。

Im = imread(“peppers.png”);imshow (im);

入力イメージに対してmobilenetv2_predict_mexを呼び出します。

IM = IMResize(IM,[224,224]);predict_cores = mobileNetv2_predict_mex(double(im));

上位5つの予测スコアとそのを取得します。

[分数,indx] =排序(predict_scores“下”);ClassNames = Net.Layers(END).Classnames;ClassNamestop = ClassNames(Indx(1:5));h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);图像(AX1,IM);BARH(AX2,分数(5:-1:1))XLABEL(AX2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle('使用MobileNet-V2'的五大预测

ビデオの分類

用词されている补助关联mobilenet_live.mは、Webカメラからフレームを取得して予測を実行し,取得した各ビデオフレームについて分類結果を表示します。この例では,MATLAB®支万博1manbetx持USB摄像头包™によってサポートされる関数网络摄像头(USB网络摄像万博1manbetx头的MATLAB支持包)サポートパッケージははサポートパッケージインストーラーダウンロードしてインストールできサポートダウンロードパッケージはサポートパッケージできできダウンロードパッケージパッケージはてできでき

类型(“mobilenet_live.m”
%Copyright 2017-2019 MathWorks,Inc。函数MobileNet_live%连接到相机摄像机=网络摄像头;%具有前5个预测分数的标签是%映射到相应的标签NET = MOBILENETV2();ClassNames = Net.Layers(END).Classnames;IMFULL =零(224,400,3,'UINT8');fps = 0;斧头=轴;虽然True%拍摄图像Ipicture = Camera.snapshot;%调整并将图片调整为单张图片= Imresize(Ipicture,[224,224]);MobileNet-V2预测TIC的%呼叫MEX函数;pout = mobilenetv2_predict(单(图片)); newt = toc; % fps fps = .9*fps + .1*(1/newt); % top 5 scores [top5labels, scores] = getTopFive(pout,classnames); % display if isvalid(ax) dispResults(ax, imfull, picture, top5labels, scores, fps); else break; end end end function dispResults(ax, imfull, picture, top5labels, scores, fps) for k = 1:3 imfull(:,177:end,k) = picture(:,:,k); end h = imshow(imfull, 'InitialMagnification',200, 'Parent', ax); scol = 1; srow = 20; text(get(h, 'Parent'), scol, srow, sprintf('MobileNet-v2 Demo'), 'color', 'w', 'FontSize', 20); srow = srow + 20; text(get(h, 'Parent'), scol, srow, sprintf('Fps = %2.2f', fps), 'color', 'w', 'FontSize', 15); srow = srow + 20; for k = 1:5 t = text(get(h, 'Parent'), scol, srow, top5labels{k}, 'color', 'w','FontSize', 15); pos = get(t, 'Extent'); text(get(h, 'Parent'), pos(1)+pos(3)+5, srow, sprintf('%2.2f%%', scores(k)), 'color', 'w', 'FontSize', 15); srow = srow + 20; end drawnow; end function [labels, scores] = getTopFive(predictOut,classnames) [val,indx] = sort(predictOut, 'descend'); scores = val(1:5)*100; labels = classnames(indx(1:5)); end

メモリに読み込まれたた的ネットワークネットワークをクリアします。

清晰的墨西哥人

ResNet-50ネットワークを使用したイメージの分類

DAGネットワ​​ークresnet-50を使使しイメージイメージ済み済み済みもも済みresnet-50モデルモデル,深层学习工具箱のresnet-50サポートパッケージにれいます。ししインストールするは,アドオンエクスプローラーをを使ます。アドオンアドオンの検索とインストールの详细は详细アドオンアドオンの取得とととを参照してください。

网= resnet50;DISP(网)
带有属性的DAGNetwork: Layers: [177×1 nnet.cnn.layer.Layer] Connections: [192×2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_fc1000'}

墨西哥人コード生成の実行

エントリポイント関数resnet_predict.m.のCUDAコードを生成するには,墨西哥人ターゲットのGPUコード構成オブジェクトを作成し,ターゲット言語をc++に設定します。このエントリポイント関数は関数resnet50ををて,ネットワークを読み込み,入力イメージに対して予测実行。

cfg = coder.gpuconfig('mex');cfg.targetlang =.'c ++';cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);Codegen.-Config.CFG.resnet_predict.-  args.{ONE(224,224,3)}报告
代码生成成功:要查看报告,打开('codegen/mex/resnet_predict/html/report.mldatx')。

入力イメージに対してresnet_predict_mex.を呼び出します。

predict_scores = resnet_predict_mex(双(im));

上位5つの予测スコアとそのを取得します。

[分数,indx] =排序(predict_scores“下”);ClassNames = Net.Layers(END).Classnames;ClassNamestop = ClassNames(Indx(1:5));h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);图像(AX1,IM);BARH(AX2,分数(5:-1:1))XLABEL(AX2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle('使用Reset-50'的五大预测

メモリに読み込まれたた的ネットワークネットワークをクリアします。

清晰的墨西哥人

GoogLeNet(《盗梦空间》)ネットワークを使用したイメージの分類

MATLAB用の事前の済みgooglenetモデルは,深层学习工具箱のgooglenetサポートパッケージパッケージに含まれいますますますますますはは,アドオンは,アドオンエクスプローラーを使ます。那アドオンアドオンの取得とととを参照してください。

net = googlenet;DISP(网)
带有属性的DAGNetwork: Layers: [144×1 nnet.cnn.layer.Layer] Connections: [170×2 table] InputNames: {'data'} OutputNames: {'output'}

墨西哥人コード生成の実行

エントリポイント関数googlenet_predict.mのCUDAコードを生成します。このエントリポイント関数は関数googlenetををて,ネットワークを読み込み,入力イメージに対して予测実行。このエントリポイント関数のコードを生成するには,墨西哥人ターゲットのGPU構成オブジェクトを作成します。

cfg = coder.gpuconfig('mex');cfg.targetlang =.'c ++';cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);Codegen.-Config.CFG.googlenet_predict-  args.{ONE(224,224,3)}报告
代码生成成功:要查看报告,打开('codegen/mex/googlenet_predict/html/report.mldatx')。

入力イメージに対してgooglenet_predict_mexを呼び出します。

IM = IMResize(IM,[224,224]);predict_cores = googlenet_predict_mex(double(im));

上位5つの予测スコアとそのを取得します。

[分数,indx] =排序(predict_scores“下”);ClassNames = Net.Layers(END).Classnames;ClassNamestop = ClassNames(Indx(1:5));h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);图像(AX1,IM);BARH(AX2,分数(5:-1:1))XLABEL(AX2,“概率”) yticklabels (ax2 classNamesTop (5: 1:1)) ax2。YAxisLocation =“对”;sgtitle(“使用GoogLeNet的五大预测”

メモリに読み込まれたた的ネットワークネットワークをクリアします。

清晰的墨西哥人

参考

关节

オブジェクト

関連するトピック