这个例子展示了使用NVIDIA TensorRT™库生成深度学习应用程序的代码。它使用编码基因
命令生成MEX文件,使用TensorRT使用ResNet-50图像分类网络进行预测。第二个例子演示了编码基因
命令生成MEX文件,该文件通过使用TensorRT对徽标分类网络执行8位整数预测。
要求
此示例生成CUDA®MEX,并具有以下第三方要求。
CUDA支持NVIDIA®GPU和兼容驱动程序。
可选择的
对于非mex构建,如静态、动态库或可执行文件,本例有以下附加要求。
英伟达工具包。
NVIDIA cuDNN和TensorRT库。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件和设置必备产品s manbetx 845.
使用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);
要为服务器生成CUDA代码,请执行以下操作:预测
为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig
函数创建一个坦索特
深度学习配置对象并将其分配给DeepLearningConfig
GPU代码配置对象的属性。运行编码基因
指定输入大小[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精度运行推断的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')}报告
代码生成成功:查看报告
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));
清除加载到内存中的静态网络对象。
清晰的墨西哥人;