当前位置:   article > 正文

YOLOv5-v3.1,推理环境配置、Tensorrt加速一步到位(各种问题总结,吐血整理)_yololayer.h

yololayer.h

cuda11.0 ,pytorch 1.10 ,tensorrt7.2.3.4 ,其中会需要opencv c++ 安装,和tensorrt安装


一、opencv安装

1.下载opencv

https://opencv.org/releases/
在这里插入图片描述
sources 或者 GitHub都可以,我用的Sources
下载后解压zip 文件

unzip opencv-4.5.3.zip
  • 1

2.安装环境

需要的指令为:

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  • 1
  • 2
  • 3

主要是第一,第二条。第三条可以不需要。

可能存在的问题1unable to locate
在这里插入图片描述
解决方法

sudo apt-get update

可能存在的问题2:无法定位 libjasper-dev

sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
sudo apt update
sudo apt install libjasper1 libjasper-dev

可能存在的问题3:command not found
在这里插入图片描述
解决方法

sudo apt-get install software-properties-common

3.正式安装

(1)看你opencv位置在哪, cd到哪里,我是放在/home下,opencv文件夹下创建build文件夹

cd opencv
mkdir build
cd build
  • 1
  • 2
  • 3

在这里插入图片描述
(2)cmake

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..
  • 1

在这里插入图片描述

(3)make

sudo make -j8
  • 1

在这里插入图片描述

(4)接着make install

sudo make install
  • 1

在这里插入图片描述

4.修改环境变量

(1)装个vim,有的话就不装。

apt-get install vim
sudo vim /etc/bash.bashrc
  • 1
  • 2

在这里插入图片描述
(2)按i 进入insert 模式,在最下面加入配置:

#文件末尾添加以下内容 并保存
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
  • 1
  • 2
  • 3

在这里插入图片描述
(3)ecs :wq! 保存退出

#更新
sudo updatedb
source /etc/bash.bashrc
  • 1
  • 2
  • 3

可能存在的问题:bash:updatedb:command not found
在这里插入图片描述
解决方法:

sudo apt-get install mlocate

在这里插入图片描述

4.修改动态库

#打开下列文件
sudo vim /etc/ld.so.conf.d/opencv.conf 
 
# 添加lib路經 在 末尾 保存退出
/usr/local/lib
 
# 更新环境变量
sudo ldconfig
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

4.查看版本

#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库
  • 1
  • 2
  • 3

在这里插入图片描述

二、tensorrt安装

我下的是tensort7.2.3.4,下载tar
官方下载地址 https://developer.nvidia.com/nvidia-tensorrt-7x-download
在这里插入图片描述

1.下载tensorrt,解压

tar -zxvf TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.0.cudnn8.1.tar.gz 
## 2.配置环境变量
  • 1
  • 2
sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/home/TensorRT-7.2.3.4/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATH
source ~/.bashrc
  • 1
  • 2
  • 3

path路径是你自己解压tensorrt的路径,要根据自己路径修改的。不能跟我一模一样
export LD_LIBRARY_PATH=/******/TensorRT-7.2.3.4/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATH
在这里插入图片描述

3.确认python版本

确认python版本,好确定pip 后续的whl版本。
在这里插入图片描述

4.安装对应python包

cd python
pip3 install tensorrt-*-cp3x-none-linux_x86_64.whl
  • 1
  • 2

在这里插入图片描述
例如:pip3 install tensorrt-7.2.3.4-cp36-none-linux_x86_64.whl

5.安装uff

cd ..
cd uff
pip3  install uff-0.6.9-py2.py3-none-any.whl
  • 1
  • 2
  • 3

在这里插入图片描述

6.安装graphsurgeon

cd ../graphsurgeon/
pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl
  • 1
  • 2

在这里插入图片描述

7.验证是否安装成功

python3
import tensorrt
print(tensorrt.__version__)
  • 1
  • 2
  • 3

在这里插入图片描述

