主要内容

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

这个例子展示了使用NVIDIA TensorRT™库生成深度学习应用程序的代码。它使用codegen命令生成MEX文件,使用TensorRT使用ResNet-50图像分类网络进行预测。第二个例子演示了codegen命令生成一个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);

resnet_predict入口点函数

本例使用DAG网络ResNet-50,使用TensorRT进行图像分类。深度学习工具箱的ResNet-50支持包中有一个用于MATLAB®的预训练的ResNet-50模型。金宝app要下载和安装支持包,请使用Add-On Explorer金宝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函数创建TensorRT的深度学习配置对象,并将其分配给DeepLearningConfig图形处理器代码配置对象的属性。运行codegen指定输入大小为[224,224,3]的命令。该值对应于ResNet-50网络的输入层大小。

cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);codegen配置cfgresnet_predictarg游戏{1 (224224 3)}报告
代码生成成功:查看报告

对测试图像进行预测

我= imread (“peppers.png”);Im = imresize(Im, [224,224]);predict_scores = resnet_predict_mex(双(im));%得到前5个概率分数和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;网= resnet50;一会= net.Layers .ClassNames(结束);标签=一会(indx (1:5));

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

清晰的墨西哥人

为INT8预测生成张sorrt代码

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

网= getLogonet ();

使用NVIDIA TensorRT库的8位整数精度推理计算的代码生成支持以下额外的网络:金宝app

  • YOLOv2、SSD等对象检测网络。

  • 回归和语义分割网络。

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

注意:对于语义分割网络,标定数据图像必须是支持的格式金宝appimread函数。

解压缩(“logos_dataset.zip”);cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig.ComputeCapability =“6.1”;cfg。DeepLearningConfig =编码器。DeepLearningConfig (“tensorrt”);cfg.DeepLearningConfig.DataType =“int8”;cfg.DeepLearningConfig.DataPath =“logos_dataset”;cfg.DeepLearningConfig.NumCalibrationBatches = 50;codegen配置cfglogonet_predictarg游戏{(227227 3 int8)}报告
代码生成成功:查看报告

在测试图像上运行INT8预测

我= imread (“gpucoder_tensorrt_test.png”);Im = 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));

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

清晰的墨西哥人

另请参阅

功能

对象

相关的话题