深度学习预测与NVIDIA TensorRT图书馆
这个例子展示了如何生成代码深度学习应用程序通过使用NVIDIA®TensorRT™图书馆。下面的例子使用了codegen
命令来生成一个墨西哥人文件执行预测使用TensorRT标志识别分类网络。这个示例还演示了如何使用codegen
命令来生成一个墨西哥人文件执行8位整数和16位浮点预测。
第三方的先决条件
要求
这个示例生成CUDA®墨西哥人,需要人NVIDIA GPU和兼容的驱动程序。你必须有特定的GPU计算能力为8位整数和16位浮点精度模式,明白了第三方硬件。
可选
等non-MEX构建静态、动态库或可执行文件,您还必须有:
英伟达工具包。
英伟达cuDNN TensorRT库。
环境变量的编译器和库。有关更多信息,请参见第三方硬件和设置必备产品下载188bet金宝搏。
验证GPU环境
使用coder.checkGpuInstall
函数来确认所需的编译器和库运行这个例子是正确设置。
envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“tensorrt”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);
下载和加载Pretrained网络
这个示例使用pretrained标志识别网络在图像分类标识。下载pretrainedLogoNet
网络从MathWorks网站和加载该文件。网络是在MATLAB开发的,大约是42 MB。这个网络可以识别32标志在各种光线条件下,相机的角度。训练标志识别网络上的信息,请参阅标志识别网络。
网= getLogonet;
的logonet_predict
入口点函数
的logonet_predict.m
入口点函数接受一个图像输入和执行预测图像通过使用保存在深度学习网络LogoNet.mat
文件。函数加载网络对象LogoNet.mat
到一个持续的变量logonet
在后续的预测调用和重用持久变量。
类型(“logonet_predict.m”)
函数= logonet_predict () % # codegen % 2017 - 2022版权MathWorks, Inc . %持久对象logonet用于加载网络对象。%第一次调用这个函数,构造持久对象和%设置。只有在函数被调用时,随后的时期,%重用相同的对象调用预测输入,从而避免网络重构和%重新加载对象。持久logonet;如果isempty (logonet) logonet = coder.loadDeepLearningNetwork (“LogoNet.mat”、“logonet”);结束= logonet.predict(在);结束
墨西哥人运行代码生成
生成CUDA代码logonet_predict
入口点函数,创建一个GPU代码配置对象为一个墨西哥人的目标和目标语言设置为c++。使用coder.DeepLearningConfig
函数创建一个TensorRT深度学习配置对象,并将其分配给DeepLearningConfig
GPU代码配置对象的属性。运行codegen
命令通过指定一个输入的大小227 - 227 - 3。这个值对应的输入层大小标志识别网络。默认情况下,生成TensorRT代码运行推理在32位浮点数。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“tensorrt”);codegen配置cfglogonet_predictarg游戏{coder.typeof(单(0)(227 227 3])}报告
代码生成成功:查看报告
对测试图像进行预测
加载一个输入图像。调用logonet_predict_mex
在输入图像。
我= imread (“gpucoder_tensorrt_test.png”);[227227]im = imresize (im);predict_scores = logonet_predict_mex(单(im));%得分前5的概率和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;一会= net.Layers .ClassNames(结束);top5labels =一会(indx (1:5));
显示五大分类标签。
outputImage = 0(227400年3“uint8”);为k = 1:3 outputImage(:, 174:最终,k) = im (:,:, k);结束scol = 1;srow = 20;为k = 1:5 outputImage = insertText (outputImage [scol srow],…(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),…“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);srow = srow + 20;结束imshow (outputImage);
免费GPU内存通过删除加载的墨西哥人的功能。
清晰的墨西哥人;
生成TensorRT代码为8位整数的预测
生成TensorRT代码运行在int8推理精度。
代码生成与推理计算通过使用NVIDIA TensorRT库8位整数精确支持这些额外的网络:金宝app
对象探测器网络,如YOLOv2和SSD
回归和语义分割网络
TensorRT需要校准标定数据集的网络训练在8位整数浮点计算推理精度。设置数据类型int8
和校准数据集使用的路径DeepLearningConfig
。logos_dataset
是一个文件夹,其中包含图像分类分组,这些标签。为int8
金宝app支持,GPU计算能力必须6.1,7.0或更高版本。
注意,为语义分割网络,校准数据图像必须支持的格式金宝appimread
函数。
解压缩(“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_predictarg游戏{coder.typeof (int8 (0) (227 227 3])}报告
代码生成成功:查看报告
上运行INT8预测测试图像
加载一个输入图像。调用logonet_predict_mex
在输入图像。
我= imread (“gpucoder_tensorrt_test.png”);[227227]im = imresize (im);predict_scores = logonet_predict_mex (int8 (im));%得分前5的概率和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;一会= net.Layers .ClassNames(结束);top5labels =一会(indx (1:5));
显示五大分类标签。
outputImage = 0(227400年3“uint8”);为k = 1:3 outputImage(:, 174:最终,k) = im (:,:, k);结束scol = 1;srow = 20;为k = 1:5 outputImage = insertText (outputImage [scol srow],…(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),…“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);srow = srow + 20;结束imshow (outputImage);
免费GPU内存通过删除加载的墨西哥人的功能。
清晰的墨西哥人;
生成TensorRT代码为16位浮点预测
生成TensorRT代码运行推理fp16
精度。为fp16
金宝app支持,GPU计算能力必须是5.3,6.0,6.2或更高版本。
注意,量化误差发生在积累业务单精度和精度将他们转换为一半。有关更多信息,请参见量子化的神经网络。
cfg = coder.gpuConfig (墨西哥人的);cfg。TargetLang =“c++”;cfg.GpuConfig。ComputeCapability =“5.3”;cfg。DeepLearningConfig = coder.DeepLearningConfig (“tensorrt”);cfg.DeepLearningConfig。数据类型=“fp16”;codegen配置cfglogonet_predictarg游戏{coder.typeof(一半(0)(227 227 3])}报告
代码生成成功:查看报告
上运行FP16预测测试图像
加载一个输入图像。调用logonet_predict_mex
在输入图像。
我= imread (“gpucoder_tensorrt_test.png”);[227227]im = imresize (im);predict_scores = logonet_predict_mex(一半(im));%得分前5的概率和他们的标签[val, indx] =排序(predict_scores,“下”);成绩=瓦尔(1:5)* 100;一会= net.Layers .ClassNames(结束);top5labels =一会(indx (1:5));
显示五大分类标签。
outputImage = 0(227400年3“uint8”);为k = 1:3 outputImage(:, 174:最终,k) = im (:,:, k);结束scol = 1;srow = 20;为k = 1:5 outputImage = insertText (outputImage [scol srow],…(char (top5labels (k)),' 'num2str(分数(k),' % 2.2 f '),“%”),…“输入TextColor”,' w ',“字形大小”15岁的“BoxColor”,“黑”);srow = srow + 20;结束imshow (outputImage);
免费GPU内存通过删除加载的墨西哥人的功能。
清晰的墨西哥人;