主要内容

딥러닝신경망을위한코드생성

이예제에서는딥러닝을사용하는영상분류응용사례에서코드생성을수행하는방법을보여줍니다。이예제에서는codegen명령을사용하여,MobileNet-v2 ResNet, GoogLeNet과같은영상분류신경망을사용하여예측을실행하는墨西哥人함수를생성합니다。

타사선행조건

필수

이예제는cuda mex를생성하며,다음과같은타사구사항이있습니다。

  • Cuda®지원nvidia®gpu및호환되는드라이버。

선택 사항

정적,동적라이브러리또는실행파일과같은비墨西哥人빌드의경우,이예제에는다음과같은추가요구사항이있습니다。

显卡환경확显卡하기

coder.checkGpuInstall(GPU编码器)함수를사용하여이예제를실행하는데필요한컴파일러와라이브러리가올바르게설치되었는지확인합니다。

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

mobilenetv2_predict진입점함수

MobileNet-v2는컨벌루션신경망이며,ImageNet데이터베이스의1백만개가넘는영상에대해훈련되었습니다。이신경망에는155개의계층이있으며,영상을키보드,마우스,연필,각종동물등1000가지사물범주로분류할수있습니다。신경망의상입력크기는224×224입니다。analyzeNetwork함수를사용하여딥러닝신경망아키텍처의대화형시각화를@ @시합니다。

Net = mobilenetv2();analyzeNetwork(净);

mobilenetv2_predict.m진입점함수는영상을입력값으로받아서사전훈련된MobileNet-v2컨벌루션신경망을사용하여영상에대해예측을실행합니다。이함수는속객체mynet을사용하여系列网络객체를불러온후후속호출에서예측을위해영속객체를재사용합니다。

类型(“mobilenetv2_predict.m”
The MathWorks, Inc. function out = mobilenetv2_predict(in) %#codegen persistent mynet;if isempty(mynet) mynet = code . loaddeeplearningnetwork ('mobilenetv2','mobilenetv2');输入输出= mynet.predict(in);

墨西哥코드생성실행하기

mobilenetv2_predict진입점함수에대한CUDA코드를생성하려면墨西哥人대상에대한GPU코드구성객체를만들고대상언어c++로를설정하십시오。编码器。DeepLearningConfig(GPU编码器)함수를사용하여CuDNN딥러닝구성객체를만들고이객체를gpu코드구성객체의DeepLearningConfig속성에할당합니다。codegen명령을실행하고입력크기를[224,224,3]으로지정합니다。이값은MobileNet-v2신경망의입력계층크기입니다。

cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgmobilenetv2_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

생성된코드에대한설명

시리즈신경망은155개의계층클래스로구성된배열과신경망을설정,예,측정리하는함수를가지는c++클래스로생성됩니다。

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

이클래스의设置()메서드는핸들을설정하고网络객체의각계층에대해메모리를할당합니다。预测()메서드는신경망의155개계층각각에대해예측을수행합니다。

생성된코드파일mobilenetv2_predict.cu의진입점함수mobilenetv2_predict ()b_mobilenetv2클래스유형의정적객체를생성하고객이网络체에서를设置과预测호출합니다。

静态b_mobilenetv2_0mynet;静态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;}
/* pass in input */ DeepLearningNetwork_predict(&mynet, in, out);}

신경망의완전연결계층,컨벌루션계층처럼파라미터를가지는계층에대한이진파일이내보내집니다。예를들어,cnn_mobilenetv2_conv * _w파일과cnn_mobilenetv2_conv * _b파일은이신경망에서각각컨벌루션계층의가중치파라미터와편향파라미터에해당합니다。생성된파일의목록을보려면다음을사용하십시오。

dir (fullfile (pwd,“codegen”墨西哥人的“mobilenetv2_predict”))

생성된mex실행하기

입력상하나를불러옵니다。

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

입력상에대해mobilenetv2_predict_mex를호출합니다。

