【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比

2024-02-03 12:50

本文主要是介绍【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TensorRT 实现模型yolov5的加速,附自己测的数据对比

  • 安装tensorRT
      • 首先了解自己ubuntu、CUDA和cuDNN版本
      • 安装TensorRT
  • 使用tensorRT加速LeNet进行验证
  • tensorRT加速yolov5
  • 加速前后效果对比
  • 安装pycuda
  • 问题记录
        • 1. `import tensorrt`时,找不到这个module
        • 2. `ImportError: libcudnn.so.x: cannot open shared object file: No such file or directory`
        • 3. 在tensorRT-6.0.1.5外面可以import,但是在文件夹里面,或者其他的文件夹里面import不了
        • 4. make时遇到问题:
        • 5. 执行命令sudo ./yolov5 -s 时报错:./yolov5: error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory
        • 更新2021.10.13

安装tensorRT

前言:这里仅记录博主自己用tar安装tensorRT的流程,对于DEV版本等的安装,请移步其他博客。使用tar安装是博主认为相对比较简单的方式了,要注意的是解压版的tar需要我们手动去修改lib的路径,如果是使用安装版的,就不需要了,安装版需要root权限进行安装。

首先了解自己ubuntu、CUDA和cuDNN版本

  1. 查看cuda版本
cat /usr/local/cuda/version.txt

在这里插入图片描述

  1. 查看cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

在这里插入图片描述

  1. 查看ubuntu版本
cat  /etc/issue

在这里插入图片描述

  1. 挑选TensorRT版本(千万不要不符合,也不要比你的环境高也不要低,不然很麻烦,博主自己第一次按的时候没注意看,导致一直报错)
    博主安装的是TensorRT-6.0.1.5

安装TensorRT

# 在home下将下载的压缩文件进行解压
tar xzvf TensorRT-6.0.1.5.Ubuntu-16.04.x86_64-gnu.cuda-10.1.cudnn7.6.tar.gz# 解压得到TensorRT-6.0.1.5的文件夹,将里边的lib绝对路径添加到环境变量中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxxxx/TensorRT-6.0.1.5/lib
# 如果手动添加到.bashrc文件中,需要执行source .bashrc命令,配好的环境才能生效# 安装TensorRT
cd TensorRT-6.0.1.5/python
pip install tensorrt-6.0.1.5-cp37-none-linux_x86_64.whl
# 博主亲测,这里你的python环境并没有限制,py35,py36,py37都可# 安装UFF,支持tensorflow模型转化
cd TensorRT-6.0.1.5/uff
pip install uff-0.6.5-py2.py3-none-any.whl# 安装graphsurgeon,支持自定义结构
cd TensorRT-6.0.1.5/graphsurgeon
pip install graphsurgeon-0.4.1-py2.py3-none-any.whl

以上,我们就成功的将tensorRT安装完了,试着执行一下python,然后看能不能导入这些模块。
如果成功的import tensorrt,那么就算安装成功咯。
ps:import uff的时候,需要提前install tensorflow模块。

2021.2.2更新
今天重新使用了deb安装后,发现和用tar没有什么区别。不过对tensorrt的安装过程又有了一个理解,这里做个记录
上面说的,如果能import成功,就说明安装tensorrt成功,其实这样说是不正确的。
使用pip install安装的tensorrt其实安装的是python依赖,安装成功,意味这我们成功安装了trt的python接口,这样我们就可以import tensorrt,使用trt的各种API接口了。
如果我们要用c++的话,那么理论上只要我们把tar解压成功,版本和cuda以及cudnn对应上,在cmakefile文件中,把对应的tensorrt包路径写正确就ok了,那么tensorrt也能正确使用了。
用deb安装tensorrt的时候,也是需要用命令行来install tensorrt的python依赖的,如果不安装的话,那么自然也import不了

使用tensorRT加速LeNet进行验证

推荐一个大佬的github这个库就尝试使用TensorRT的各种API直接进行网络的构建,简单粗暴,还很有效。下面加速yolov5也是使用这里现成的实现。
步骤就是tensorrtx/tutorials/getting_started.md里面说的:
第一步:Run lenet5 in pytorch,按照github指南没有半点问题
在第一步之前,需要安装pytorch,好像对pytorch的版本没有要求??博主安的pytorch是1.7版本的,使用清华源安装比较快:

  • pytorch镜像安装【清华源】

