TensorRT推理手写数字分类(三)

这篇具有很好参考价值的文章主要介绍了TensorRT推理手写数字分类(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

(一)使用pytorch搭建模型并训练
(二)将pth格式转为onnx格式
(三)onxx格式转为engine序列化文件并进行推理



前言

  上一节我们已经成功搭从pth文件转为onnx格式的文件,并对导出的onnx文件进行了验证,结果并无问题。这一节我们就从这个onnx文件入手,一步一步生成engine文件并使用tensorrt进行推理。


一、TensorRT是什么?

  NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK。此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高吞吐量。通俗来说,TensorRT是NVIDIA针对自家GPU开发出来的一个推理框架,它使用了一些算法和操作来优化网络推理性能,提高深度学习模型在GPU上的推理速度。
TensorRT推理手写数字分类(三),TensorRT,TensorRT,pytorch
我们使用TensorRT这个框架可以加快我们手写数字分类模型的推理速度。
TensorRT的安装方式我之前也写过一期博客:参考这里。

这里我们假设已经安装好了TensorRT,我这里安装的版本是TensorRT-8.0.1.6。在生成engine文件之前,先介绍一个很有用的工具trtexec。trtexec是一个命令行工具,它可以帮助我们不用写代码就可以生成engine,以及很多其他有用的功能,感兴趣的读者可以自己探索,这里我们只使用几种常见的命令行参数。
有关trtexec的详细参数可以参考这篇博客。

二、如何通过onnx生成engine

  整理一下,我们现在已经有了onnx文件,并且安装好了tensorrt,现在我们的目的是通过生成engine文件。onnx文件之前我们我们已经介绍过了它是一个什么东西,那engine文件又是什么呢?

TensorRT中的engine文件是一个二进制文件,它包含了一个经过优化的深度学习模型。这个文件可以被用来进行推理,而不需要重新加载和优化模型。在使用TensorRT进行推理时,首先需要将训练好的模型转换为TensorRT engine文件,然后使用这个文件进行推理。

也就是说,我们只需先生成一次engine,这个engine文件包含了优化后的模型(这个优化是TensoRT自己做的)。在以后进行推理的时候,我们只需要加载这个engine即可,而不需要重头开始。

使用trtexec生成engine

TensorRT-8.0.1.6/bin/trtexec --onnx=model.onnx --saveEngine=model.engine --buildOnly

在命令行输入这行指令即可帮助我们生成model.engine。trtexec命令还有许多其他的参数,感兴趣自行了解,这里我们只使用了–onnx,表示输入的是onnx文件,–saveEngine表示存储engine文件,–buildOnly表示只构建,不进行推理。

使用python接口

代码如下(示例):

import os
import tensorrt as trt

onnx_file = '/home/wjq/wjqHD/pytorch_mnist/model.onnx'
nHeight, nWidth = 28, 28
trtFile = '/home/wjq/wjqHD/pytorch_mnist/model.engine'

# Parse network, rebuild network, and build engine, then save engine
logger = trt.Logger(trt.Logger.VERBOSE)

builder = trt.Builder(logger)

network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))
profile = builder.create_optimization_profile()
config = builder.create_builder_config()

parser = trt.OnnxParser(network, logger)

if not os.path.exists(onnx_file):
    print('ONNX file {} not found.'.format(onnx_file))
    exit()
print("Loading ONNX file from path {}...".format(onnx_file))

with open(onnx_file, 'rb') as model:
    if not parser.parse(model.read()):
        print('ERROR: Failed to parse the ONNX file.')
        for error in range(parser.num_errors):
            print(parser.get_error(error))
        exit()
    
    print("Succeed to parse the ONNX file.")

input_tensor = network.get_input(0)
# 这是输入大小
profile.set_shape(input_tensor.name, [1, 1, nHeight, nWidth], [1, 1, nHeight, nWidth], [1, 1, nHeight, nWidth])
config.add_optimization_profile(profile)

engineString = builder.build_serialized_network(network, config)  # 序列化engine文件
if engineString == None:
    print("Failed building engine!")
    exit()
print("Succeeded building engine!")
with open(trtFile, "wb") as f:
    f.write(engineString)

使用上述的python代码,最终我们也可以生成一个engine文件。这段代码里面的api,大家可以具体去google寻找解释,我在这里只是展示了一种可能。如有问题,欢迎评论区沟通。

我们也可以使用trtexec工具来验证我们生成的engine是否正确,命令行指令为:

TensorRT-8.0.1.6/bin/trtexec --loadEngine=model.engine --exportProfile=layerProfile.json --batch=1 --warmUp=1000 --verbose

–loadEngine为加载的engine文件路径,–exportProfile这个参数可以输出网络中每一层运行的平均时间以及占总时间的百分数,–verbose为打印日志,–warmUp为提前显卡预热。

三、进行推理

  我们已经得到了model.engine文件,最后一步我们要使用tensorrt的接口读取engine文件和图像文件进行推理得到最终的分类结果。
  由于我的环境现在无法安装pycuda和cuda的python包,所以最后推理的这一步等环境妥当,再补上。

