配置环境: ubuntu18.04 CUDA11.4 cudnn8.2.4 tensorrt8.4.1.5
CUDA tensorrt onnx等版本对应
注意安装对应的版本
具体参考版本对应
1、安装tensorrt
(1)查看cuda版本
nvidia-smi
(2)安装pycuda使用python时必须安装
pip3 install pycuda -i https://mirrors.aliyun.com/pypi/simple
下载:
下载链接
(1)解压缩
tar -zxvf TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz
(2)添加环境变量
sudo gedit ~/.bashrc
# 添加以下内容
export LD_LIBRARY_PATH=/home/wyh/environment_setting/TensorRT-8.4.1.5/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/home/wyh/environment_setting/TensorRT-8.4.1.5/lib::$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/wyh/environment_setting/TensorRT-8.4.1.5/targets/x86_64-linux-gnu/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/home/wyh/environment_setting/TensorRT-8.4.1.5/targets/x86_64-linux-gnu/lib:$LIBRARY_PATH# 重新source环境变量
source ~/.bashrc
(3)具体安装Tensorrt
安装tensorrt、graphsurgeon、uff
# 根据python版本选择对应的文件,我这里时python3.6
# 第一次安装的版本为8.2.1.8后面使用时出现版本问题更改下述的8.4.1.5
# cd TensorRT-8.2.1.8/python/
# pip3 install tensorrt-8.2.1.8-cp36-none-linux_x86_64.whl
# cd /TensorRT-8.2.1.8/graphsurgeon
# pip3 install graphsurgeon-0.4.5-py2.py3-none-any.whl
# cd /TensorRT-8.2.1.8/uff
# pip3 install uff-0.6.9-py2.py3-none-any.whl
注意安装版本:
cd environment_setting/TensorRT-8.4.1.5/python/
pip3 install tensorrt-8.4.1.5-cp36-none-linux_x86_64.whl cd environment_setting/TensorRT-8.4.1.5/graphsurgeon/
pip3 install graphsurgeon-0.4.6-py2.py3-none-any.whl # python 3.7以上可安装
cd environment_setting/TensorRT-8.4.1.5/uff/
pip3 install uff-0.6.9-py2.py3-none-any.whl
(4)测试Tensorrt是否安装成功
注意:在进行测试时保证tensorrt已加入到环境变量中
cd environment_setting/TensorRT-8.4.1.5/samples/sampleMNIST
make
cd ../../bin/
./sample_mnist
运行后出现如下所示表明安装正常
(5)下载TensorRT-Alpha并设置
git clone https://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/cmake
sudo gedit common.cmake
# 在文件common.cmake中的第18行中,设置成自己的目录
# set(TensorRT_ROOT /home/wyh/TensorRT-8.4.1.8)
2、YOLOv8-tensorrt部署
在conda中进行配置
2.1获取onnx文件
# 进入yolov8虚拟环境
setconda
conda activate yolov8
pip install onnx==1.12.0 #安装在yolov8虚拟环境中
2.2 下载官方权重文件
直接在网页搜索以下链接即可直接下载
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x6.pt
2.3导出onnx
在终端运行以下命令获取相对应的权重文件,在yolov8虚拟环境中运行
yolo mode=export model=yolov8n.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8s.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8m.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8l.pt format=onnx dynamic=True #simplify=True
yolo mode=export model=yolov8x.pt format=onnx dynamic=True #simplify=True
# 1280
yolo mode=export model=yolov8x6.pt format=onnx dynamic=True #simplify=True
2.4 将onnx格式文件编译为trt
注意:tensorrt要加入到环境变量中 ,或者如下运行
下列可在终端直接运行,不需要进入虚拟环境
根据实际需要的权重文件进行修改
cd /environment_setting/tensorrt-alpha/data/yolov8
# 环境配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.1.5/lib
# 生成trt文件
# 640 ../../../TensorRT-8.4.1.5/bin/trtexec为各路径,根据实际情况填写
../../../TensorRT-8.4.1.5/bin/trtexec --onnx=yolov8n.onnx --saveEngine=yolov8n.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../TensorRT-8.4.1.5/bin/trtexec --onnx=yolov8s.onnx --saveEngine=yolov8s.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../TensorRT-8.4.1.5/bin/trtexec --onnx=yolov8m.onnx --saveEngine=yolov8m.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280../../../TensorRT-8.4.1.5/bin/trtexec --onnx=yolov8x6.onnx --saveEngine=yolov8x6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
注意:遇到的问题:
编译文件时发现WARNING: onnx2trt_utils.cpp:366: Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.导致最终无法编译成功
出现此情况时我的cuda版本是11.4, tensorrt版本是8.2.1.8,无法生成最终trt文件
解决方法:将tensorrt更改为8.4.1.5版本,修改后生成TRT文件成功,其他各依赖要注意版本正确
2.5 编译tensorrt-yolov8
cd environment_setting/tensorrt-alpha/yolov8/
mkdir build
cd build
cmake ..
make
2.6 测试
cd environment_setting/tensorrt-alpha/yolov8/build
## 640
# 推理图片并保存
./app_yolov8 --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=1 --img=../../data/6406407.jpg --show --savePath
./app_yolov8 --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8 --video=../../data/people.mp4 --show --savePath# 推理视频并保存
./app_yolov8 --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8 --video=../../data/people.mp4 --show --savePath=../
# 在线推理相机视频
./app_yolov8 --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=2 --cam_id=0 --show
## 1280
# infer camera
./app_yolov8 --model=../../data/yolov8/yolov8x6.trt --size=1280 --batch_size=2 --cam_id=0 --show# 下面参数解释
# --show 表示可视化结果
# --savePath 表示保存,默认保存在build目录
# --savePath=../ 保存在上一级目录
参考链接:参考