TensorRT来加速YOLO v5推理与检测

news2025/2/25 19:15:48

TensorRT来加速YOLO v5推理与检测

文章目录

  • TensorRT来加速YOLO v5推理与检测
  • TensorRT简介
  • 一、TensorRT安装
    • 1. 电脑基础环境
    • 2. 查看 cuda 版本
    • 3. 安装TensorRT
    • 4. 验证TensorRT
  • 二、YOLO v5模型导出函数
    • 1.onnx 模型导出(def export_onnx()函数)
    • 2.openvino模型导出(def export_openvino()函数)
    • 3.coreml模型导出(def export_coreml()函数)
    • 4.TensorRT模型导出(def export_engine()函数)
  • 三、YOLO v5使用TensorRT进行加速检测
    • 1. 模型导出
    • 2. 图片检测
    • 3. 使用yolov5s.pt 和 yolov5s.engine(tensorrt)进行检测
      • 3.1 使用yolov5s.pt, 推理时间: 5.49s
      • 3.2 使用 yolov5s.engine(tensorrt), 推理时间: 4.20s
  • 四、总结

TensorRT简介

TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。
TensorRT 是一个C++库,从 TensorRT 3 开始提供C++ API和Python API,主要用来针对 NVIDIA GPU进行 高性能推理(Inference)加速。
在这里插入图片描述
基本特性:

    用于高效实现已训练好的深度学习模型的推理过程的SDK

    内含推理优化器和运行时环境

    使DL模型能以更高吞吐量和更低的延迟运行

    有C++和python的API,完全等价可以混用

TensorRT主要做了以下几点来加快推理速度:

    算子融合

    量化

    动态张量显存
    
    内核自动调整

    多流执行

在这里插入图片描述

一、TensorRT安装

1. 电脑基础环境

  • 操作系统: win10
  • 显卡: 4060TI 16GB
  • pytorch 版本:1.13.0 使用 print(torch._ _version_ _) 查看 pytorch 版本
  • python: 3.8

2. 查看 cuda 版本

  • 激活 conda 中的一个环境, 并输入 nvcc -V 进行查看, 我的版本如下图所示
    在这里插入图片描述

3. 安装TensorRT

需要到nvidia官网去下载对应cuda版本的TensorRT安装包,我这里下载对应版本压缩包如下,下载解压即可。
在这里插入图片描述
下载好将压缩包进行解压,激活 conda 环境, 然后 cd 进入下面几个文件夹,安装 whl 文件。

  • 解压后的TensorRT-8.5.3.1\include 中头文件拷贝到 安装的cuda目录中 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include
  • 解压后的TensorRT-8.5.3.1\lib 中所有的lib文件拷贝到 安装的cuda目录中 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\lib\x64
  • 解压后的TensorRT-8.5.3.1\lib 中所有的dll文件拷贝到 安装的cuda目录中 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin
  • :\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin 路径添加到用户的 Path 环境变量中
    在这里插入图片描述
    在上面操作添加以后,重启电脑,此时环境变量生效。

4. 验证TensorRT

激活conda 环境,依次输入下面语句。

python
import tensorrt
print(tensorrt.__version__)

在这里插入图片描述
并运行下载解压后安装包里的一个实例的 sample.py 文件, 来检查 tensorrt 是否能正常使用。
直接在激活的环境下, cd 进入,比如我的文件目录, 直接cd
C:\Users\xiaoalei\Desktop\TensorRT-8.5.3.1\samples\python\network_api_pytorch_mnist

  • 主要看后面的一部分地址
    在这里插入图片描述
    -输入 python sample.py 运行
    在这里插入图片描述
  • 出现上面情况就是表示成功,(运行报错一般是安装包没有安装,直接 pip install 就行,我在安装提示只需安装 pycuda,直接 pip install pycuda)

二、YOLO v5模型导出函数

而在YOLOv5 6.0版本更新后,新增了一个export.py文件,支持大部分框架模型的导出,包括TensorRT。这里介绍部分模型导出函数

1.onnx 模型导出(def export_onnx()函数)

在这里插入图片描述

2.openvino模型导出(def export_openvino()函数)

在这里插入图片描述

