YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线
本项目已上传到GitHub https://github.com/Bayesianovich/yolov8-fire-smoke-detection,欢迎star⭐ ⭐ ⭐
项目概述
本项目是一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,使用C++实现,具有以下特点:
- 实时检测性能:利用TensorRT GPU加速,实现高性能推理
- 智能双条件触发:只有同时检测到火和烟时才触发警报
- 现代化构建系统:使用XMake替代CMake,配置更简洁
- 内存高效管理:零拷贝内存管理和CUDA流异步处理
技术架构
核心组件
项目结构
├── main.cpp # 主应用程序
├── include/
│ └── yolov8_trt_demo.h # 检测器头文件
├── src/
│ └── yolov8_trt_demo.cpp # 检测器实现
├── xmake.lua # XMake构建配置
├── classes.txt # 类别标签文件
└── firesmokev1.engine # TensorRT引擎文件
关键依赖库
- TensorRT 8.6+: GPU推理加速引擎
- CUDA 12.1+: GPU并行计算平台
- cuDNN 8.9+: 深度学习GPU加速库
- OpenCV 4.8+: 计算机视觉处理库
XMake构建系统深度解析
为什么选择XMake而非CMake?
XMake相比CMake具有以下优势:
- 语法简洁:基于Lua的配置语言,学习成本更低
- 自动依赖管理:内置包管理系统
- 跨平台支持:统一的配置文件支持多平台
- 构建速度:增量编译和并行构建优化
XMake配置文件详解
1. 项目基础配置
-- 项目基本信息
set_project("yolov8_demo")
set_version("1.0.0")
set_languages("c++17")
-- 构建模式配置
add_rules("mode.debug", "mode.release")
2. 路径变量管理
-- 集中管理依赖库路径
local tensorrt_root = "F:/TensorRT-8.6.1.6"
local cudnn_root = "F:/cudnn_64-8.9.0.131"
local cuda_root = "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.1"
local opencv_root = "F:/opencv_cpu_install"
3. 目标配置
target("yolov8_demo")
set_kind("binary")
-- 源文件配置
add_files("main.cpp", "src/yolov8_trt_demo.cpp")
-- 头文件包含
add_includedirs(
"include",
tensorrt_root .. "/include",
cudnn_root .. "/include",
cuda_root .. "/include",
opencv_root .. "/include"
)
-- 库文件链接
add_linkdirs(
tensorrt_root .. "/lib",
cudnn_root .. "/lib/x64",
cuda_root .. "/lib/x64",
opencv_root .. "/lib"
)
4. 依赖库链接
-- TensorRT核心库
add_links(
"nvinfer", -- 推理引擎
"nvinfer_plugin", -- 插件支持
"nvonnxparser", -- ONNX解析
"nvparsers" -- 其他格式解析
)
-- CUDA运行时库
add_links("cudart", "cublas", "curand")
-- cuDNN深度学习库
add_links("cudnn")
-- OpenCV模块(版本相关)
add_links(
"opencv_core480",
"opencv_imgproc480",
"opencv_imgcodecs480",
"opencv_highgui480",
"opencv_videoio480",
"opencv_video480",
"opencv_dnn480"
)
5. 自动化构建后处理
after_build(function (target)
local targetdir = target:targetdir()
-- 自动复制必要的DLL文件
os.trycp(opencv_root .. "/bin/opencv_*.dll", targetdir)
os.trycp(tensorrt_root .. "/lib/*.dll", targetdir)
os.trycp(cuda_root .. "/bin/cudart64*.dll", targetdir)
os.trycp(cudnn_root .. "/bin/*.dll", targetdir)
-- 复制项目资源文件
os.trycp("*.engine", targetdir)
os.trycp("classes.txt", targetdir)
end)
常用构建命令
# 构建发布版本(推荐)
xmake build
# 构建调试版本
xmake config --mode=debug
xmake build
# 清理构建文件
xmake clean
# 清理TensorRT引擎文件
xmake clean-engines
# 运行程序
xmake run yolov8_demo
# 显示项目信息
xmake info
YOLOv8 TensorRT检测器实现解析
核心类结构
class


9

被折叠的 条评论
为什么被折叠?



