YOLOV5加速之TensorRT篇

2023-11-19

        之前写过一篇Android版本yolov5s的博客。最近工作搞了下TensorRT,也遇到几个坑不过最终还是实现了,做一下小小的分享。

        这里直接上github上大牛的连接,我的代码是在他的基础上改的。里面有很多模型的加速直接看里面的yolov5即可。

        https://github.com/wang-xinyu/tensorrtx

 注:整个过程在llinux环境下完成

大概流程:

        1.将torch模型转换型到.wts

        2.cmake 创建编译环境

        3.make 编译c++的tensorrt yolov5 工程,这个会最终生成一个yolov5可执行文件这用于转换tensorrt模型以及包括c++(包括cuda c的代码)版本的前后处理代码

        4. 转换.wts到.engine

        5.运行模型,包括c++版本和python版本

详细流程:

        1. 将torch模型转换型到.wts

                这个很简单直接跑github工程里面的gen_wts.py即可,这里用到的torch模型最好用best.pt会方便点,整个过程就是获取模型的权重信息

        2.cmake 创建编译环境

                这一步主要是安装相关的cmake,make,opencv,cuda,cuDNN,tensorrt环境其他也没什么。其中需要说下每个库都有版本要求注意下就好。

大致版本如下:cmake3.5.1     opencv4.3     cuda10.2     tensorrt8

        配置好后在build目录下 :

                camke  ..

        3. 只要第二部没问题,这一步主要就是修改模型的参数(batch大小,阈值,模型输入尺寸等):

直接贴作者的原话:https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5

  • Choose the model s/m/l/x/s6/m6/l6/x6 from command line arguments.
  • Input shape defined in yololayer.h
  • Number of classes defined in yololayer.h, DO NOT FORGET TO ADAPT THIS, If using your own model
  • INT8/FP16/FP32 can be selected by the macro in yolov5.cpp, INT8 need more steps, pls follow How to Run first and then go the INT8 Quantization below
  • GPU id can be selected by the macro in yolov5.cpp
  • NMS thresh in yolov5.cpp
  • BBox confidence thresh in yolov5.cpp
  • Batch size in yolov5.cpp

然后就是 make 即可。

        4. 这一步也很简单 ,如下我转换的是yolov5l的模型,转换过程稍微有点长耐心等待。这里转换出来的就是tensorrt可以运行的模型,不管是用tensorrt 的c++ API还是python API都可以。

        ./yolov5 -s yolov5l.wts yolov5l.engine

        5.模型的运行实际上有2种方式:

                1.作者c++版本的命令: ./yolov5 -d ***********。

                 2.利用tensorrt的python API:作者也提供了相关的代码yolov5_trt.py

注:如果模型运行精度和torch结果不一样可能是C++代码batchNorm方法eps数值 导致,修改到和torch一样即可。

个人开发心得:

       因为我的工程是在云端运行所以 就直接采用tensorrt python API运行代码,但是yolov5l.engine模型不包括输入图像的前处理和模型后处理NMS相关代码的,这个时候就需要自己写,但是这些代码大部分都是用pytorch的,且在cuda模式运行,这个时候就需要让tensorrt和torch相互拷贝数据数据,且数据必须尽可能都在cuda中运算直到最终结果才拷贝到cpu。所以相关代码要在原作者基础上优化,优化后速度要快上不少。但是这个不在本篇博客内容里,想探讨的同学可以留言。

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOV5加速之TensorRT篇 的相关文章

