tensorrt模型加速1-输入输出部署流程

一颗小树x 一颗小树x     2023-03-11     417

关键词:

前言

本文首先简要介绍 Tensor RT 的输入输出以及部署流程,了解 Tensor RT 在部署模型中起到的作用。然后介绍 Tensor RT 模型导入流程,针对不同的深度学习框架,使用不同的方法导入模型。

一、TensorRT 简介

TensorRT 是NVIDIA 公司发布的一个高性能的深度学习推理加速框架,下面先看一下使用TensorRT的背景:

  1. 训练主要是获得层与层之间的权重参数,目的是为了获得一个性能优异的模型,关注点集中在模型的准确度、精度等指标。
  2. 推理(inference)则不一样,其没有了训练中的反向迭代过程,只是针对新的数据进行预测。相较于训练,推理的更关注的是部署简单、处理速度快、吞吐率高和资源消耗少。

作用:TensorRT优化深度学习模型结构,并提供高吞吐率和低延迟的推理部署。

应用:TensorRT可用于大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。

1.1 TensorRT的输入

输入方面,TensorRT 支持所有常见的深度学习框架包括 Caffe、Tensorflow、Pytorch、MXNet、Paddle Paddle 等。

  • 得到的网络模型需要导入到TensorRT,对于模型的导入方式,TensorRT 支持的导入方式包括 C++ API、Python API、NvCaffeParser 和 NvUffParser等
  • 还可以借助中间转换工具ONNX,比如:先将模型由 Pytorch 保存的模型文件转换成ONNX模型,然后再将 ONNX 模型转换成 TensorRT推理引擎。后面再结合具体案例,详细分析。

1.2 TensorRT的输出

  • 将模型导入TensorRT 以生成引擎(engine)文件,将 engine 文件序列化保存, 之后即可以方便快速地调用它来执行模型的加速推理。
  • 输出方面,对于系统平台,TensorRT 支持 Linux x86、Linux aarch64、Android aarch64 和 QNX  aarch64。

1.3 TensorRT部署流程

Tensor RT 的部署分为两个部分:(TensorRT部署流程如下图所示)

  • 一是 优化训练好的模型生成计算流图
  • 二是 部署计算流图

二、模型导入

这里介绍Caffe框架、Tensorflow框架、Pytorch框架等,进行模型导入,重点分析一下Pytorch框架。

2.1 Tensorflow 框架

  • 方法1:使用 uff python 接口将模型转成 uff 格式,之后使用 NvUffParser 导入。
  • 方法2:使用 Freeze graph 来生成.Pb(protobuf)文件,之后使用convert-to-uff 工具将.pb 文件转化成 uff 格式,然后利用 NvUffParser 导入。
  • 方法3:将Tensorflow 训练好的模型(xx.pb)进行 TensorRT 推理加速,需要先将模型由 Pytorch 保存的模型文件转换 成 ONNX 模型,然后再将 ONNX 模型转换成 TensorRT 推理引擎。处理流程如下图所示

2.2 Pytorch框架

为了将Pytorch训练好的模型(xx.pt)进行 TensorRT 推理加速,需要先将模型由 Pytorch 保存的模型文件转换 成 ONNX 模型,然后再将 ONNX 模型转换成 TensorRT 推理引擎。

A、Pytorch-ONNX 模型转换

ONNX(Open Neural Network Exchange,开放神经网络交换)模型格式是一种用于 表示深度学习模型文件格式,可以使深度学习模型在不同框架之间相互转换

  • 目前 ONNX 支持应用于 :Pytorch、Caffe2、Tensorflow、MXNet、Microsoft CNTK 和 TensorRT 等深度学习框架
  • ONNX组成:由可扩展计算图模型的定义、标准数据类型的定义和内置运算符的定义三 个部分组成。
  • 与 Pytorch 模型不同,ONNX 格式的权重文件除了包含权重值外,还包含:神经网络中的网络流动信息、每层网络的输入输出信息以及一些辅助信息。

 为得到 TensorRT 推理引擎,首先将经过网络训练得到的 Pytorch 模型转换成 ONNX 模型,然后进行 ONNX 模型的解析,最终生成用于加速的网络推理引擎(engine)。 Pytorch 模型转换生成 ONNX 模型的流程如下图所示。

  • 第一步定义 ONNX 模型的输入、输出数据类型;
  • 第二步将模型图与模型元数据进行关联,模型图中含有可执行元素,模型元数据是一种特殊的数据类型,用于数据描述;
  • 第三步先定义导入模型的运算符集, 再将运算符集导入相应的图(Graph)中;
  • 第四步生成由元数据、模型参数列表、计算列表构成的序列化图(ONNX Graph)。

