这个例子展示了使用NVIDIA TensorRT™库生成深度学习应用程序的代码。它使用Codegen.
命令生成MEX文件,使用TensorRT使用ResNet-50图像分类网络进行预测。第二个例子演示了Codegen.
命令以生成MEX文件,通过使用TensorR for Logo分类网络执行8位整数预测。
要求
此示例生成CUDA®MEX并具有以下第三方要求。
CUDA支持NVIDIA®GPU和兼容驱动程序。
可选的
对于非mex构建,如静态、动态库或可执行文件,本例有以下附加要求。
英伟达工具包。
NVIDIA cuDNN和TensorRT库。
编译器和库的环境变量。有关更多信息,请参阅第三方硬件和设置先决条件产品下载188bet金宝搏。
使用coder.checkGpuInstall
函数来验证运行此示例所需的编译器和库是否正确设置。
envCfg = coder.gpuEnvConfig (“主机”);envcfg.deeplibtarget =.“tensorrt”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
resnet_predict.
入口点函数此示例使用DAG网络RENET-50来通过使用TensorR来显示图像分类。Beave Learning Toolbox的Reset-50支持包中提供了PretRate Reset-50Matlab®型号。金宝app要下载并安装支持包,请使用附加资源管理器。金宝app
这resnet_predict.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代码resnet_predict.
为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig
函数创建一个张力
深度学习配置对象并将其分配给DeepLearningConfig
GPU代码配置对象的属性。跑过Codegen.
命令指定[224,224,3]的输入大小。该值对应于Reset-50网络的输入层大小。
cfg = coder.gpuconfig('mex');cfg.targetlang ='c ++';cfg.deeplearningconfig = coder.deeplearningconfig(“tensorrt”);Codegen.-Config.CFG.resnet_predict.- args.{ONE(224,224,3)}报告
代码成功成功:查看报告
im = imread(“peppers.png”);Im = imresize(Im, [224,224]);predict_scores = resnet_predict_mex(双(im));%%得到前5个概率分数和他们的标签[val,Indx] = sort(predict_scores,“下降”);分数= val(1:5)* 100;net = resnet50;ClassNames = Net.Layers(END).Classnames;标签= ClassNames(Indx(1:5));
清除加载在内存中的静态网络对象。
清晰的墨西哥人;
生成以int8精度运行推断的TensorRT代码。使用预先训练的标识分类网络对图像中的标识进行分类。下载pretrained记录
网络并将其保存为一个logonet.mat
文件。网络是在Matlab开发的。该网络可以在各种照明条件和相机角度下识别32个标识。网络以单精度浮点格式预先磨损。
net = getLogonet();
使用8位整数精度中使用推理计算的NVIDIA TensorR库的代码生成支持这些附加网络:金宝app
对象探测器网络,如yolov2和ssd。
回归和语义分割网络。
TensorRT需要一个校准数据集来校准一个经过浮点训练、以8位整数精度计算推理的网络。属性将数据类型设置为int8,并将路径设置为校准数据集DeepLearningConfig
。logos_dataset.
是包含由其相应的分类标签分组的图像的子文件夹。对于INT8支持,金宝appGPU计算能力必须为6.1或更高。
笔记:对于语义分割网络,校准数据图像必须具有由支持的格式金宝appimread
功能。
解压缩(“logos_dataset.zip”);cfg = coder.gpuconfig('mex');cfg.targetlang ='c ++';cfg.g.guconfig.ComputEcapability =.“6.1”;cfg.deeplearningconfig = coder.deeplearningconfig(“tensorrt”);cfg.deeplearningconfig.datatype =.“int8”;cfg.deeplearningconfig.datapath =“logos_dataset”;cfg.deeplearningconfig.numcalibrations = 50;Codegen.-Config.CFG.logonet_predict- args.{ONE(227,227,3,'INT8')}报告
代码成功成功:查看报告
im = imread(“gpucoder_tensorrt_test.png”);IM = IMResize(IM,[227,227]);predict_cometes = logonet_predict_mex(Int8(IM));%%得到前5个概率分数和他们的标签[val,Indx] = sort(predict_scores,“下降”);分数= val(1:5)* 100;ClassNames = Net.Layers(END).Classnames;标签= ClassNames(Indx(1:5));
清除加载在内存中的静态网络对象。
清晰的墨西哥人;