TensorRT来加速YOLO v5推理与检测

news/2024/7/11 0:36:34 标签: YOLO

YOLO_v5_0">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_66">二、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_v5TensorRT_76">三、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.niftyadmin.cn/n/4996684.html

相关文章

一文速学-让神经网络不再神秘,一天速学神经网络基础(五)-最优化

前言 思索了很久到底要不要出深度学习内容,毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新,很多坑都没有填满,而且现在深度学习的文章和学习课程都十分的多,我考虑了很久决定还是得出神经网络系列文章,…

嵌入式学习笔记(10)mkv210_image.c代码详解

第1步:检验用户传参是不是3个。 第2步:分配16KB buffer并且填充为0. 第3步:打开源bin(led.bin),判断bin长度是否不大于16KB-16Bytes 第4步:以16个字符串填充0~15这16个Bytes 第5步&#xff…

书籍推荐-1 Python编程:从入门到实践(第2版)

Python编程:从入门到实践(第2版) 书籍背景 作者介绍 埃里克马瑟斯(Eric Matthes),高中科学和数学老师,现居住在美国阿拉斯加,在当地讲授Python入门课程。他从5岁开始就一直在编写程序…

两个线程同步执行:解决乱箭穿心(STL/Windows/Linux)

C自学精简教程 目录(必读) C并发编程入门 目录 多线程同步 线程之间同步是指线程等待其他线程执行完某个动作之后再执行(本文情况)。 线程同步还可以是像十字路口的红绿灯一样,只允许一个方向的车同行,其他方向的车等待。 本…

rz命令无法正常使用?

使用rz命令上传文件时出现如下问题: 这里用的是mobaxterm终端 改用xshell,secureCRT即可正常使用:

Unity网络请求队列

引子 最近的一个项目中由于某个需求,需要多次请求后台接口数据,就自己封装了一下网络请求的队列;刚刚好给大家分享一下,互相交流学习 简述 Unity 的网络请求队列是由 UnityWebRequestQueue 类实现的。这个类继承自 MonoBehaviou…

CH05_介绍重构名录

重构的记录格式 每个重构手法都有5个部分。 名称(name) 要建造一个重构词汇表,名称是很重要的。 速写(sketch) 名称之后是一个简单的速写(sketch);这部分可以帮助你更快找到你所…

基础算法--快速排序

快速排序 算法原理 1. 取一个元素p(第一个元素,最后一个元素,中间元素,随机 都可以),使元素p归位。 2. 列表被p分成两部分,左边都比p小,右边都比p大。 3. 递归完成排序。 动态演示 python代码实现 import…