Im = imresize(Im, [224,224]);Predict_scores = mobilenetv2_predict_mex(双(im));

상위5개의예측점수와그레이블을가져옵니다。

[scores,indx] = sort(predict_scores,“下”);classNames = net.Layers(end).ClassNames;classNamesTop = classNames(indx(1:5));H =数字;h.位置(3)= 2*h.位置(3);Ax1 = subplot(1,2,1);Ax2 = subplot(1,2,2);图像(ax₁,im);barh (ax2,分数(5:1:1))包含(ax2,“概率”) yticklabels(ax2,classNamesTop(5:-1:1))YAxisLocation =“对”;sgtitle (“使用MobileNet-v2的五大预测”

메모리로불러온정적网络객체를지웁니다。

清晰的墨西哥人

ResNet-50신경망을사용한상분류

DAG신경망ResNet-50을상분류에사용할수도있습니다。MATLAB에서사용가능한사전훈련된ResNet-50모델은深度学习工具箱模型ResNet-50网络지원패키지에서제공됩니다。지원패키지를다운로드하여설치하려면애드온탐색기를사용하십시오。애드온을찾아서설치하는방법에대해자세히알아보려면애드온을받고관리하기항목을참조하십시오。

Net = resnet50;disp(净)
DAGNetwork with properties: 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 = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfgresnet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

입력상에대해resnet_predict_mex를호출합니다。

Predict_scores = resnet_predict_mex(双(im));

상위5개의예측점수와그레이블을가져옵니다。

[scores,indx] = sort(predict_scores,“下”);classNames = net.Layers(end).ClassNames;classNamesTop = classNames(indx(1:5));H =数字;h.位置(3)= 2*h.位置(3);Ax1 = subplot(1,2,1);Ax2 = subplot(1,2,2);图像(ax₁,im);barh (ax2,分数(5:1:1))包含(ax2,“概率”) yticklabels(ax2,classNamesTop(5:-1:1))YAxisLocation =“对”;sgtitle (“使用ResNet-50的五大预测”

메모리로불러온정적网络객체를지웁니다。

清晰的墨西哥人

GoogLeNet(Inception)신경망을사용한상분류

MATLAB에서사용가능한사전훈련된GoogLeNet모델은深度学习工具箱模型用于GoogLeNet网络지원패키지에서제공됩니다。지원패키지를다운로드하여설치하려면애드온탐색기를사용하십시오。애드온을찾아서설치하는방법에대해자세히알아보려면애드온을받고관리하기항목을참조하십시오。

Net = googlenet;disp(净)
DAGNetwork with properties: Layers: [144×1 nnet.cnn.layer.Layer] Connections: [170×2 table] InputNames: {'data'} OutputNames: {'output'}

墨西哥코드생성실행하기

googlenet_predict.m진입점함수에대한cuda코드를생성합니다。이진입점함수는googlenet함수를호출하여신경망을불러오고입력상에대해예측을수행합니다。이진입점함수에대한코드를생성하려면墨西哥人대상에대한GPU구성객체를만드십시오。

cfg = code . gpuconfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”);codegen配置cfggooglenet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

입력상에대해googlenet_predict_mex를호출합니다。

Im = imresize(Im, [224,224]);Predict_scores = googlenet_predict_mex(双(im));

상위5개의예측점수와그레이블을가져옵니다。

[scores,indx] = sort(predict_scores,“下”);classNames = net.Layers(end).ClassNames;classNamesTop = classNames(indx(1:5));H =数字;h.位置(3)= 2*h.位置(3);Ax1 = subplot(1,2,1);Ax2 = subplot(1,2,2);图像(ax₁,im);barh (ax2,分数(5:1:1))包含(ax2,“概率”) yticklabels(ax2,classNamesTop(5:-1:1))YAxisLocation =“对”;sgtitle (“使用GoogLeNet的五大预测”

메모리로불러온정적网络객체를지웁니다。

清晰的墨西哥人

관련 항목