主要内容

使用NVIDIA Tensorrt深入学习预测

此示例显示使用NVIDIA Tensorrt™库进行深度学习应用程序的代码生成。它使用了codegen命令生成MEX文件以通过使用TensorR来执行与Reset-50图像分类网络的预测。第二个例子表明了使用codegen命令生成一个MEX文件,该文件通过对标志分类网络使用TensorRT来执行8位整数预测。

第三方先决条件

需要

这个例子生成了CUDA MEX,并且有以下第三方需求。

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

可选

对于诸如静态,动态库或可执行文件的非MEX构建,此示例具有以下附加要求。

验证GPU环境

使用Coder.CheckGPuInstall.(GPU编码器)验证运行此示例所需的编译器和库是否已正确设置。

envCfg = coder.gpuEnvConfig ('主办');envCfg。DeepLibTarget ='tensorrt';envcfg.deepcodegen = 1;Envcf​​g.quiet = 1;Coder.CheckGpuInstall(Envcf​​g);

resnet_predict入口点函数

本示例使用DAG网络ResNet-50通过TensorRT显示图像分类。在深度学习工具箱的ResNet-50支持包中提供了用于MATLAB®的预训练的ResNet-50模型。万博1manbetx要下载和安装支持包,请使用Add-On Explorer万博1manbetx。要了解有关查找和安装外接程序的更多信息,请参见获得附加组件(MATLAB)

resnet_predict.m函数将Reset-50网络加载到持久网络对象中,并在后续预测调用上重用持久对象。

类型(“resnet_predict.m”)
一个持久对象mynet用于加载系列网络对象。在第一次调用此函数时,将构造持久对象,并设置%。在后续调用该函数时,重复使用相同的对象%来调用输入上的predict,避免重新构造和重新加载% network对象。持久mynet;如果isempty(mynet) %调用函数resnet50,它将为ResNet-50模型返回DAG网络%。mynet = coder.loadDeepLearningNetwork(“resnet50”、“resnet”);输入输出= mynet.predict(in);

运行MEX代码生成

为生成CUDA代码resnet_predict入口点函数,为MEX目标创建GPU代码配置对象,并将目标语言设置为C ++。使用coder.deeplearningconfig(GPU编码器)创建一个TensorRT深度学习配置对象,并将其分配到DeeplearningConfig属性的GPU代码配置对象。运行codegen指定输入大小为[224,224,3]的命令。此值对应于ResNet-50网络的输入层大小。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig ('tensorrt');codegen配置cfgresnet_predictarg游戏{1 (224224 3)}-报告
代码生成成功:要查看报告,请打开('codegen / mex / resnet_predict / html / export.mldatx')。

对测试图像进行预测

我= imread ('peppers.png');IM = IMResize(IM,[224,224]);predict_cores = resnet_predict_mex(double(im));%%获得前5分和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;网= resnet50;一会= net.Layers .ClassNames(结束);标签=一会(indx (1:5));

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

明确梅克斯;

为Int8预测生成带状度控制码

生成在INT8精度中运行推理的带有RensorRT代码。使用佩带的徽标分类网络对图像中的徽标进行分类。下载净化物LogoNet网络,并保存为logonet.mat.文件。该网络是用MATLAB开发的。该网络可以在不同的光照条件和摄像机角度下识别32个logo。该网络被预先训练为单精度浮点格式。

网= getLogonet ();

TensorR需要校准数据集以校准浮点培训的网络,以计算8位整数精度的推理。将数据类型设置为INT8,并通过使用校准数据的路径DeeplearningConfiglogos_dataset是一个子文件夹,包含按相应分类标签分组的图像。对于int8的支持万博1manbetx,GPU计算能力必须达到6.1或更高。

解压缩('logos_dataset.zip');cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig。ComputeCapability ='6.1';cfg。DeepLearningConfig = coder.DeepLearningConfig ('tensorrt');cfg.DeepLearningConfig。数据类型='int8';cfg.DeepLearningConfig。DataPath公司='logos_dataset';cfg.DeepLearningConfig。NumCalibrationBatches = 50;codegen配置cfglogonet_predict.arg游戏{(227227 3 int8)}-报告
代码生成成功:打开('codegen/mex/logonet_predict/html/report.mldatx')查看报告。

在测试图像上运行Int8预测

我= imread ('gpucoder_tensorrt_test.png');imresize(im, [227,227]);predict_scores = logonet_predict_mex (int8 (im));%%获得前5分和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;一会= net.Layers .ClassNames(结束);标签=一会(indx (1:5));

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

明确梅克斯;