本文主要是介绍【干货】用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版本
- 查看cuda版本
cat /usr/local/cuda/version.txt
- 查看cuDNN版本
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
- 查看ubuntu版本
cat /etc/issue
- 挑选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全记录,包含加速前后的数据对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!