成功转换后,得到 ONNX 模型。

  • 其中,PyTorch 中自带的 torch.onnx 模块。此模块包含将模型导出为 onnx IR 格式的函数。这些模型可以从 onnx 库加载,然后转换为可以在其他深度学习框架上运行的模型。
  • 基本流程为:模型读取、参数设置、tensor 张量生成和模型转化。
  • 其中关键的 export 函数为:torch. onnx. export()

B、ONNX-TensorRT 模型转换

创建并保存 engine 文件流程,如下图所示:

  • 第一步创建 engine 类为构建器,engine 类是 TensorRT 中创建推理引擎所 用的函数,创建 engine 类为 nvinfer::IBuilder;
  • 第二步使用 builder->createNetworkV2 创 建网络(Network);
  • 第三步使用 nvonnxparser::createParser 创建 ONNX 模型的解析器;
  • 第四步通过 builder->setMaxBatchSize 设置网络每个批次处理的图片数量,通过 builder->setMaxWorkspaceSize 设置内存空间以及通过 config->setFlag 设置推理时模型参 数的精度类型;
  • 第五步通过解析器来解析 ONNX 模型;最后生成 engine 文件并保存。

2.3 Caffe框架

方法1:使用C++/Python API 导入模型,通过代码定义网络结构,并载入模型 weights 的方式导入。

方法2:使用 NvCaffeParser 导入模型,导入时输入网络结构 prototxt 文件及caffemodel 文件。

参考文献:

[1] 尹昱航. 基于特征融合的交通场景目标检测方法研究[D]. 大连:大连理工大学, 2021.

[2] 葛壮壮. 基于嵌入式 GPU 的交通灯及数字检测[D]. 四川:电子科技大学, 2020.

官网示例:

https://developer.nvidia.com/zh-cn/blog/speeding-up-deep-learning-inference-using-tensorrt-updated/https://developer.nvidia.com/zh-cn/blog/speeding-up-deep-learning-inference-using-tensorrt-updated/

官方文档:

https://docs.nvidia.com/deeplearning/tensorrt/archives/index.htmlhttps://docs.nvidia.com/deeplearning/tensorrt/archives/index.html

 本文直供大家参考学习,谢谢!

windows10下yolov8tensorrt模型加速部署实战

Windows10下yolov8tensorrt模型加速部署【实战】TensorRT-Alpha基于tensorrt+cudac++实现模型end2end的gpu加速,支持win10、linux,在2023年已经更新模型:YOLOv8,YOLOv7,YOLOv6,YOLOv5,YOLOv4,YOLOv3,YOLOX,YOLOR,pphumanseg,u2net,EfficientDet。关注仓库《TensorRT-Alpha》:... 查看详情

yolov7tensorrt模型加速部署实战(代码片段)

0.linux环境配置基于tensorrt+cudac++实现模型end2end的gpu加速,支持win10、linux,在2023年已经更新模型:YOLOv8,YOLOv7,YOLOv6,YOLOv5,YOLOv4,YOLOv3,YOLOX,YOLOR,pphumanseg,u2net,EfficientDet。Windows10教程正在制作,可以关注仓库:https://github.com/ 查看详情

深度模型部署

...到模型部署,现在有好几种方式,eg:TF_Servering,flask_web,安卓,TensorRT等.我们要根据不同的场景和需求来选择合适部署方式.3.我比较熟悉的是TensorRT的部署.什么是tensorRT呢???它是NVIDIA(英伟达)针对自家平台做的一个加速包.支持c++,py... 查看详情

win10下yolov8tensorrt模型加速部署实战(代码片段)

Windows10下yolov8tensorrt模型加速部署【实战】TensorRT-Alpha基于tensorrt+cudac++实现模型end2end的gpu加速,支持win10、linux,在2023年已经更新模型:YOLOv8,YOLOv7,YOLOv6,YOLOv5,YOLOv4,YOLOv3,YOLOX,YOLOR,pphumanseg,u2net,EfficientDet。关注... 查看详情

nvidiajetsonyolov5tensorrt部署和加速c++版(代码片段)

...推理跑模型后;发现模型速度不够快,于是使用tensorRT部署,加速模型,本文介绍C++版本的。NVIDIAJetsonYOLOv5应用与部署_一颗小树x的博客-CSDN博客版本介绍:yolov5v6.0、 查看详情

获取tensorrt(trt)模型输入和输出(代码片段)

