yolov5转换tensorrt,转换过程不算太难,但是配环境差点要了老命,整整一个月左右才弄好,踩尽了坑。
一.cuda的安装
首先系统需要安装cuda,如果系统已经安装了cuda就跳过这一步就好了。
cuda的下载地址:
https://developer.nvidia.com/cuda-toolkit-archivehttps://developer.nvidia.com/cuda-toolkit-archive
下载之前需要注册一下,填一下调查问卷。后面的安装也都是需要你有账户登录的,所以还是注册一下比较好。
在下载之前,打开自己的anaconda,看一下自己的显卡型号,需要下载的版本。
根据自己的cuda型号下载就可以了,下载完成以后直接安装就好了,安装的时候都接受就好了,等到install的时候把第一个选项用空格去掉就好了。
#下载cuda11.4
wget
https://developer.download.nvidia.com/compute/cuda/11.4.4/local_installers/cuda_11.4.4_470.82.01_linux.run
#安装
sudo sh cuda_11.4.4_470.82.01_linux.run
安装完成以后需要更改一下环境的配置:
#打开文件
sudo gedit ~/.bashrc
#更改路径
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CPUTI/lib64
export CUDA_HOME=/usr/local/cuda/bin
export PATH=$PATH:$LD_LIBRARY_PATH:$CUDA_HOME
#激活修改后的文件
source ~/.bashrc
#检测是否安装成功
nvcc -V
安装成功以后的截图:
cuda相对于其他的来说还是比较好安装的。有错误删除以后再试一遍就好了。
二.tensorrt的安装
在这里为什么先说tensorrt的安装,因为tensorrt对cudnn是有要求的,这个需要你在下载的时候就看好自己的tensorrt对cudnn的版本有什么要求。
tensorrt的官方下载地址:https://developer.nvidia.com/nvidia-tensorrt-downloadhttps://developer.nvidia.com/nvidia-tensorrt-download
点进去以后就是选择界面(前提就是你已经注册好了账号毕竟登陆上了),我是选择的tensorrt8点进去同意就好了。
把这里的I Agree To 。。。打上勾就好了。
在这里选择和自己电脑版本相对应的安装包就好了,记得下载tar的安装包,千万别下载deb的,deb是专门为Ubuntu系统准备的,但是我安装了好多遍都没有安装好,还是直接下载tar的解压以后安装比较好。
这里当鼠标放在安装包上面的时候左下角会有一个连接,一定要看好cudnn的版本,这个版本就是我们待会需要根据自己的tensorrt下载的cudnn的版本。
下载完成以后 解压命令如下:
#解压tar.gz文件
tar zxvf filename.tar.gz
解压以后按照下面的命令进行安装:
cd uff
pip install filename.whl
#安装python的时候一定要安装和自己环境python版本一样的
cd python
pip install filename.whl
cd graphsurgeon
pip install filename.whl
cd onnx_graphsurgeon
pip install filename.whl
然后更改路径,写入tensorrt的路径:
#打开文件
sudo ~/.bashrc
#这里的路径改成你自己的tensorrt的路径就可以了
export LD_LIBRARY_PATH=/home/***/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6/TensorRT-7.0.0.11/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/home/***/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6/TensorRT-7.0.0.11/lib:$LIBRARY_PATH
#激活文件
source ~/.bashrc
有时候你的Ubuntu系统打开的文件无法进行编辑,保存也不可以。就不要选择用命令打开这个文件了,直接在电脑的home这里ctrl+h就可以看到隐藏的文件了,找到.bashrc文件打开进行更改就好了。就是把上面的命令复制到文件的最后就好了。
记得不要忘记激活文件。
如果想要用python的话记得安装pycuda。
在这里运行的话还是会报错的,所以接下来需要安装cudnn。
三.安装cudnn。
先去cudnn的官网进行下载自己需要的cudnn版本,就是和你的tensorrt相匹配的版本,
cudnn官网:https://developer.nvidia.com/rdp/cudnn-archivehttps://developer.nvidia.com/rdp/cudnn-archive
记得下载和自己tensorrt还有cuda版本相匹配的!!!!
下载完成以后先解压,解压以后的安装就很简单了。
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
执行完成上面的命令以后就安装成功了,当然也可以检查一下手否安装成功:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
如果出现版本信息就表示安装成功了,但是我的没有出现版本信息,什么反应都没有,但是后续物品的转换什么的都可以用,没有报错,所以我也就没有在管他。
四.安装opencv
首先先去官网下载下来opencv的压缩包然后解压。
opencv官网:
https://opencv.org/releases/https://opencv.org/releases/下载完成解压完成以后跟着下面的操作就好了:
# 安装最低要求(Ubuntu 18.04 作为参考)
sudo apt update && sudo apt install -y cmake g++ wget unzip
#安装依赖
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
#在opencv解压包里面打开终端
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j8
sudo make install
#根据上面的指令一条一条的来就好了,就是安装的时间有点长。
接下来是修改文件并激活文件:
sudo gedit /etc/ld.so.conf
#打开以后在下面加入
include /usr/local/lib
#保存以后并激活
sudo ldconfig
#修改.bashrrc文件并保存
sudo gedit /etc/bash.bashrc
#加入以下代码
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
#激活
source /etc/bash.bashrc
接下来就是检查是否安装成功:
#输入以下代码查看版本
pkg-config opencv --modversion
出现版本就代表安装成功了,如果报错找不到就按照下面的办法来:
#依次进行下面命令,创建文件
cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo gedit opencv.pc
#打开文件后在文件中加入以下代码
prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}
再去检查是否安装成功,就发现可以了。
五.tensorrt的检测
先要记得安装pycuda!!!!
#在环境中检测tensorrt是否安装成功
python
>>>import tensorrt
>>>tensorrt.__version__
#先去tensorrt的data文件夹下面的minst看看是否有照片,有的话直接执行就好了
cd tensorrt/samples/smapleMINST
make clean
make
#再去bin文件执行
cd tensorrt/bin
#执行
./sample_minst
执行完成以后就会在文件夹里面显示执行以后的图片。到此tensorrt安装成功。
六.yolov5转tensorrt
首先是下载代码,刚开始的时候我是从GitHub上面的yolov5-5.0版本和tensorrtx5.0版本进行测试。
但是后来发现这两个版本是有问题的,就从博主哪里找到了两个可以进行匹配的版本直接下载就好。(一定要注意版本匹配问题!!!!!)
#用下面这两个代码下载,亲测无匹配问题
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文件移出上一层文件夹中,再执行,就不会有路径问题了。
# 把tensorrtx/yolov5文件夹里面的gen_wts.py文件复制到yolov5里面并进行执行
# 确认gen_wts.py和yolov5s.pt在同一个文件夹
# go to ultralytics/yolov5
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
# yolov5s.wts生成
接下来是进入到tensorrtx/yolov5里面打开cmakefile.txt文件修改里面的路径(切记一定要改,否则就会报错!!!!!!!!!)
# tensorrt
include_directories(/usr/include/x86_64-linux-gnu/)
link_directories(/usr/lib/x86_64-linux-gnu/)
#把上面括号里面的东西换成你自己的tensorrt里面的路径,第一个include的路径,第二个是lib的路径
接下来就是按照下面的代码进行就可以了:
# 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 yolov5s.wts yolov5s.engine s
# serialize model to plan file i.e. 'yolov5s.engine'
# 推断图片,samples下面应该放你的图片,格式没要求(jpg,其他格式博主没试过)
sudo ./yolov5 -d yolov5s.engine ../samples
# deserialize plan file and run inference, the images in samples will be processed.
到此就完全转换成功,历时一个月记录一下踩过的坑,避免以后再犯相同的错误。
找打了网上好多帖子,也有买的课,但是都讲的好简单。自己做才发现真的好难。最后的链接是参考的下面这一篇博客:https://blog.csdn.net/gedidiao/article/details/122689564https://blog.csdn.net/gedidiao/article/details/122689564