赞
踩
cuda11.0 ,pytorch 1.10 ,tensorrt7.2.3.4 ,其中会需要opencv c++ 安装,和tensorrt安装
https://opencv.org/releases/
sources 或者 GitHub都可以,我用的Sources
下载后解压zip 文件
unzip opencv-4.5.3.zip
需要的指令为:
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:unable 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
(1)看你opencv位置在哪, cd到哪里,我是放在/home下,opencv文件夹下创建build文件夹
cd opencv
mkdir build
cd build
(2)cmake
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True ..
(3)make
sudo make -j8
(4)接着make install
sudo make install
(1)装个vim,有的话就不装。
apt-get install vim
sudo vim /etc/bash.bashrc
(2)按i 进入insert 模式,在最下面加入配置:
#文件末尾添加以下内容 并保存
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
(3)ecs :wq! 保存退出
#更新
sudo updatedb
source /etc/bash.bashrc
可能存在的问题:bash:updatedb:command not found
解决方法:
sudo apt-get install mlocate
#打开下列文件
sudo vim /etc/ld.so.conf.d/opencv.conf
# 添加lib路經 在 末尾 保存退出
/usr/local/lib
# 更新环境变量
sudo ldconfig
#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库
我下的是tensort7.2.3.4,下载tar
官方下载地址 https://developer.nvidia.com/nvidia-tensorrt-7x-download
tar -zxvf TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.0.cudnn8.1.tar.gz
## 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
path路径是你自己解压tensorrt的路径,要根据自己路径修改的。不能跟我一模一样
export LD_LIBRARY_PATH=/******/TensorRT-7.2.3.4/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATH
确认python版本,好确定pip 后续的whl版本。
cd python
pip3 install tensorrt-*-cp3x-none-linux_x86_64.whl
例如:pip3 install tensorrt-7.2.3.4-cp36-none-linux_x86_64.whl
cd ..
cd uff
pip3 install uff-0.6.9-py2.py3-none-any.whl
cd ../graphsurgeon/
pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl
python3
import tensorrt
print(tensorrt.__version__)
可以去github手动拉取对应yolo版本的tensorrtx,例如我是v3.1版本。也可以直接用我下面的指令(一定要跟自己yolov5的版本对应!!!!)
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不同版本
(2)指令拉取文件yolov5(因为在tensorrtx 里的文件需要调用utils里的torch_util.py)
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
git checkout v3.1
(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
修改为你的训练好的权重地址(权重位置你自己安排)
(4)保存好 ,python运行该文件,yolov5s.wts会生成在yolov5文件,将yolov5s.wts拷贝到tensorrtx/yolov5/路径下
python3 gen_wts.py
cp yolov5s.wts /home/tensorrtx/yolov5/
(5)cd 到tensorrtx/yolov5/路径下 ,vim改yololayer.h中的类别数目(这个超级关键,不改会报错!!!)
vim yololayer.h
我是两类,改为2(原先是80)保存退出
(6)新建一个build文件,cd进build,cmake 编译。
mkdir build
cd build
cmake ..
make -j8
编译过程可能会遇到的问题:/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
原版:
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
生成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 后面是你测试图片的路径
收工!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。