获取TensorRT(TRT)模型输入和输出,用于创建TRT的模型服务使用,具体参考脚本check_trt_script.py,如下:脚本输入:TRT的模型路径和输入图像尺寸脚本输出:模型的输入和输出结点信息,同时验证TRT模型是... 查看详情

自动驾驶中的深度学习模型量化部署加速实战

这里主要是针对AI算法落地的模型部署,其中有基于TensorRT的部署、基于OpenCV+CUDA的部署以及基于NCNN的部署,项目包括简单的demo案例、目标检测、语义分割、实例分割、车道线检测以及Transformer等。大家可以参考以下的链接进行... 查看详情

自动驾驶中的深度学习模型量化部署加速实战

这里主要是针对AI算法落地的模型部署,其中有基于TensorRT的部署、基于OpenCV+CUDA的部署以及基于NCNN的部署,项目包括简单的demo案例、目标检测、语义分割、实例分割、车道线检测以及Transformer等。大家可以参考以下的链接进行... 查看详情

使用tensorrt对人脸检测网络mtcnn进行加速(代码片段)

...一张1080P的图片要700ms,太慢了。想法正好这几天在学习TensorRT相关知识,已经成功将人脸特征提取网络转成onnx格式,然后用TensorRT的Python接口部署好了,单张图片耗时从15ms减少到3ms,非常理想的结果!理所当然,想着把MTCNN部署... 查看详情

转换后的 Tensorrt 模型与 Tensorflow 模型的输出形状不同?

】转换后的Tensorrt模型与Tensorflow模型的输出形状不同?【英文标题】:ConvertedTensorrtmodelhasdifferentoutputshapefromTensorflowmodel?【发布时间】:2019-06-0315:08:01【问题描述】:我有一个tensorflow模型并转换为tensorrt模型。TensorFlow模型的uff转... 查看详情

部署准备1(代码片段)

...备环境。安装好CMake、OpenCV等工具准备PaddleLite推理库准备模型构建并运行程序总结引用柠檬分类范例 两点:模型的输入与输出模型的预处理与后处理 如果你想了解一个陌生模型的输入与输出该怎么做呢?可以使用VisualD... 查看详情

pytorchc++部署模型onnxtensorrt(代码片段)

(1)C++部署pytorch模型(上)(2)TensorRT5介绍及Pytorch转TensorRT5代码示例TensorRT的使用步骤:(假设以及有一个训练好的模型)(1)根据模型创建TensorRT网络定义(2 查看详情

《自动驾驶中的深度学习模型量化部署加速实战》专栏概述|实战教程,开放源码

这里主要是针对AI算法落地的模型部署,其中有基于TensorRT的部署、基于OpenCV+CUDA的部署以及基于NCNN的部署,项目包括简单的demo案例、目标检测、语义分割、实例分割、车道线检测以及Transformer等。大家可以参考以下的链接进行... 查看详情

tensorrt8使用手记(1)模型测试conv+bn+relu结构融合

...其他层合并,以减少计算量。node_of_325node_of_326node_of_327在TensorRT中会对网络结构进行垂直整合,即将Conv、BN、Relu三个层融合为了一个层,即CBR融合在BN层中,首先对输入进行归一化(输入张量的均值,输入张量的方差),然后对... 查看详情

目标检测使用tensorrt加速yolov5(代码片段)

...节,当然是以程序员的方式来度过节日。很早就听说TensorRT可以加速模型推理,但一直没时间去进行实践,今天就来把这个陈年旧坑填补一下。背景知识在实践之前有必要了解一下相关知识。TensorRT简介TensorRT是可以在... 查看详情

ubuntu18一文学会pytorch端到端网络部署tensorrt模型推理(代码片段)

由于博主最近实验需要将tensorrt部署到端到端的抓取网络当中,但之前没有使用过tensorrt,查阅了很多资料,踩了很多坑,最后才部署成功。于是想着记录一下,本篇内容主要以Unet和grcnn(antipodalroboticgraspin... 查看详情

ubuntu18一文学会pytorch端到端网络部署tensorrt模型推理(代码片段)

由于博主最近实验需要将tensorrt部署到端到端的抓取网络当中,但之前没有使用过tensorrt,查阅了很多资料,踩了很多坑,最后才部署成功。于是想着记录一下,本篇内容主要以Unet和grcnn(antipodalroboticgraspin... 查看详情

模型部署|arcface+tensorrt的部署,模型推理部署

Arcface基于resnet50的部署项目,可以直接生成engine文件,同时对于PRelu的Plugin有详细的中文注释,希望可以教会你写plugin的套路,后续也会加入其他plugin的书写注释。步骤清晰简单,快速上手。完整源码:源... 查看详情