yolov8+deepsort tensorrt C++部署加速

yolov8地址:
https://github.com/ultralytics/ultralytics

yolov8+tensorrt部署加速
https://github.com/FeiYull/TensorRT-Alpha

一、基本环境安装(X86)

1.1 安装cuda和cudnn

参考我的另外一篇博客
Ubuntu 20.04 安装NVIDIA显卡驱动+cuda 11.7+cudnn 8.4

1.2 安装tensorrt8

官方地址:https://developer.nvidia.com/nvidia-tensorrt-8x-download

登录注册

在这里插入图片描述

下载tensorrt 8.4

我安装的cuda 11.7 ,然后准备安装tensorrt 8.4
在这里插入图片描述
下载TensorRT 8.4 GA Update 2 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package

解压文件

后解压这个文件

cd /opt/nvidia/
sudo cp '/home/xxxx/Downloads/TensorRT-8.4.3.1.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz' ./

sudo tar -zxvf TensorRT-8.4.3.1.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz

添加环境变量

sudo gedit ~/.bashrc

在最后添加一行

export LD_LIBRARY_PATH=/opt/nvidia/TensorRT-8.4.3.1/lib:$LD_LIBRARY_PATH
source ~/.bashrc

如果出现如下错误:
ImportError: libnvinfer.so.8: cannot open shared object file: No such file o
解决办法:

cd /etc/ld.so.conf.d
sudo vim Tensorrt-8-4-3.conf

#在Tensorrt-8-4-3.conf添加TensorRT lib 路径
/opt/nvidia/TensorRT-8.4.3.1/lib

# 更新配置
sudo ldconfig

1.3 安装pytorch GPU版本和其他基本库

参考我的yolov8工程
使用Yolov8进行目标检测并训练自己的数据集

1.4 安装onnx和onnxruntime

 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

requirements.txt

numpy
onnx
onnxsim
#opencv-python
#torch
#torchvision
#ultralytics
# tensorrt
onnxruntime

二、Yolov8简介

YOLO (You Look Only Once) 是一种基于图像全局信息进行预测的目标检测系统,自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来,领域内的研究者们已经对 YOLO 进行了多次更新迭代,模型性能越来越强大, YOLOv8是目前最新的研究成果。YOLO v8 是由小型初创公司 Ultralytics 创建并维护的(值得注意的是 YOLO v5 也由该公司创建)。与先前几个版本相比,YOLO v8 抛弃了前几代模型的 Anchor, 模型更准确,同时为训练模型提供统一框架,以执行以下基本任务:(1)目标检测;(2)实例分割;(3)图像分类。Ultralytics 公司的工程化能力突出,旗下作品YOLO v5和YOLO v8均具备又快又好的特点。YOLOv8 项目地址:https://github.com/ultralytics/ultralytics

YOLO v8的模型图如下所示:

在这里插入图片描述

三、通过导出ONNX模型生成TensorRT Engine文件

3.1 使用Python代码导出ONNX模型

yolov8s.pt——>yolov8s.onnx

使用如下Python命令导出ONNX模型。注意,只要网络畅通,并且能正常连接Github网站,该命令首先会自动下载yolov8s.pt模型,然后再基于该模型生成对应ONNX模型:yolov8s.onnx
如果网络状况不太好,可通过如下命令手动下载YOLO v8事先训练好的Pytorch模型(不必全部下载,若只关注yolov8s.pt就仅下载该模型):

wget https://github.com/ultralytics/ultralytics/releases/download/v8.0.0/yolov8n.pt
wget https://github.com/ultralytics/ultralytics/releases/download/v8.0.0/yolov8s.pt
wget https://github.com/ultralytics/ultralytics/releases/download/v8.0.0/yolov8m.pt
wget https://github.com/ultralytics/ultralytics/releases/download/v8.0.0/yolov8l.pt
wget https://github.com/ultralytics/ultralytics/releases/download/v8.0.0/yolov8x.pt

可将yolov8s.pt更换为yolov8n.pt等其他模型

python3 export.py --weights ./weights/yolov8s.pt --iou-thres 0.65 --conf-thres 0.25 --topk 100 --opset 11 --sim --input-shape 1 3 640 640 --device cuda:0

上述命令中,各参数的含义如下:

  • --weights : The PyTorch model you trained.
  • --iou-thres : IOU threshold for NMS plugin.
  • --conf-thres : Confidence threshold for NMS plugin.
  • --topk : Max number of detection bboxes.
  • --opset : ONNX opset version, default is 11.
  • --sim : Whether to simplify your onnx model.
  • --input-shape : Input shape for you model, should be 4 dimensions.
  • --device : The CUDA deivce you export engine .

日志如下:

(pytorch_gpu) huifeimao@CN-SHA-0132:~/Desktop/work/python_project/yolov8-tensorrt$ python3 export.py --weights ./weights/yolov8s.pt --iou-thres 0.65 --conf-thres 0.25 --topk 100 --opset 11 --sim --input-shape 1 3 640 640 --device cuda:0
YOLOv8s summary (fused): 168 layers, 11156544 parameters, 0 gradients, 28.6 GFLOPs
ONNX export success, saved as ./weights/yolov8s.onnx