3.coreml模型导出(def export_coreml()函数)

在这里插入图片描述

4.TensorRT模型导出(def export_engine()函数)

在这里插入图片描述

三、YOLO v5使用TensorRT进行加速检测

1. 模型导出

直接导出模型:(我这里对自己训练好的模型和权重文件进行导出)

  • 这里的--half表示半精度模型,使用半精度可以加快推理速度,但会损失一定精度,直接导出可以不加
 python export.py --weights runs/train/exp/weights/best.pt --data linhuo.yaml --include engine --device 0 --half

2. 图片检测

验证图片检测速度, 需要对 detect.py 进行修改,最后的程序入口进行修改
修改后如下:

if __name__ == '__main__':

    start_time = time.time()
    opt = parse_opt()
    main(opt)
    end_time = time.time()
    print("程序花费时间{}秒".format(end_time - start_time))

3. 使用yolov5s.pt 和 yolov5s.engine(tensorrt)进行检测

命令行语句:

3.1 使用yolov5s.pt, 推理时间: 5.49s

python detect.py --weights runs/train/exp/weights/best.pt

在这里插入图片描述

3.2 使用 yolov5s.engine(tensorrt), 推理时间: 4.20s

python detect.py --weights runs/train/exp/weights/best.engine

在这里插入图片描述

四、总结

TensorRT能加速YOLO v5推理与检测。
后续会补充视频推理检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/966748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nmon性能监控工具介绍【杭州多测师_王sir】

nmon监控工具 (nmon监控centos6X)1) 工具准备nmon16X(性能监控)和nmon_analyser(性能报告分析器);2) 下载nmon页面地址:http://nmon.sourceforge.net/pmwiki.php?nSite.Download3) 下载指定版本nmon到centos6X:wget https://nchc.dl.sourceforge.net/project/nmon…

HTTP协议初识·中篇

加上目录,会出现导向不正确的情况,可能是bug,目录一长就容易出错? 本篇主要讲解了: 网页分离(网页代码和.c文件分离) html链接跳转 网页添加图片 确认并返回资源类型 填写正文长度属性 添加表单 临时重定向 补充知识&a…

04. 函数和函数调用机制

1. 先学习/复习C语言的入门知识 1.1 C语言简介 C语言是一种通用的编程语言,于1972年由丹尼斯里奇(Dennis Ritchie)创建。C语言最初目的是为了开发UNIX操作系统,但由于其简洁的语法、快速的执行速度和可移植性,自此成…

Linux系统中驱动入门设备树DTS(经典)

设备树(DTS:device tree source),字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等,按照树形结构描绘成的一棵树。按照策略和功能分离的思路,就是驱动代码(功能)和设备树DTS配置…

算法通关村16关 | 滑动窗口如此简单

1. 滑动窗口基本思想 滑动窗口就是快慢指针问题,快指针走一步,慢指针走一步,维护窗口的大小。 下图有大小为3的滑动窗口移动示例。 窗口:窗口是left和right之间的元素,也可以理解为一个区间。窗口的大小可能固定&#…

Win7设备和打印机里空白,0个对象,但是可以打印的处理办法

呉師傅 你是不是遇到过Win7系统打开设备和打印机的时候显示是空白的,0个设备的情况?要怎么操作才能解决这一问题呢,下面就分享一下如何处理这个问题的小方法大家可以尝试一下。 问题如下: 解决方法: 1、点击桌面左下…

Unity中Shader的消融视觉效果优化smoothstep(min,max,x)