随机推荐

  • Linux系统部署部署excalidraw-cn白板工具

    Linux系统部署部署excalidraw cn白板工具 一 excalidraw cn介绍 二 本地环境介绍 2 1 本地环境规划 2 2 本次实践介绍 2 3 Yarn介绍 三 检查本地环境 3 1 检查本地操作系统版本 3 2 检查系
  • 关于VS中多个源文件如何分开运行的解决方法(C++)

    首先我们很多初学者都会遇到一个用VS脑袋疼的问题 那就是用VS完成作业的时候如果创造了多个源文件 就会出现报错的问题 其实设置起来也很简单 如图所示 比如这个时候我想运行第三题不想运行第二题 那么只需要简单的选中第二题的cpp 右键选择属性
  • C#中使用Action委托方法进行返回值传递

    C 中使用Action委托方法进行返回值传递 在C 编程中 我们经常需要处理需要返回值的方法 一种常用的方式是使用委托类型 例如Action委托 它可以帮助我们在方法之间传递函数 Action委托是一种无返回值的委托 它可以引用一个参数列表
  • 数字图像处理:OpenCV直方图均衡算法研究及模拟实现

    一 引言 在 数字图像处理 直方图均衡 Histogram Equalization 的原理及处理介绍 链接 https blog csdn net LaoYuanPython article details 119857829 中介绍了数
  • Linux搭建服务器之五:安装FTP(linux安装ftp)

    1 确认linux是否已经安装vsftp rpm qa grep vsftpd 若有则会显示 ftp版本号 若没有 则不显示 2 安装ftp yum y install vsftpd 安装后可以 执行一下第一步骤 看是否安装成功 3 添加f
  • 【DirectX11】第二篇 DirectX11渲染管线(2016.05.09更新)

    本系列文章主要翻译和参考自 Real Time 3D Rendering with DirectX and HLSL 一书 感谢原书作者 同时会加上一点个人理解和拓展 文章中如有错误 欢迎指正 这里是书中的代码和资源 本文索引 文章目录 t
  • SpringBoot+Vue项目图书个性化推荐系统

    文末获取源码 开发语言 Java 框架 springboot JDK版本 JDK1 8 服务器 tomcat7 数据库 mysql 5 7 8 0 数据库工具 Navicat11 开发软件 eclipse myeclipse idea Ma
  • Java学习之FileInputStream与FileReader的区别

    我们对于文件中数据的操作无非就有两种 读出与写入 对于Java来说 对数据的操作有字节流 FileOutputStream FileInputStream 与字符流 FileWriter FileReader 这两种方法其实差不多 都是从文
  • 基于人脸的常见表情识别(1)——深度学习基础知识

    基于人脸的常见表情识别 1 深度学习基础知识 神经网络 1 感知机 2 多层感知机与反向传播 卷积神经网络 1 全连接神经网络的2大缺陷 2 卷积神经网络的崛起 卷积神经网络的基本网络层 1 什么是卷积 2 填充 Padding 3 步长
  • regexp_split_to_table,regexp_split_to_array,array,unnest 使用

    实例1 select regexp split to table hello world s select regexp split to array hello world s postgres select regexp split t
  • 2019年秋招多益前端笔试

    2019年秋招多益前端笔试
  • C++ Primer Plus 第一章

    C 简介 C 是在C语言基础上开发的一种集 面向对象编程 泛型编程和传统的过程化编程于一体的编程语言 是C语言的超集 C 面向对象的特性带来了全新的编程方法 这种方法是为应对复杂程度不断提高的现代编程任务而设计的 C 融合了3种不同的编程方
  • uniapp 用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动

    组件的引入就不多赘述了 直接看使用方法 地址我是引入的json文件数据结构大概是这个样子 例1 例2 1 先做个按钮做弹窗显示
  • linux-malloc底层实现原理

    本文大致讲解一下linux下malloc的底层实现原理 首先malloc肯定是从堆中分配内存 而堆又在用户空间中占据什么位置 通过下面这张图可以看出来 很明显是32位系统 寻址空间是4G linux系统下0 3G是用户模式 3 4G是内核模
  • python itertools模块chain函数功能详解 itertools.chain(*iterable)

    Itertools模块 itertools提供了高效快捷的用于操作迭代对象的函数 通过使用这个模块 可以简化代码 Itertools chain语法 Itertools chain iterables 代表接受可变的参数 iterables
  • 数字图像去噪典型算法及matlab实现

    转自 http gaochaojs blog 51cto com 812546 243961 图像去噪是数字图像处理中的重要环节和步骤 去噪效果的好坏直接影响到后续的图像处理工作如图像分割 边缘检测等 图像信号在产生 传输过程中都可能会受到
  • MAC下如何删除idea

    MAC下如何删除idea 进入访达 点击应用程序列表 找到idea 右键或者拖动到废纸篓 打开终端 进入自己用户名下的Library目录 一般刚打开就在自己用户名下 cd Users 你的用户名 Library 使用cd命令分别进入Logs
  • BUUCTF-EasySQL

    这是一道蛮基础的sql注入的题 打开题目 一个具有黑客色彩的登陆页面 emm 没有注册窗口 在用户名或密码处加个单引号发现报错 判断是字符型注入 通过万能密码登陆注入进去 username admin or 1 1 password 拿到f
  • 出现org.apache.http.NoHttpResponseException

    摘要 spring resttemplate使用httpclient4 4 连接池 出现org apache http NoHttpResponseException 10 0 0 25 8080 failed to respond异常的解
  • YOLOV5加速之TensorRT篇

    之前写过一篇Android版本yolov5s的博客 最近工作搞了下TensorRT 也遇到几个坑不过最终还是实现了 做一下小小的分享 这里直接上github上大牛的连接 我的代码是在他的基础上改的 里面有很多模型的加速直接看里面的yolov