https://www.php.cn/link/e3752bd232f5ce0a575ae0a35c06c79c
近期,YOLOv8官方发布了全新的YOLOv11框架,为当前目标检测领域再添一员得力助手。本文记录了在Windows系统下成功部署YOLOv11的TensorRT模型全过程。
重要提示:环境配置属于基础操作,本文不详细展开安装流程,相关步骤可通过搜索引擎查找对应资源完成。
测试通过环境配置:
- 操作系统:Windows 10(RTX2070,8GB显存)
- 开发工具:Visual Studio 2019
- CMake:3.24.3
- CUDA:11.7.1 + cuDNN:8.8.0
- TensorRT:8.6.1.6
- OpenCV:4.8.0
- Python环境:Anaconda3 + Python 3.8
- PyTorch:1.9.0 + cu111
- Ultralytics:8.3.3
部署流程说明:
部署中最耗时的部分是环境搭建。首先确认系统为Windows 10或11,并配备NVIDIA独立显卡。可通过任务管理器查看(Win10使用
Ctrl+Alt+Delete,Win11使用
Ctrl+Shift+Esc),进入“性能”标签页查看GPU信息。
785b7ad428034221a4ff1a167855b167.png
立即学习“C++免费学习笔记(深入)”;
若显示GPU0、GPU1等设备,且标注为“NVIDIA”,则说明具备可用的独立显卡。若为AMD或集成显卡,则不支持CUDA及TensorRT加速。
接下来需安装以下软件(建议版本一致以快速复现):
- VS2019 或 VS2022
- CMake 3.24.3
- CUDA 11.7.1 + cuDNN 8.8.0
- TensorRT 8.6.1.6
- OpenCV 4.8.0
- Anaconda3 + Python 3.8
- PyTorch 1.9.0 + cu111
- Ultralytics 8.3.3
确保上述环境均已正确安装后,开始正式部署。
模型准备与ONNX转换:
前往YOLOv8官方仓库下载YOLOv11模型权重:
将下载的
yolo11n.pt放入项目目录,在已配置好的YOLO环境(如conda环境)中运行以下命令导出ONNX模型:
yolo export model=yolo11n.pt format=onnx dynamic=False opset=12
或直接运行项目中的
export.py脚本:
python export.py
成功后将生成
yolo11n.onnx文件。
C++项目编译:
修改项目根目录下的
CMakeLists.txt,设置OpenCV和TensorRT的安装路径:
# Find and include OpenCV set(OpenCV_DIR "D:\\\\lufiles\\\\opencv480\\\\build\\\\x64\\\\vc16\\\\lib")Set TensorRT path if not set in environment variables
set(TENSORRT_DIR "D:\\lufiles\\TensorRT-8.6.1.6")
随后创建构建目录并生成项目:
mkdir build cd build cmake ..
601145cbd0fb446290fb27b11fbc2117.png
进入
build目录,用Visual Studio打开生成的
.sln文件。
70e777a66b54441ca8f17ffb2d9ab09b.png
选择 x64 Release 模式,右键点击
ALL_BUILD项目,选择“生成”。
40ae80d428e44f089f115723678e3122.png
编译成功后,可在
build\Release目录下找到生成的
yolov11-tensorrt.exe可执行文件。
ONNX转TensorRT引擎:
使用TensorRT自带的
trtexec工具将ONNX模型转换为TensorRT引擎:
trtexec --onnx=yolo11n.onnx --saveEngine=yolo11n.engine --fp16
等待约20分钟,生成
yolo11n.engine文件。将其复制到
build\Release文件夹中。
039d294b13854248a4a636bfcffeba0e.png
推理测试:
图片检测:
yolov11-tensorrt.exe yolo11n.engine "test.jpg"
视频检测:
yolov11-tensorrt.exe yolo11n.engine "car.mp4"
注意事项:
- TensorRT引擎与硬件强相关,不可跨设备通用,需在目标机器上重新生成。
- 如需进行二次开发,建议深入阅读
main.cpp
源码,需具备一定的C++编程基础。 - 完整源码可从以下链接获取:











