Ubuntu系统下yolov5转换tensorrt

yolov5转换tensorrt,转换过程不算太难,但是配环境差点要了老命,整整一个月左右才弄好,踩尽了坑。

一.cuda的安装

首先系统需要安装cuda,如果系统已经安装了cuda就跳过这一步就好了。

cuda的下载地址:

https://developer.nvidia.com/cuda-toolkit-archiveicon-default.png?t=M4ADhttps://developer.nvidia.com/cuda-toolkit-archive

下载之前需要注册一下,填一下调查问卷。后面的安装也都是需要你有账户登录的,所以还是注册一下比较好。

 Ubuntu系统下yolov5转换tensorrt_第1张图片

 

在下载之前,打开自己的anaconda,看一下自己的显卡型号,需要下载的版本。

 Ubuntu系统下yolov5转换tensorrt_第2张图片

 根据自己的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

安装成功以后的截图:

Ubuntu系统下yolov5转换tensorrt_第3张图片

cuda相对于其他的来说还是比较好安装的。有错误删除以后再试一遍就好了。

二.tensorrt的安装

在这里为什么先说tensorrt的安装,因为tensorrt对cudnn是有要求的,这个需要你在下载的时候就看好自己的tensorrt对cudnn的版本有什么要求。

tensorrt的官方下载地址:https://developer.nvidia.com/nvidia-tensorrt-downloadicon-default.png?t=M4ADhttps://developer.nvidia.com/nvidia-tensorrt-download 

点进去以后就是选择界面(前提就是你已经注册好了账号毕竟登陆上了),我是选择的tensorrt8点进去同意就好了。

Ubuntu系统下yolov5转换tensorrt_第4张图片 

Ubuntu系统下yolov5转换tensorrt_第5张图片 

把这里的I Agree To 。。。打上勾就好了。

Ubuntu系统下yolov5转换tensorrt_第6张图片 

在这里选择和自己电脑版本相对应的安装包就好了,记得下载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-archiveicon-default.png?t=M4ADhttps://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/icon-default.png?t=M4ADhttps://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/122689564icon-default.png?t=M4ADhttps://blog.csdn.net/gedidiao/article/details/122689564

你可能感兴趣的:(ubuntu,深度学习,pytorch)