TensorRt推理部署优化方案及流程概述

1.参考资料

先放上参考资料,以表感谢。

  • TensorRT-Installation-Guide.pdf
  • TensorRT-Developer-Guide.pdf (PG-08540-001_v8.4.1 | June 2022)
  • TensorRT-Sample-Support-Guide.pdf
  • CSDN:扫地的小何尚
  • github:TensorRT
  • https://pytorch.org/tutorials/

2.流程概述

1.首先,进行模型转换。目前掌握的模型转换方案有两种,分别是pytorch–>onnx–>engine方案和pytorch–>wts–>engine方案。

2.使用转换得到的TensorRT模型进行推理

3.TensorRT推理结果的decode和后处理

3.pytorch–>onnx–>engine方案

3.1 pytorch–>onnx转换

onnx是一种比较通用的模型表示形式,它不仅可以保存模型的网络结构,还可以保存模型的参数,因此将模型从pytorch导出到onnx后,不仅不需要pytorch权重文件(即:pth文件)了,而且使用pytorch定义的网络结构也不需要了。因为在导出时这些信息都已经保存到了onnx文件中去了。

这一步使用pytorch框架中的接口完成,一般是在将图像输入网络之前调用torch.onnx.export接口,因为这样代码改动最少,更容易的找到网络的输入张量的维度和加载好的pytorch模型。

代码实现细节参考Pytorch官方教程链接。

3.2 onnx–>engine转换

在进行如下操作前需要安装好TensorRT,可以参考官方教程:TensorRT-Installation-Guide.pdf.

不同于pytorch–>onnx,而onnx–>engine转换具有多种实现方式。大概有三种方法:
1.使用TensorRT python API
2.使用TensorRT C++ API
3.使用TensorRT trtexec 可执行文件

python API和C++ API的流程是一样的,但是C++ API需要编写CMakeLists.txt或者Makefile文件,代码复杂度也更高一些,因此更建议使用python API的方式。python API的代码实现请参考TensorRT-Developer-Guide.pdf 4.1.2节。

trtexec适用于使用.tar.gz压缩文件的方法安装TensorRT时,解压后在Samples中有一个trtexec的项目,编译之后便可以在bin目录下生成一个trtexec的可执行文件。trtexec的使用可以参考官方文档TensorRT-Developer-Guide.pdf的附录部分,或者CSDN该中文资料链接。

3.3 engine推理

使用转换的engine模型进行推理,这里特别说明本文推理指的是网络的forward过程。

首先从文件中读取engine文件,进行反序列化,生成engine模型,然后在engine在基础上构造一个context,后面的推理使用的便是此context。

使用engine进行推理的具体细节可以参考:TensorRT-Developer-Guide.pdf. C++ API 3.2和3.4节, Python API 4.2和4.4节。

本文所讲的推理,输出是网络forward的原始结果,以我的一个车道线检测的算法为例,输出的两个数组如下图所示:

该网络输出两个数组是因为该网络有两个输出头,分别对应是车道线关键点和车道线属性。

3.4 推理结果decode

如上节所示,TensorRT推理出来的结果无法直接使用,还需要一个decode的过程,一般是按照算法的原理或仿照Pytorch框架的推理逻辑,将TensorRT推理得到的数组decode为合适的张量或多维数组。以上面的算法为例,第一个25728维的数组需要解码为(1, 201, 32, 4)的一个张量或多维数组,第二个32位的数组需要解码为(1, 2, 16)的张量或多维数组。

至此,TensorRT的推理结果在形式上与Pytorch的推理结果可以实现对应了,在这一步可以对比两者的结果大致判断TensorRT的推理是否准确。然后,还需要后处理的一些操作,这部分与实际的功能需求而定,无论是TensorRT还是Pytorch,它们后处理的算法逻辑基本一致,只不过是代码实现上的差别。相比之下TensorRT的后处理要更加注重代码的时间复杂度。

4.pytorch–>wts–>engine方案

4.1 yolov5:pytorch–>wts

这一步转换只是将Pytorch的模型和参数读取并按照固定的格式写入到wts文件中,参考tensorrtx的gen_wts.py脚本即可。

4.2 wts–>engine

1.使用TensorRT重新实现与Pytorch模型一样的网络结构,使用TensorRT定义网络并导入权重的代码实现可以参考TensorRT-Developer-Guide.pdf 6.4节。

2.构建后网络后,需要生成engine,这一步转换可以是在线的也可以是离线完成的。如果是在线的,则每次程序运行时,都需要进行一次转换。如果是离线的可以将生成的engine保存下来,程序以后每次运行时仅需从engine文件反序列化即可。该方案的其余工作与pytorch–>onnx–>engine方案基本相同,不再重复。

