이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。
이예제에서는딥러닝을사용하는영상분류응용사례에서코드생성을수행하는방법을보여줍니다。이예제에서는编码基因
명령을사용하여,MobileNet-v2 ResNet, GoogLeNet과같은영상분류신경망을사용하여예측을실행하는墨西哥人함수를생성합니다。
필수
이 예제는 库达墨西哥大学를 생성하며, 다음과 같은 타사 요구 사항이 있습니다.
CUDA®지원 NVIDIA®GPU및 호환되는 드라이버.
선택사항
정적,동적라이브러리또는실행파일과같은비墨西哥人빌드의경우,이예제에는다음과같은추가요구사항이있습니다。
英伟达툴킷.
英伟达cuDNN라이브러리。
컴파일러 및 라이브러리 환경 변수. 자세한 내용은第三方硬件(GPU编码器)항목과设置前提产品下载188bet金宝搏(GPU编码器)항목을 참조하십시오.
coder.checkGpuInstall
(GPU编码器)함수를 사용하여 이 예제를 실행하는 데 필요한 컴파일러와 라이브러리가 올바르게 설치되었는지 확인합니다.
envCfg = coder.gpuEnvConfig (“主机”); envCfg.DeepLibTarget=“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
mobilenetv2_predict
진입점 함수MobileNet-v2는 컨벌루션 신경망이며, 图像网데이터베이스의 1.백만 개가 넘는 영상에 대해 훈련되었습니다. 이 신경망에는 155개의 계층이 있으며, 영상을 키보드, 마우스, 연필, 각종 동물 등 1,000가지 사물 범주로 분류할 수 있습니다. 신경망의 영상 입력 크기는 224×224입니다.analyzeNetwork
함수를 사용하여 딥러닝 신경망 아키텍처의 대화형 시각화를 표시합니다.
net=mobilenetw2();分析网络;
mobilenetv2_predict.m진입점 함수는 영상을 입력값으로 받아서 사전 훈련된 MobileNet-v2컨벌루션 신경망을 사용하여 영상에 대해 예측을 실행합니다. 이 함수는 영속 객체mynet을사용하여系列网络객체를불러온후후속호출에서예측을위해영속객체를재사용합니다。
类型(“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
(GPU编码器)함수를사용하여CuDNN
딥러닝 구성 객체를 만들고 이 객체를 GPU코드 구성 객체의DeepLearningConfig
속성에할당합니다。编码基因
명령을실행하고입력크기를(224224 3)으로지정합니다。이값은MobileNet-v2신경망의입력계층크기입니다。
cfg=coder.gpuConfig(“墨西哥”); cfg.TargetLang=“C++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”); 编码基因-配置cfgmobilenetv2_predict-args{one(224224,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_0mynet;静止的boolean_T我的网络不是空的;
/ *函数定义*/无效mobilenetv2_predict(const real_T in[150528], real32_T out[1000]){如果(!mynet(不为空){DeepLearningNetwork_setup (&mynet);mynet_not_empty = true;}
/*传入输入*/DeepLearningNetwork_predict(&mynet,in,out);}
신경망의완전연결계층,컨벌루션계층처럼파라미터를가지는계층에대한이진파일이내보내집니다。예를들어,cnn_mobilenetv2_conv * _w파일과cnn_mobilenetv2_conv * _b파일은이신경망에서각각컨벌루션계층의가중치파라미터와편향파라미터에해당합니다。생성된파일의목록을보려면다음을사용하십시오。
目录(完整文件),“codegen”,“墨西哥”,“MobileNet V2_预测”))
입력 영상 하나를 불러옵니다.
im=imread(“peppers.png”);imshow (im);
입력영상에대해mobilenetv2_predict_mex
를호출합니다。
im=imresize(im[224224]);预测分数=mobilenetv2\u预测分数(双倍(im));
상위 5.개의 예측 점수와 그 레이블을 가져옵니다.
[分数,indx] =排序(predict_scores“下降”); classNames=net.Layers(end).classNames;classNamesTop=classNames(indx(1:5));h=数字;h、 位置(3)=2*h.位置(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은웹캠에서프레임을받아서예측을수행한다음캡처된비디오프레임각각에대한분류결과를표시합니다。이예제는MATLAB®支持U金宝appSB摄像头包™를통해지원되는网络摄像头
(USB网络摄像金宝app头的MATLAB支持包)함수를사용합니다。지원패키지는지원 패키지 인스톨러를통해다운로드하여설치할수있습니다。
类型(“mobilenet_live.m”)
%版权所有2017-2019 MathWorks,Inc.函数mobilenet_live%连接到摄像头=网络摄像头;%预测得分前5名的标签%映射到对应的标签net=mobilenetv2();classnames=net.Layers(end).classnames;imfull=零(224400,3,'uint8');fps=0;ax=轴;当为true时%Take a picture IPacture=camera.snapshot;%调整图片大小并将其强制转换为单个图片=imresize(ipicture[224224]);%调用MobileNet-v2预测tic的MEX函数;pout=mobilenetv2_预测(单个(图片));牛顿=总有机碳;%fps fps=.9*fps+.1*(1/牛顿);%前五名分数[Top5标签,分数]=getTopFive(pout,类名);%显示是否有效(ax)显示结果(ax、imfull、图片、TOP5标签、分数、fps);否则就断了;k=1:3 imfull(:,177:end,k)=picture(:,:,k)的结束函数dispResults(ax,imfull,picture,top5标签,分数,fps);h端=imshow(imfull,‘初始放大倍数’,200,‘父级’,最大值);scol=1;srow=20;文本(get(h,'Parent')、scol、srow、sprintf('MobileNet-v2演示版')、'color','w','FontSize',20);srow=srow+20;文本(get(h,'Parent')、scol、srow、sprintf('Fps=%2.2f',Fps)、'color','w','FontSize',15);srow=srow+20;对于k=1:5t=text(get(h,'Parent')、scol、srow、top5标签{k}、'color','w','FontSize',15);pos=get(t,'范围');文本(获取(h,'父')、位置(1)+位置(3)+5、srow、sprintf('%2.2f%%',分数(k))、'color','w','FontSize',15);srow=srow+20;现在结束;结束函数[labels,scores]=getTopFive(predictOut,classnames)[val,indx]=sort(predictOut,'down');分数=val(1:5)*100;标签=类名(indx(1:5));结束
메모리로불러온정적网络객체를지웁니다。
清晰的墨西哥人;
DAG신경망ResNet-50을영상분류에사용할수도있습니다。MATLAB에서사용가능한사전훈련된ResNet-50모델은深度学习工具箱ResNet-50网络模型지원패키지에서제공됩니다。지원패키지를다운로드하여설치하려면애드온탐색기를사용하십시오。애드온을찾아서설치하는방법에대해자세히알아보려면애드온 받기((MATLAB)를참조하십시오。
网= resnet50;disp(净)
带有属性的DAGNetwork: Layers: [177×1 nnet.cnn.layer.Layer] Connections: [192×2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_fc1000'}
resnet_.m진입점함수에대한CUDA코드를생성하려면墨西哥人대상에대한GPU코드구성객체를만들고대상언어c++로를설정하십시오。이진입점함수는resnet50
함수를 호출하여 신경망을 불러오고 입력 영상에 대해 예측을 수행합니다.
cfg=coder.gpuConfig(“墨西哥”); cfg.TargetLang=“C++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”); 编码基因-配置cfg预测-args{one(224224,3)}报告
代码生成成功:要查看报告,打开('codegen/mex/resnet_predict/html/report.mldatx')。
입력영상에대해预测
를호출합니다。
predict_scores = resnet_predict_mex(双(im));
상위 5.개의 예측 점수와 그 레이블을 가져옵니다.
[分数,indx] =排序(predict_scores“下降”); classNames=net.Layers(end).classNames;classNamesTop=classNames(indx(1:5));h=数字;h、 位置(3)=2*h.位置(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(“使用ResNet-50的五大预测”)
메모리로불러온정적网络객체를지웁니다。
清晰的墨西哥人;
MATLAB에서 사용 가능한 사전 훈련된 水壶모델은 GoogLeNet网络的深度学习工具箱模型지원 패키지에서 제공됩니다. 지원 패키지를 다운로드하여 설치하려면 애드온 탐색기를 사용하십시오. 애드온을 찾아서 설치하는 방법에 대해 자세히 알아보려면애드온 받기((MATLAB)를참조하십시오。
净=googlenet;显示(净)
带有属性的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(“墨西哥”); cfg.TargetLang=“C++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“cudnn”); 编码基因-配置cfggooglenet_predict-args{one(224224,3)}报告
代码生成成功:要查看报告,打开('codegen/mex/googlenet_predict/html/report.mldatx')。
입력영상에대해googlenet_predict_mex
를호출합니다。
im=imresize(im[224224]);预测分数=谷歌预测指数(双(im));
상위 5.개의 예측 점수와 그 레이블을 가져옵니다.
[分数,indx] =排序(predict_scores“下降”); classNames=net.Layers(end).classNames;classNamesTop=classNames(indx(1:5));h=数字;h、 位置(3)=2*h.位置(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的五大预测”)
메모리로불러온정적网络객체를지웁니다。
清晰的墨西哥人;