当前位置: 首页 > news >正文

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
  • onnx文件 —>trt文件

先切换到与下载的与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++部署

本人在https://github.com/FeiYull/TensorRT-Alpha仓库基础之上,进行适应修改。主要改的是因为tensorrt版本问题(此仓库使用的是tensorrt8.4.2.4)带来的算子不兼容。

 可参考部署实战 | 手把手教你在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库

http://www.dtcms.com/a/528630.html

相关文章:

  • TypeScript 基础类型与接口详解
  • MySQL————mysql connect
  • 能打开各种网站的搜索引擎原神网页设计作业
  • 【SpringCloud】Ribbon(LoadBalancer ) 和 Feign
  • Dockerfile 中 ENTRYPOINT 和 CMD 有什么区别 ?
  • 网站数据库模版深圳网站建设黄浦网络 骗钱
  • vs code 下docker使用方法,以php 项目为示例
  • 番禺网站建设哪里好深圳十大传媒公司
  • 前端常见的设计模式
  • 亚马逊云渠道商:如何通过配置自动替换构建故障自愈的云架构?
  • 豆包 Python 和 Java 的 AI 集成及模型转换
  • 深入解析C++命令模式:设计原理与实际应用
  • 商城网站建设目标上海前十名文化传媒公司
  • ExpressionVisitor 的使用场景及方法
  • 《3D端游开放世界动态天气系统与场景交互优化实践日志》
  • Date类自主实现后的反思
  • 网络渗流:爆炸渗流
  • 购物网站建设款流程国外优秀设计网站大全
  • 【C++】STL容器-stack和queue的使用与模拟实现
  • numpy学习笔记(持续更新)
  • linux schedule函数学习
  • 教育培训网站有哪些辽宁网站建设企业定制公司
  • Python机器学习---6.集成学习与随机森林
  • 厦门网站建设公司新能源汽车价格表图片及价格表
  • 二分查找栈堆动态规划
  • 【脚本】提取phpstudy网站对应的PHP版本
  • 沈阳做平板网站移动互联网开发是干什么的
  • StreamX部署详细步骤
  • java 正则表达式 所有的优先级
  • 做pc端网站平台网站做游戏活动