TensorRt推理部署优化方案及流程概述相关推荐

  1. YOLO-v5训练自己的数据+TensorRT推理部署(2)

    YOLO-v5训练自己的数据+TensorRT推理部署(2) 代码下载地址:下载地址 YOLO v5转TensorRT模型并调用 0.pt模型转wts模型 python3 gen_wts.py # 注 ...

  2. YOLO-v5训练自己的数据+TensorRT推理部署(1)

    YOLO-v5训练自己的数据+TensorRT推理部署(1) 代码下载地址:下载地址 YOLO v5在医疗领域中消化内镜目标检测的应用 YOLO v5训练自己数据集详细教程

  3. 工程之道,解读业界最佳的深度学习推理性能优化方案

    本文转载自旷视研究院 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案,实现当前 ...

  4. 应用部署优化方案分享

    转载本文需注明出处:微信公众号EAWorld,违者必究. 引言: 在企业级应用实施和运营过程中,为了解决企业中部分业务场景访问量大.并发量高的问题,就需要对系统架构及应用参数做出优化和调整,如架构优化 ...

  5. ubuntu-desktop20.04 yolox+tensorrt yolov7+tensorrt推理部署

    Ubuntu20.04镜像下载 使用 UltraISO 拷入镜像 vi /etc/apt/apt.conf.d/10periodic vi /etc/apt/apt.conf.d/20auto-upg ...

  6. 百度关键字SEO排名优化方案与流程

    影响百度SEO自然排名算法的因素有特别多,像点击率访问率,访问深度以及关键词布局等一系列因素都会影响百度 SEO自然排名,那么有哪些方法可以优化排名呢?下面营销大咖喆哥就来介绍一些优化SEO排名的技巧 ...

  7. 目标检测推理部署:优化和部署

    目标检测推理部署:优化和部署 本文简要介绍了端对端推理管道的优化技术和部署. 将在以下三个方面研究推理优化过程:硬件优化,软件优化和模型优化.推理优化的关键指标如下: • 吞吐量(未推理图像/秒) • ...

  8. tensorrt轻松部署高性能dnn推理_NVIDIA TensorRT高性能深度学习推理

    NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和 ...

  9. TensorRT优化方案图例

    TensorRT优化方案图例 图 12. TensorRT 循环由循环边界层设置.数据流只能通过下方式离开循环环输出层. 唯一允许的后边缘是第二个输入递归层. 图 13. 一个 if 条件构造抽象模型 ...

最新文章

  1. Rocksdb Ribbon Filter : 结合 XOR-filter 以及 高斯消元算法 实现的 高效filter
  2. 每天一个linux命令(12):more命令
  3. 提示语_交通安全提示语
  4. CMS - tabBar
  5. 关于Unity中Shader的内置值
  6. 程序员如何用糖果实现盈利 - [别人家的程序员01]
  7. 每次新建Android项目都报样式找不到的错误?
  8. html中文本框冒号对齐,html5 冒号分隔符对齐的实现,
  9. [HNOI2005]狡猾的商人 带权并查集
  10. 【经典回顾】YouTube 深度学习推荐系统的十大工程问题(附论文下载链接)
  11. 【Vegas原创】导入结构一致表的SQL语句
  12. Android dalvik GC相关的属性详解
  13. 实战:详解Reaact+AntD+Node后台管理系统
  14. 深入医疗PACS影像融合存储解决方案
  15. Android 4.4 kitkat以上及以下根据uri获取路径的方法
  16. 【C语言编程】简单密码
  17. 怎么做视频剪辑,教你几招
  18. 飞书开发API的调用
  19. html5炫酷作品源代码,8个超炫酷的HTML5动画演示及源码
  20. 【matlab】随机函数生成随机排列:rand,randn,randi,randperm,randint

热门文章

  1. linux多进程和多线程分析之一
  2. 使用Ultra Librarian把bxl文件转为CAD Capture CIS的原理图库及Allegro的PCB封装库
  3. HCIA笔记-常读常新
  4. 基于DHT11的温湿度显示
  5. 超强反爬虫方案!Requests 什么的通通爬不了
  6. 数电 8421码与格雷码的转换
  7. 【Arduino基础】一位数码管实验
  8. Flink 从0到1学习—— 分享四本 Flink 国外的书和二十多篇 Paper 论文
  9. Jetson AGX Orin刷机教程
  10. evo评测VINS-MONO---代码修改、数据格式转换、数据测试