文章目录 前言Unity中Shader的消融视觉效果优化 一、在clip(value) 的 基础上 用 smoothstep(min,max,x),并且增加一个渐变纹理对消融边缘进行视觉上的优化二、进行优化 前言 Unity中Shader的消融视觉效果优化 一、在clip(value) 的 基础上 用 smoothstep(min,max…

3.0 Dubbo的可扩展机制SPI源码解析

1. Dubbo SPI 架构图 2. Demo ExtensionLoader<Protocol> extensionLoader ExtensionLoader.getExt ensionLoader(Protocol.class); Protocol http extensionLoader.getExtension("dubbo"); System.out.println(http); 上⾯这个Demo就是Dubbo常⻅的写法&am…

java八股文面试[多线程]——newWorkStealingPool

newWorkStealingPool是什么&#xff1f; newWorkStealingPool简单翻译是任务窃取线程池。 newWorkStealingPool 是Java8添加的线程池。和别的4种不同&#xff0c;它用的是ForkJoinPool。 使用ForkJoinPool的好处是&#xff0c;把1个任务拆分成多个“小任务”&#xff0c;把这…

【MySQL学习笔记】(七)内置函数

内置函数 日期函数示例案例-1案例-2 字符串函数示例 数学函数其他函数 日期函数 示例 获得当前年月日 mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-09-03 | ---------------- 1 row in set (0.00 sec)获得当前时分秒…

剑指 Offer 57 - II. 和为s的连续正数序列(简单)

题目&#xff1a; class Solution { public:vector<vector<int>> findContinuousSequence(int target) { //本题使用滑动窗口&#xff08;双指针&#xff09;int i1, j1; //定义左右边界&#xff0c;一般是左闭右开int sum0; //窗口内的和vector&…

区块链技术与应用 - 学习笔记1【引言】

大家好&#xff0c;我是比特桃。本系列主要将我之前学习区块链技术时所做的笔记&#xff0c;进行统一的优化及整合。其中大量笔记源于视频课程&#xff1a;北京大学肖臻老师《区块链技术与应用》公开课。肖老师的课让我找回了求知若渴般的感觉&#xff0c;非常享受学习这门课的…

2023/9/3周报

目录 摘要 文献阅读1 1、标题和提出问题 2、物理模型对于水质预测的缺陷 3、模型框架 4、相关公式 5、结果分析 文献阅读2 1、标题和提出问题 2、问题叙述 3、模型框架 4、误差修补 5、实验结果和分析 总结 摘要 本周阅读了2篇论文&#xff0c;分别为一种基于深…

ReactNative 井字游戏 实战

效果展示 需要的插件准备 此实战项目需要用到两个插件。 react-native-snackbar 底部信息提示组件。 react-native-vector-icons 图标组件。 安装组件&#xff1a; npm i react-native-snackbar npm i react-native-vector-icons npm i types/react-native-vector-icons /…

uni-app之android离线自定义基座

一 为什么要自定义基座 1&#xff0c;基座其实就是一个app&#xff0c;然后新开发的页面可以直接在手机上面显示&#xff0c;查看效果。 2&#xff0c;默认的基座就是uniapp帮我们打包好的基座app&#xff0c;然后我们可以进行页面的调试。 3&#xff0c;自定义基座主要用来…

Python:列表推导式

相关阅读 Python专栏https://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 列表推导式使得创建特定列表的方式更简洁。常见的用法为&#xff0c;对序列或可迭代对象中的每个元素应用某种操作&#xff0c;用生成的结果创建新的列表&#xff…

VSC++: 奇怪的风吹

void 奇怪的风吹() {//缘由https://ask.csdn.net/questions/1062454int aa[]{15, 30, 12, 36, 11, 20, 19, 17, 16, 18, 38, 15, 30, 12, 36, 11, 20, 19, 17, 16, 18, 38, -1},j 0, a 0, y 0, z 0;while (aa[j] > 0){if (j && aa[j] > 35 || aa[j] < 15)…

CXL.cache D2H Message 释义

&#x1f525;点击查看精选 CXL 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0c…

记录一下自己对linux分区挂载的理解

一直狠模糊&#xff0c;分两个区&#xff0c;一个挂载/, 一个挂载/home 两者是什么关系 实测 先看挂载的内容 然后umount /home后创建一个新文件 再挂载回去 发现旧分区又回来了&#xff0c;说明路径只是个抽象的概念&#xff0c;分区挂载&#xff0c;互相之间数据是不影响…

只有一个线程的程序(main函数)

C并发编程入门 目录 只有一个线程的程序 就是main函数所在的线程。 这个线程无需我们手动创建&#xff0c;main函数就是这个线程的执行体。 运行main函数&#xff0c;就是执行只有一个线程的程序。 线程是进程内正在执行的代码所在的函数 代码示例 #include <iostream&…