主要内容

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

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

第三方的先决条件

要求

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

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

可选的

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

验证GPU环境

使用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);

运行MEX代码生成

为此产生CUDA代码resnet_predict.为MEX目标创建一个GPU代码配置对象,并将目标语言设置为c++。使用编码器。DeepLearningConfig函数创建一个张力深度学习配置对象并将其分配给DeepLearningConfigGPU代码配置对象的属性。跑过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预测生成张sorrt代码

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

net = getLogonet();

使用8位整数精度中使用推理计算的NVIDIA TensorR库的代码生成支持这些附加网络:金宝app

  • 对象探测器网络,如yolov2和ssd。

  • 回归和语义分割网络。

TensorRT需要一个校准数据集来校准一个经过浮点训练、以8位整数精度计算推理的网络。属性将数据类型设置为int8,并将路径设置为校准数据集DeepLearningConfiglogos_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')}报告
代码成功成功:查看报告

在测试图像上运行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));

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

清晰的墨西哥人

也可以看看

职能

对象

相关的话题