三、tensorrt 加速yolov5 (_(:з」∠)_巨坑心酸之路)

可以去github手动拉取对应yolo版本的tensorrtx,例如我是v3.1版本。也可以直接用我下面的指令(一定要跟自己yolov5的版本对应!!!!)
  • 1

cuda11.0 用tensorrt7 不能用8, 用8要炸裂。
在这里插入图片描述

如果因为版本不对应可能会出现的问题:/home/tensorrtx/yolov5/yololayer.h(54): error: member function declared with "override" does not override a base class member

在这里插入图片描述
(1)指令拉取文件tensorrtx

git clone https://github.com/wang-xinyu/tensorrtx.git
cd tensorrtx
git checkout yolov5-v3.1 #不同分支可以chekout不同版本
  • 1
  • 2
  • 3

在这里插入图片描述
(2)指令拉取文件yolov5(因为在tensorrtx 里的文件需要调用utils里的torch_util.py)

git clone https://github.com/ultralytics/yolov5.git
cd yolov5
git checkout v3.1
  • 1
  • 2
  • 3

(3)cd 到tensorrtx 下 找到 gen_wts.py ,拷贝到yolov5文件中,然后vim修改里面的权重路径

cd /home/tensorrtx/yolov5/
cp gen_wts.py /home/yolov5/
cd /home/yolov5/
vim gen_wts.py
  • 1
  • 2
  • 3
  • 4

修改为你的训练好的权重地址(权重位置你自己安排)

在这里插入图片描述
(4)保存好 ,python运行该文件,yolov5s.wts会生成在yolov5文件,将yolov5s.wts拷贝到tensorrtx/yolov5/路径下


python3 gen_wts.py 
  • 1
  • 2

在这里插入图片描述

cp yolov5s.wts /home/tensorrtx/yolov5/
  • 1

(5)cd 到tensorrtx/yolov5/路径下 ,vim改yololayer.h中的类别数目(这个超级关键,不改会报错!!!)

vim yololayer.h
  • 1

在这里插入图片描述
我是两类,改为2(原先是80)保存退出
(6)新建一个build文件,cd进build,cmake 编译。

mkdir build
cd build
cmake ..
make -j8
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
在这里插入图片描述
编译过程可能会遇到的问题:/home/tensorrtx/yolov5/yolov5.cpp:63: nvinfer1::ICudaEngine* build_engine(unsigned int, nvinfer1::IBuilder*, nvinfer1::IBuilderConfig*, nvinfer1::DataType, float&, float&, std::string&): Assertion u psample11' failed.
解决方法:
修改下tensorrtx/yolov5/路径下的cmakelist

vim CMakeLists.txt
  • 1

原版:

tensorrt
. #include_directories(/usr/include/x86_64-linux-gnu/)
. #link_directories(/usr/lib/x86_64-linux-gnu/)

改进如下:
把include,lib路径换成自己的
在这里插入图片描述
(7)编译好后会生成一个yolov5文件,生成engine

(我这是v3.1的指令,新版本的tensorrtx指令都是不一样的!!!!)

./yolov5 -s
  • 1

在这里插入图片描述
生成engine可能遇到的问题:yolov5: /home/tensorrtx/yolov5/yolov5.cpp:396: void APIToModel(unsigned int, nvinfer1::IHostMemory**): Assertion ``engine != nullptr' failed. Aborted (core dumped)

查了下都是说类别要改,确实如果yololayer.h里的class不改会报错
但是我yololayer.h里的class num 已经改2类了。类别也改了,也报错,那就是训练的时候出错了!!

解决方法:
在这里插入图片描述
我是train.py的时候没有对应。一个weights是yolov5s.pt, cfg确实yolov5x.yaml
修改下triain.py看下是否出错了。重新训练后解决!!

(8)tensorrt测试推理速度

./yolov5 -d ../images  #-d 后面是你测试图片的路径
  • 1

在这里插入图片描述
收工!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/136740
推荐阅读
相关标签
  

闽ICP备14008679号