总结

  本节我们介绍了如将使用trtexec工具和python代码通过onnx生成engine文件,并使用tensorrt的api接口调用engine文件进行推理。TensorRT推理手写数字分类总共三节,笼统地介绍了部署一个深度学习模型的流程,希望大家能有所收获。接下来如果有时间准备更新另一个工作:pytorch遇到不支持的算子,tensorrt遇到不支持的算子,onnx遇到不支持的算子该怎么办。文章来源地址https://www.toymoban.com/news/detail-663187.html

到了这里,关于TensorRT推理手写数字分类(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【模型部署 01】C++实现分类模型(以GoogLeNet为例)在OpenCV DNN、ONNXRuntime、TensorRT、OpenVINO上的推理部署

    深度学习领域常用的基于CPU/GPU的推理方式有OpenCV DNN、ONNXRuntime、TensorRT以及OpenVINO。这几种方式的推理过程可以统一用下图来概述。整体可分为模型初始化部分和推理部分,后者包括步骤2-5。 以GoogLeNet模型为例,测得几种推理方式在推理部分的耗时如下: 结论: GPU加速首选

    2024年02月06日
    浏览(55)
  • [Pytorch]手写数字识别——真·手写!

    Github网址:https://github.com/diaoquesang/pytorchTutorials/tree/main 本教程创建于2023/7/31,几乎所有代码都有对应的注释,帮助初学者理解dataset、dataloader、transform的封装,初步体验调参的过程,初步掌握opencv、pandas、os等库的使用,😋纯手撸手写数字识别项目(为减少代码量简化了部分

    2024年02月14日
    浏览(77)
  • 基于PyTorch的MNIST手写体分类实战

    第2章对MNIST数据做了介绍,描述了其构成方式及其数据的特征和标签的含义等。了解这些有助于编写合适的程序来对MNIST数据集进行分析和识别。本节将使用同样的数据集完成对其进行分类的任务。 3.1.1  数据图像的获取与标签的说明 MNIST数据集的详细介绍在第2章中已经完成

    2024年02月08日
    浏览(35)
  • 三、MNIST手写数字分类任务项目实战

    分类任务和回归任务本质上并没有太大的区别,只是最终得到的结果和损失函数不同而已。 MNIST手写数字分类任务,最终得到的是10个值,也类似一个one-hot编码格式,表示该图片是0-9数字的概率,概率值最大的就是预测的最终结果 当然标签也得是one-hot编码格式,例如标签图

    2024年02月09日
    浏览(35)
  • CNN实现手写数字识别(Pytorch)

    CNN(卷积神经网络)主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后,最后经过若干个全连接层获得最终的输出。 CNN的实现主要包括以下步骤: 数据加载与预处理 模型搭建 定义损失函数、优化器 模型训练 模型测试 以下基于Pytorch框

    2024年02月03日
    浏览(94)
  • 【Pytorch+torchvision】MNIST手写数字识别

    深度学习入门项目,含代码详细解析 在本文中,我们将在 PyTorch 中构建一个简单的卷积神经网络,并使用 MNIST数据集 训练它识别手写数字。 MNIST包含70,000张手写数字图像: 60,000张用于培训,10,000张用于测试。图像是 灰度(即通道数为1) , 28x28像素 ,并且居中的,以减少预

    2024年02月14日
    浏览(39)
  • 【神经网络手写数字识别-最全源码(pytorch)】

    Torch安装的方法 学习方法 1.边用边学,torch只是一个工具,真正用,查的过程才是学习的过程 2.直接就上案例就行,先来跑,遇到什么来解决什么 Mnist分类任务: 网络基本构建与训练方法,常用函数解析 torch.nn.functional模块 nn.Module模块 读取Mnist数据集 会自动进行下载 784是m

    2024年02月14日
    浏览(37)
  • AI学习(4): PyTorch实战-手写数字识别

    在之前的文章中介绍了 PyTorch 的环境安装,和张量( tensor )的基本使用,为防止陷入枯燥的理论学习中,在这篇文章,我们将进行项目实战学习,项目主要内容: 基于 MNIST 数据集,实现一个手写数字识别的神经网络模型; @说明: 通过具体项目实战,我们可以初步了解:使用

    2024年02月21日
    浏览(45)
  • 机器学习实战 | MNIST手写数字分类项目(深度学习初级)

    准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。 本文为初级项目第二篇:利用MNIST数据集训练手写数字分类。 项目原网址为:Deep Learning Project – Handwritten Digit Recognition using Python。 第一篇为:机器学习实战 | emojify 使用Python创建自己的表情符号

    2024年02月15日
    浏览(48)
  • pytorch 入门 (三)案例一:mnist手写数字识别

    本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客 🍦 参考文章:【小白入门Pytorch】mnist手写数字识别 🍖 原作者:K同学啊 ​ 如果设备上支持GPU就使用GPU,否则使用CPU 使用dataset下载MNIST数据集,并划分好训练集与测试集 使用dataloader加载数

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包