第二步:Run lenet5 in tensorrt
在这里插入图片描述
一直到cp的地方一般都没有问题,但是在cmake的时候,可能就会报错了。
在这里插入图片描述
报错找到所需的文件:Invinfer。这时,我们需要修改cmakefile.txt文件,因为cmakefile的文件指向的动态链接库和头文件都是系统环境下的,如果你用tar安装tensorRT,你的那几个文件和库都是在你自己的环境下,需要修改cmakefile中指向的路径(如果你跑tensorrtx的其他模型,也是需要修改那个模型下的cmakefile.txt文件)

  • 部署tensorRT时,解决可能出现的问题

修改的话,照上面博客说的修改就行,这里就不在说明了
然后应该可以正常编译了,你就可以看到加速后的leNet的输出结果了(我猜你估计也看不出什么变化了)
有一点就是精度几乎一样,说明使用tensorrt加速模型不会降低模型的性能。

tensorRT加速yolov5

我们需要两个github仓库,一个是yolov5的官方仓库,一个是tensorrtx的仓库
我们只需要利用前者生成一个wts的权重文件,然后就可以利用这个权重文件在tensorrtx里来进行模型的转换和推断了

git clone https://github.com/wang-xinyu/tensorrtx.git
git clone https://github.com/ultralytics/yolov5.git
# download its weights 'yolov5s.pt' 
# 这边要注意的是,在yolov5仓库中,在weights内要执行sh文件时,需要修改里面的路径,不然会找不到utlis文件,
# 或者你也可以把sh文件移出上一层文件夹中,再执行,就不会有路径问题了。
# copy tensorrtx/yolov5/gen_wts.py into ultralytics/yolov5
# ensure the file name is yolov5s.pt and yolov5s.wts in gen_wts.py
# go to ultralytics/yolov5
python gen_wts.py
# a file 'yolov5s.wts' will be generated.

将生成的wts文件copy到tensorrtx/yolov5下,

# put yolov5s.wts into tensorrtx/yolov5
# go to tensorrtx/yolov5
# ensure the macro NET in yolov5.cpp is s  这个s不s,应该根据你一开始生成的wts权重文件是哪个版本决定的
mkdir build
cd build
# cmake的时候记得修改cmakefile文件的链接库路径和头文件路径
cmake ..
make
sudo ./yolov5 -s             # serialize model to plan file i.e. 'yolov5s.engine'
# 推断图片,samples下面应该放你的图片,格式没要求(jpg,其他格式博主没试过)
sudo ./yolov5 -d  ../samples # deserialize plan file and run inference, the images in samples will be processed.

推断结束后会输出每张图片推断所花费的时间(不包含数据的预处理和NMS或者其他的后处理时间)
ps:每张图片的运行时间大概要3-5ms

加速前后效果对比

用了100张图片,分辨率没有去考虑,因为这几种对比都是一样的(控制变量法),所以不需要专门去考虑把(太懒了)
下面是大概的一个效果对比
在这里插入图片描述
速度上还是提高了将近3+倍,会不会数量越大,越明显??(应该不会)
现存占用也降低了有25%。

后面会专门写一篇关于跑上面结果的一个全记录(包括修改代码和一些有用的知识点),即可以帮助准备入门的同学,也方便以后自己重新学习。

安装pycuda

今天(2021.01.18)在使用python接口进行推断的时候,需要用到pycuda,使用下面命令安装,一直报错

  • pip安装
pip install pycuda

看网上建议是下载源码自己编译,然后看别人编译记录,好像又是很多问题……

  • 豆瓣源下载

这里推荐大家使用豆瓣源下载pycuda,完全ojbk,不需要自己编译源码

pip --default-timeout=100 install pycuda -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

之前安装啥来着,需要两个多小时,这家伙,直接几秒内就ok了
安装其他的包的时候,只需要将上面命令的pycuda改成你要安装的包名即可
下载飞快,ai了ai了

