主要内容

使用NVIDIA TensorRT进行深度学习预测

这个例子展示了使用NVIDIA TensorRT™库生成深度学习应用程序的代码。它使用编码基因命令生成MEX文件,使用TensorRT使用ResNet-50图像分类网络进行预测。第二个例子演示了编码基因命令生成MEX文件,该文件通过使用TensorRT对徽标分类网络执行8位整数预测。

第三方的先决条件

要求

此示例生成CUDA®MEX,并具有以下第三方要求。

  • CUDA支持NVIDIA®GPU和兼容驱动程序。

可选择的

对于非mex构建,如静态、动态库或可执行文件,本例有以下附加要求。

验证GPU环境

使用coder.checkGpuInstall函数来验证运行此示例所需的编译器和库是否正确设置。

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

这个预测入口点函数

此示例使用DAG网络ResNet-50通过TensorRT显示图像分类。深度学习工具箱的ResNet-50支持包中提供了一个针对MATLAB®的预训练ResNet-50模型。要下载并安装支持包,请使用附加资源管理器。万博1manbetx

这个resnet_.m函数将ResNet-50网络加载到一个持久网络对象中,并在后续的预测调用中重用该持久对象。

类型('resnet_predict.m')
% Copyright 2020 The MathWorks, Inc. function out = resnet_predict(in) %#codegen %在第一次调用该函数时,将构造持久对象并设置%。当后续调用该函数时,将重用相同的对象%来调用预测输入,从而避免重新构造和重新加载网络对象%。持久mynet;调用函数resnet50,返回一个DAG网络%的ResNet-50模型。mynet = coder.loadDeepLearningNetwork(“resnet50”、“resnet”);输入输出= mynet.predict(in);

运行MEX代码生成

要为服务器生成CUDA代码,请执行以下操作:预测为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig函数创建一个坦索特深度学习配置对象并将其分配给DeepLearningConfigGPU代码配置对象的属性。运行编码基因指定输入大小[224224,3]的命令。此值对应于ResNet-50网络的输入层大小。

cfg=coder.gpuConfig(“墨西哥”); cfg.TargetLang=“C++”; cfg.DeepLearningConfig=coder.DeepLearningConfig(“tensorrt”);codegen-配置cfg预测-args{one(224224,3)}报告
代码生成成功:查看报告

对测试图像执行预测

im=imread(“peppers.png”);Im = imresize(Im, [224,224]);predict_scores = resnet_predict_mex(双(im));%%得到前5个概率分数和他们的标签[val,indx]=排序(预测分数,“下降”); 分数=val(1:5)*100;net=resnet50;classnames=net.Layers(end).classnames;标签=类名(indx(1:5));

清除加载到内存中的静态网络对象。

清晰的墨西哥人

为INT8预测生成张sorrt代码

生成以int8精度运行推断的TensorRT代码。使用预先训练的标识分类网络对图像中的标识进行分类。下载pretrained标识网网络并将其另存为logonet.mat该网络是在MATLAB中开发的。该网络可以在各种照明条件和摄像机角度下识别32个徽标。该网络以单精度浮点格式进行预训练。

net=getLogonet();

使用英伟达TUNSORT库,8位整数精度的推理计算,代码生成支持这些额外的网络:万博1manbetx

  • 对象检测器网络,如YOLOv2和SSD。

  • 回归和语义分割网络。

TensorRT需要一个校准数据集来校准一个经过浮点训练、以8位整数精度计算推理的网络。属性将数据类型设置为int8,并将路径设置为校准数据集DeepLearningConfig.logos\u数据集是包含按相应分类标签分组的图像的子文件夹。对于int8支持,GPU计算能力必须为6.1或更高。万博1manbetx

注:对于语义分割网络,校准数据图像必须采用万博1manbetximread作用

解压(“logos_dataset.zip”); cfg=coder.gpuConfig(“墨西哥”); cfg.TargetLang=“C++”; cfg.GpuConfig.ComputeCapability=“6.1”; cfg.DeepLearningConfig=coder.DeepLearningConfig(“tensorrt”);cfg.DeepLearningConfig.DataType=“int8”;cfg.DeepLearningConfig.DataPath=“logos_dataset”; cfg.DeepLearningConfig.NumCalibrationBatches=50;编码基因-配置cfglogonet_predict-args{one(227227,3,'int8')}报告
代码生成成功:查看报告

在测试图像上运行INT8预测

im=imread(“gpucoder_tensorrt_test.png”); im=imresize(im[227227]);预测得分=logonet预测mex(int8(im));%%得到前5个概率分数和他们的标签[val,indx]=排序(预测分数,“下降”);分数=val(1:5)*100;类名=net.Layers(end).classnames;标签=classnames(indx(1:5));

清除加载到内存中的静态网络对象。

清晰的墨西哥人

另见

功能

物体

相关的话题