可以看到在输入pt文件路径下生成了onnx文件
在这里插入图片描述

四、 导出TensorRT Engine文件——目标机器导出

yolov8s.onnx——> yolov8s.engine

4.2.1 使用Python脚本导出TensorRT Engine文件

通过如下Python脚本导出yolov8s.onnx对应的TensorRT Engine文件yolov8s.engine(该文件与硬件直接相关,不同的机器不能直接使用):

python3 build.py --weights ./weights/yolov8s.onnx --iou-thres 0.65 --conf-thres 0.25 --topk 100 --fp16  --device cuda:0

上述命令中,参数含义如下所示:

  • --weights : The ONNX model you download.
  • --iou-thres : IOU threshold for NMS plugin.
  • --conf-thres : Confidence threshold for NMS plugin.
  • --topk : Max number of detection bboxes.
  • --fp16 : Whether to export half-precision engine.
  • --device : The CUDA deivce you export engine .

可根据需要修改iou-thresconf-threstopk等参数值。

使用tensorrt工具直接导出

使用tensorrt工具直接导出也行,只需要安装tensorrt即可。

五、模型推理

5.1 使用Python脚本推理

可通过infer.py脚本进行推理,命令如下:

python3 infer.py \
--engine yolov8s.engine \
--imgs data \
--show \
--out-dir outputs \
--device cuda:0

上述命令中,参数含义如下所示:

  • --engine : The Engine you export.
  • --imgs : The images path you want to detect.
  • --show : Whether to show detection results.
  • --out-dir : Where to save detection results images. It will not work when use --show flag.
  • --device : The CUDA deivce you use.
  • --profile : Profile the TensorRT engine.

5.2 使用C++代码推理

C++推理代码位于src/detect中,具体操作方法为:

5.2.1 构建工程

构建工程命令如下:

# ~/code/YOLOv8-TensorRT是我机的项目路径,在你的电脑上需根据需要修改
cd ~/code/YOLOv8-TensorRT/src/detect
# 创建build目录并进入build目录
# 注意,创建build目录只需执行一次
mkdir build && cd build
# 根据CMakeLists.txt生成Makefile
cmake ..
# 根据Makefile构建工程
make
# 将生成的可执行程序yolov8移动到项目根目录
mv yolov8 ~/code/YOLOv8-TensorRT
# 切换到项目根目录
cd ~/code/YOLOv8-TensorRT
5.2.2 执行推理

C++推理支持单幅JPEG图像、一个目录的多幅JPEG图像、一个视频文件和摄像头实时视频等多种方式的推理:

# 1. 推理单幅JPEG图像
./yolov8 yolov8s.engine data/bus.jpg
# 2. 推理data目录下的所有JPEG图像
./yolov8 yolov8s.engine data
# 3. 推理视频文件data/test.mp4
./yolov8 yolov8s.engine data/test.mp4 
# 4. 推理摄像头实时视频(要求电脑自带摄像头并能正常打开)
./yolov8 yolov8s.engine
  • 说明1
    可使用CUDA自带命令来分析程序各子模块的耗时:
nvprof ./yolov8 yolov8l.engine data/bus.jpg

yolov8+deesort 的Tensorrt 部署

下载代码:
转engine

./trtexec --onnx=/home/diyun/work/c++_project/yolov8_deepsort_tensorrt8_cpp/yolov8-deepsort-tensorrt-cpp/weights/yolov8s.onnx --saveEngine=/home/diyun/work/c++_project/yolov8_deepsort_tensorrt8_cpp/yolov8-deepsort-tensorrt-cpp/weights/yolov8s.engine --fp16

可能出现的错误:

1、fatal error: Eigen/Core: 没有那个文件或目录

fatal error: Eigen/Core: 没有那个文件或目录
28 | #include <Eigen/Core>

安装即可:

sudo apt-get install libeigen3-dev

相关推荐

  1. YOLOv8模型部署

    2023-12-12 10:14:05       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 10:14:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 10:14:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 10:14:05       82 阅读
  4. Python语言-面向对象

    2023-12-12 10:14:05       91 阅读

热门阅读

  1. 1、springboot项目运行

    2023-12-12 10:14:05       63 阅读
  2. 1274:【例9.18】合并石子

    2023-12-12 10:14:05       49 阅读
  3. C++学习笔记(十二)

    2023-12-12 10:14:05       42 阅读
  4. 数据库常用锁

    2023-12-12 10:14:05       63 阅读
  5. C++学习-2023/12/11-2.vector容器

    2023-12-12 10:14:05       61 阅读
  6. selenium相关地址汇总

    2023-12-12 10:14:05       63 阅读
  7. AtCoder Beginner Contest 332

    2023-12-12 10:14:05       66 阅读
  8. HJ14 字符串排序

    2023-12-12 10:14:05       56 阅读
  9. 云计算、边缘计算、雾计算

    2023-12-12 10:14:05       55 阅读
  10. go使用Nacos 注册实例与注销实例

    2023-12-12 10:14:05       58 阅读