问题记录

1. import tensorrt时,找不到这个module

出现这个原因就是你的环境没配好,手动添加tensorrt的lib绝对路径到环境变量中

2. ImportError: libcudnn.so.x: cannot open shared object file: No such file or directory

没有找到libcudnn.so.x文件(x为对应版本具体可修改) libcudnn.so.x 是一个软连接,连接到对应的libcudnn.so.x.…… 该文件一般放在/usr/local/cuda/lib64/文件目录下可以查看自己是否有libcudnn.so.x文件,有的话就cp过去。
ps:博主安装的时候没有遇到这种问题,不过看别人有出现,这里就提一下。个人觉得安装tensorrt的时候出现这种问题,应该不是没链接的问题(如果是这种问题的话,说明你一开始的cuDNN都没搞好了)。如果上诉这种问题解决不了,建议重新安装来一遍。

3. 在tensorRT-6.0.1.5外面可以import,但是在文件夹里面,或者其他的文件夹里面import不了

在这里插入图片描述
博主使用的cuDNN是7.6.0版本,为啥会出现找不到8的版本呢??博主又在同样的一台服务器上用两一个账号安装,仍然会出现这个问题。博主现在还没解决,但是博主的实验室服务器多,换台服务器重新安装哈哈哈哈哈。
猜测的原因:cudnn有问题,服务器环境不干净?上面的错误应该是其他的包找不到这个so.8的版本的文件,但是明明下的是对应的7.6的版本,怎么会跑出一个8的版本呢?纯属个人猜测,有知道的忘告知一下,感激不尽(服务器多也不能任性呀)
问就是重装!!!

4. make时遇到问题:
CMake Error: The current CMakeCache.txt directory /workspace/tensorrtx/yolov5/build/CMakeCache.txt is 
different than the directory /workspace/tensorrtx/yolov5/build where CMakeCache.txt 
was created. This may result in binaries being created in the wrong place. If you are not sure, reedit 
the CMakeCache.txt

CMakeCache.txt之前编译时留下的缓存,应该把build删掉重新mdir build 编译。

5. 执行命令sudo ./yolov5 -s 时报错:./yolov5: error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory

没有把对应的静态库添加到系统环境变量

博主之前都没有遇到这个,而且明明都在.bashrc文件内添加了环境变量了,但是还是出现了这个问题

使用export的方法,在当前session下把库export一下:
在这里插入图片描述
这时,不要加sudo命令,不然仍然会报错,直接yolov5 -s即可

其他解决方法:

cp -r libmyelin.so.1 /usr/local/lib 
# libmyelin.so.1 locate一下具体的位置,然后在cp,个人不建议,还是上面的方法比较无害

更新2021.10.13

有大半年没有更新博客了,这段时间一直准备春招,实习,秋招,到今天基本上可以结束坐等开奖了;
目前手里有近10个CV算法工程师意向书:字节,商汤,百度,顺丰,华为,小红书,拼多多,小马智行,海康威视,腾讯等
接下来会花很多时间在小红书上整理这一过程所有的经验以及技巧,包括:丰富简历内容,如何打比赛(大佬止步),如何刷题,刷什么题,刷到什么程度,面试技巧,面经整理,hr面技巧,如何反问面试官,如何argue薪资等等等,大家有需要可以关注一波哈,内容保证丰富!助力大家秋招收割offer到手软!

大家如果是刚研一或者已经研二或者是大二或者大三赶紧关注一波,关注我秋招不踩坑!

小红书号:371845174(Activewaste,博客同名)

后面也会在小红书分享好用工具,插件,装逼神器等,手把手教学,大家关注起来哈!
我看有粉丝评论私信求更新的,大受鼓舞哈哈哈哈,后面会继续更新论文笔记,供大家参考互相学习!!!
另外我比较少上csdn,大家给我私信要联系方式或者评论问问题有时没看到(一个月没上,200+的通知),大家直接去小红书私信提问,或者催我撒!

在这里插入图片描述

这篇关于【干货】用tensorRT加速yolov5全记录,包含加速前后的数据对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/674202

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者