yolov5的TensorRT部署【tensorrt+cudnn@主机】

1、版本问题

(1)TensorRT的ONNX解释器是针对Pytorch版本编译的,如果版本不对应可能导致转模型时出现错误。

(2)主机环境:pytorch1.8.1+cuda11.1

2、Pytorch2ONNX

主机上exp305权重可用,尝试转ONNX,命令如下:

python export.py --weights runs/train/exp305/weights/best.pt --img 640 --include engine onnx 

成功导出best.onnx到runs/train/exp305/best.onnx

3、YOLO2TensorRT

export可以直接导出tensorrt,参数是--include engine,自动下载了tensorrt-0.0.1

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第1张图片

包不能用:

No module named 'tensorrt'

安装下载TensorRT(这里是错误方法,可直接跳到下面正确方法)

参照别人的版本:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第2张图片

 尝试更换tensorrt版本:

pip uninstall tensorrt

因为看到英伟达官网上只有8.2有ubuntu20.02版本,所以下载了这个版本

下载安装了trt8.2,仍然不行,no module named 'tensorrt':

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第3张图片

用dpkg安装:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第4张图片

还是不行。

版本不对需要不同的依赖:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第5张图片

准备重新来,卸载deb包:

查找tensorrt包:

dpkg -l |grep tensorrt

卸载这个包:

sudo dpkg -P nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.1.8-ga-20211117

dpkg -r 卸载。
dpkg -P 彻底卸载,包括配置文件等。

 卸载完之后用dpkg找不到包了:

尝试下载别人博客中的版本:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第6张图片

 下载了这个:

下面是正确安装方法:TensorRT

解压:

tar zxf TensorRT-8.0.1.6.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz 

移动:

sudo mv TensorRT-8.0.1.6 /opt

 环境变量

gedit ~/.bashrc

添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/TensorRT-8.0.1.6/lib

source ~/.bashrc

制tensorRT目录下 lib、include文件夹到系统文件夹(或者将这两个文件夹路径添加到.bashrc文件中)

cd /opt/TensorRT-8.0.1.6
sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include

转到我的conda环境

conda activate project1
cd python
pip install pycuda
pip install tensorrt-8.0.1.6-cp39-none-linux_x86_64.whl

安装成功:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第7张图片

 注意选择对应python版本的whl

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第8张图片

 下载安装CUDNN:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第9张图片

 官方教程:

Installation Guide :: NVIDIA Deep Learning cuDNN Documentation yolov5的TensorRT部署【tensorrt+cudnn@主机】_第10张图片

 解压:

tar -xvf cudnn-11.1-linux-x64-v8.0.5.39.tgz 
cd cuda
cd include
sudo cp cudnn*.h /usr/local/cuda/include

 挺奇怪的,解压后生成这两个东西,灵活变通一下路径复制文件:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第11张图片

cd ../
sudo cp -P ./lib64/libcudnn* /usr/local/cuda/lib64 

sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

 测试成功!

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第12张图片

继续export

报错:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第13张图片

猜测可能是显卡驱动的原因,更换了460,495都不能用

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第14张图片

换了回来,猜测可能是tensorrt版本的问题,准备换7.2,找到了支持cuda11.1的最低版本7.2,但是只有ubuntu18的版本,希望能支持。

删除TensorRT8环境

cd到opt下用(sudo rm -rf 文件夹)的命令删除tensorrt8文件

到conda虚拟环境下删除whl

pip uninstall tensorrt-8.0.1.6-cp39-none-linux_x86_64.whl

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第15张图片

根据/home/epic-l/下载/TensorRT-8.0.1.6.Linux.x86_64-gnu.cuda-11.3.cudnn8.2/TensorRT-8.0.1.6/lib的内容到opt/lib下删除文件

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第16张图片

 用sudo权限都删掉:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第17张图片

到usr/include 下删除文件:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第18张图片

 安装TensorRT-7.2.1.6

前面的步骤都一样,但是这个最高只能支持python3.7

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第19张图片

新的conda环境python=3.7:

conda create -n tensorrt python=3.7
pip install pycuda
pip install tensorrt-7.2.1.6-cp37-none-linux_x86_64.whl 
pip install -r requirements.txt

最后还是报错了:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第20张图片

4、推理测试

yolov5的detect.py中集成了onnx和tensorrt的推理

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第21张图片

还有opencv的ONNX推理:

yolov5的TensorRT部署【tensorrt+cudnn@主机】_第22张图片

尝试进行推理

python detect.py --weights runs/train/exp305/weights/best.engine --source ../datasets/coco128/images/train2017

 yolov5的TensorRT部署【tensorrt+cudnn@主机】_第23张图片

效果很差,但是可以看到一个预测出来是正确的,可能是NMS没压住,干扰置信度都太高了,可以试着研究一下什么原因。

你可能感兴趣的:(pytorch,深度学习,神经网络)