tensorrt c++部署
目录
1、环境配置
2、pt文件 —> onnx —> .trt格式
3、tensorrt c++部署
参考文献
以yolov8为例,分享yolov8 tensorrt c++部署的踩坑历程。
1、环境配置
以RTX3050 GPU为例,通过命令行nvidia-smi,查询GPU型号以及驱动版本。

通过nvcc --version,获取cuda运行时版本。

选择cudnn版本时,可参考下官网介绍的Support Matrix:

也可以参考下本人另外一篇博客:https://blog.csdn.net/WANGWUSHAN/article/details/110202456?spm=1001.2014.3001.5501。
TensorRT版本的选择相对友好,在官网下载位置就有对应的cuda版本:

这里选择版本TensorRT-10.8.0.43。
2、pt文件 —> onnx —> .trt格式
在yolo官方github下载python版本的yolo仓库,或者直接pip安装。
pip install ultralytics
训练好一个模型后,就可以开始转化模型文件了。
- pt文件 —> onnx
这一步可以通过python API或者命令行实现(参考使用 Ultralytics YOLO 进行模型导出):
from ultralytics import YOLO# Load a model
model = YOLO("path/to/best.pt") # load a custom trained model# Export the model
model.export(format="onnx",imgsz=640,dynamic=True)
命令行:
yolo export model=path/to/best.pt format=onnx # export custom trained model
先切换到与下载的与cuda版本对应的tensorrt build,如E:\TensorRT-10.8.0.43\bin,然后命令行执行:
trtexec.exe --onnx=path/to/best.onnx --saveEngine=path/to/best.trt --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
这一步非常重要,一定要确认好tensorrt版本。
3、tensorrt c++部署
可参考部署实战 | 手把手教你在Windows下用TensorRT部署YOLOv8,不使用CMAKEList,直接使用VS配置头文件以及依赖库。
列出本人在部署过程中遇到的bug:
3.1 LNK2001 无法解析的外部符号 "class sample::LogStreamConsumer sample::gLogWarning" (?gLogWarning@sample@@3VLogStreamConsumer@1@A)
参考https://github.com/NVIDIA/TensorRT/issues/1078。

实际只需要拷贝logger.h和logger.cpp,就可以了。
3.2 cu文件中的函数 无法解析的符号

3.3 IExecutionContext::executeV2: Error Code 3: API Usage Error (Parameter check failed, condition: inputDimensionSpecified && inputShapesSpecified. Not all shapes are specified. Following input tensors' dimensions are not specified: images.)
执行时报了上面这个bug,检查发现,onnx导出模型dynamic设置为true,即动态batch size。而本人将初始化参数结构体中的默认值从true改为了false。修改回来就可以了。

另外,如果class name中有中文,显示图片时中文字体无法显示,可参考OpenCV显示中文汉字,未使用CvxText和FreeType库,在代码中加入对应函数使得opencv显示图片时,可以显示中文。
成功生成exe后,使用命令行即可使用tensorrt完成推理了:
yolov8_trt.exe --model=../../model/best.trt --size=640 --batch_size=1 --img=../../test.jpg --show --savePath=../../res/
整个过程来看,最重要的就是配正确cuda、cudnn、tensorrt的版本。
假如参考的仓库推理后,结果与python不一样,就要核实下前处理、后处理环节与python版的差异了。
参考文献
[1] https://github.com/ultralytics/ultralytics
[2] https://github.com/FeiYull/TensorRT-Alpha
[3] 部署实战 | 手把手教你在Windows下用TensorRT部署YOLOv8
[4] Ultralytics YOLO 文档: 使用 Ultralytics YOLO 进行模型导出
[5] OpenCV显示中文汉字,未使用CvxText和FreeType库
