项目介绍:YOLOv8-TensorRT-CPP
YOLOv8-TensorRT-CPP 是一个基于 C++ 的项目,结合了 TensorRT 技术,旨在高效地实现 YOLOv8 模型的推理。它支持目标检测、语义分割和人体姿态估计等多种功能。该项目展示了如何使用 TensorRT C++ API 在 GPU 上进行高效推理。
项目背景
YOLOv8 是一种先进的物体检测模型,广泛应用于计算机视觉领域。通过与 TensorRT 的结合,YOLOv8-TensorRT-CPP 能够在推理时提供更高的性能和效率,特别是在处理大规模图像数据时。
寻找维护者
此项目正在积极寻找维护者,以帮助其成长和改进。如果您对这个项目充满热情,并有兴趣贡献力量,可以通过项目发起者的 LinkedIn 进行联系和交流。
快速入门
要开始使用 YOLOv8-TensorRT-CPP,用户需具备对 TensorRT C++ API 的基本了解,该项目利用了作者的另一个项目 tensorrt-cpp-api
进行后台推理操作。
系统要求
- 本项目在 Ubuntu 20.04 和 22.04 上进行了测试。当前不支持 Windows 系统。
- 需要安装 CUDA(建议版本 >= 12.0)和 cuDNN(建议版本 >= 8)。
- 安装 CMake 和 OpenCV(建议版本 >= 4.8)。可以通过
build_opencv.sh
脚本编译 OpenCV 源码。 - 下载并配置 TensorRT 10(要求版本 >= 10.0)。
安装说明
- 使用以下命令克隆项目:
注意:务必使用git clone https://github.com/cyrusbehr/YOLOv8-TensorRT-CPP --recursive
--recursive
标志以确保子模块正常。
模型转换流程
从 PyTorch 转换至 ONNX 的步骤如下:
- 从官方的 YOLOv8 仓库中下载模型,如 YOLOv8x。
- 安装 ultralytics 包:
pip3 install ultralytics
- 使用提供的脚本将 PyTorch 模型转换成 ONNX 格式:
python3 pytorch2onnx.py --pt_path <path to your pt file>
构建项目
- 创建并进入构建目录:
mkdir build cd build
- 使用 CMake 进行构建:
cmake .. make -j
运行可执行文件
首次运行时,由于 TensorRT 需要从 ONNX 模型生成一个优化引擎文件,可能需要较长时间(超过 5 分钟)。之后的运行会快速加载该引擎文件。
- 运行基准测试:
./benchmark --model /path/to/your/onnx/model.onnx --input /path/to/your/benchmark/image.png
- 在图像上进行推理并保存注释图像:
./detect_object_image --model /path/to/your/onnx/model.onnx --input /path/to/your/image.jpg
- 使用摄像头进行实时推理并显示结果:
./detect_object_video --model /path/to/your/onnx/model.onnx --input 0
INT8 推理
启用 INT8 精度可进一步加快推理速度,但会略微降低精度。需要提供 1K+ 的校准图像,以便模型的动态范围更好地代表实际数据。
性能基准
在 NVIDIA GeForce RTX 3080 笔记本 GPU 和 Intel Core i7-10870H CPU 上运行基准测试,使用 640x640 的 BGR 图像和 FP16 精度。结果如下:
Model | Total Time | Preprocess Time | Inference Time | Postprocess Time |
---|---|---|---|---|
yolov8n | 3.613 ms | 0.081 ms | 1.703 ms | 1.829 ms |
如何调试
如果遇到生成 TensorRT 引擎文件的问题,可以在 libs/tensorrt-cpp-api/src/engine.cpp
中将日志级别更改为 kVERBOSE
以获取更多信息。
表达感谢
如果此项目对您有所帮助,为其加星是对作者工作的极大鼓励,有助于保持项目的更新。