Windows+ONNX+TensorRT+YOLOV8+C++环境搭建

news2024/11/28 0:54:56

需求

跑通了Python环境下的Yolov8,但是考虑到性能,想试试C++环境下的优化效果。

环境

Windows11

TensorRT8.6.1.6

CUDA 12.0

cudnn 8.9.7

opencv4.5.5

VS2019

参考目录

本次搭建主要参考以下博客和视频。第一个博客以下简称“博客1”,第二个视频简称“视频1”,第三个视频简称“视频2”。

win10下 yolov8 tensorrt模型部署_tensorrt-8.4.2.4-CSDN博客

【实战】win10下yolov8 tensorrt 部署_哔哩哔哩_bilibili

yolov8 tensorrt 部署自己训练的模型_哔哩哔哩_bilibili

步骤

之前已经安装了VS2019、CUDA12.0、cudnn 8.9.7,所以这几个模块安装略过。可参考博客1。

安装TensorRT

因为我本地安装的CUDA版本是12.0,所以我找了匹配的TensorRT的版本,装之前因为和上面博客中的版本不匹配,还担心后面是否能顺利跑起来,哈哈

解压,然后配置环境变量,根据自己实际路径,详细参考博客1,这里不再赘述。

安装OpenCV 

下载地址:Releases - OpenCV

我选择的是与博客1中相同的版本。其他解压,配置环境变量参考博客1。

创建属性表

创建一个空工程,我这里起名testYoloV8。这里遇到一个小坑,其实怪自己英语水平差。我的VS2019是英文的,这个属性管理器窗口,我一顿找,先是按照View->Other Windows->Properties Window,打开发现和博客1的界面不一样。后来才发现,应该是View->Property Manager这个窗口。

按照博客1中配置好各个属性表,然后添加到工程中,最后长下面这样:

这里在创建TensorRT的属性表的时候,我把lib下面所有的lib都加进去了,怕新版本和之前的不一样。

下载YOLOV8 onnx,并转成trt

我先下载了博客1中提供的Yolov8的onnx文件,然后用trtexec.exe转成了对应的trt文件,具体命令参考博客1。

配置C++工程

在上面的testYoloV8工程中进行配置,参考视频1。配置完成后,build出现1个链接错误,

查看对应的函数splitToStringVec定义在TensorRT-8.6.1.6/samples/common中的sampleUtils.h sampleUtils.cpp中,然后就把这两个文件也加到资源文件中。在build,成功了!撒花~~~

测试

在工程中设置编译命令,成功!

--model=C:/YOLOV8/ThirdParty/yolov8n.trt --size=640 --batch_size=1 --img=E:/Work/YOLO/data/bus.jpg --show --savePath E:/

使用自己的训练模型

1 首先,把自己的pt模型文件转为onnx,遇到错误,

ImportError: DLL load failed while importing onnx_cpp2py_export: 动态链接库(DLL)初始化例程失败。

解决:参考文章

ImportError: DLL load failed while importing onnx_cpp2py_export: 动态链接库(DLL)初始化例程失败。_dll load failed while importing onnx cpp2py export-CSDN博客

2 把上一步转的onnx转成trt,又遇到错误,

Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.

然后,按照网上说的安装onnx-simplifier,安装失败,

然后查看了下本地的onnx是1.16.2,卸载了这个版本,安装了1.16.1版本.

pip uninstall onnx
pip install onnx=1.16.1

安装成功后,重新把pt导出onnx格式。

再把onnx转成trt格式,参考博客1。

3 C++工程中使用自己的trt运行。

需要先按照视频2修改一些配置,主要是类别和颜色。重新build,然后添加debugging命令,运行就OK了。

结论

batch_size=1的时候,C++ TensorRT的环境下比Python环境下,GPU利用率降低5%左右,如果batch_size=8,GPU能降低50%。

感谢各位大佬,尤其感谢此次搭建环境主要参考的文章和视频的作者 韩师兄!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python画笔案例-004 绘制等腰三角形

1、绘制等腰三角形 通过 python 的turtle 库绘制一个等腰三角形的图案,如下图: 2、实现代码 这节课引入了新的指令,speed()-移动速度,home()-回到初始位置,回家的意思。hideturtle(),这个是隐藏海龟图形,并…

deepin 23丨如意玲珑正式集成至deepin 23,生态适配超千款

查看原文 近日,deepin 23正式发布,如意玲珑(Linyaps)(以下简称玲珑)作为deepin 23的重要特性之一,已经正式集成至deepin系统仓库,所有deepin 23的用户都可以无门槛地使用玲珑应用。…

Nginx: 配置项之events段核心参数用法梳理

events 核心参数 看一下配置文件 events 段中常用的一些核心参数 经常使用的参数并不多,比较常配置的就这6个 1 ) use 含义是 nginx使用何种事件驱动模型 这个事件驱动模型和linux操作系统底层的IO事件处理模型有关系语法:use methodmethod可选值&am…

云服务器常见问题及解决方案

1. 性能问题 问题描述:云服务器性能可能会受到多种因素影响,如虚拟化开销、资源竞争等,导致应用程序运行缓慢。 解决方案: 选择合适的实例类型:根据应用需求选择适当的实例类型,如计算优化型、内存优化型…

API篇(Java - 随机器(Random))(doing)

目录 一、Random 1. 简介 2. 什么是种子 3. 相关方法 4. Random对象的生成 5. Random类中的常用方法 6. 使用 6.1. 创建对象 6.2. 生成[0,1.0)区间的小数 6.3. 生成[0,5.0)区间的小数 6.4. 生成[1,2.5)区间的小数 6.5. 生成任意整数 6.6. 生成[0,10)区间的整数 6.…

LCP9回文数[leetcode-9-easy]

LCP,9回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如&#xff…

Vue 3 的 emit 简单使用

在 Vue 3 中使用 emit&#xff0c;子组件可以将事件通知父组件&#xff0c;父组件可以在响应这些事件时执行特定的逻辑。 emit 是一种非常灵活的通信方式&#xff0c;允许组件之间以解耦的方式进行交互。 1. 基本用法 1、使用 defineEmits 子组件 <template><div…

【Hadoop】知识点总结、大学期末复习

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a; 【论文精读】上交大、上海人工智能实验室等提出基于配准的少样本异常检测框架超详细解读&#xff08;翻译&#xff0b;精读&#xff09;每日一…

关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(四)

文章目录 前提提交的任务有返回值怎么办总结 前提 上一节关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(三)我们分析了以何种方式向线程池提交任务、提交的任务若有参数怎么办&#xff0c;这一节我们分析提交的任务若有返回值怎么办&#xff1f; 提交的任务有返回值…

bootloader相关内容的辨析

在PC机中&#xff0c;BIOS&#xff08;Basic Input/Output System&#xff0c;基本输入输出系统&#xff09;和UEFI&#xff08;Unified Extensible Firmware Interface&#xff0c;统一可扩展固件接口&#xff09;是两种用于初始化系统硬件、加载操作系统启动程&#xff08;如…

nestjs nest-cli.json中的assets不生效

官方文档 Documentation | NestJS - A progressive Node.js framework // nest-cli.json{"collection": "nestjs/schematics","sourceRoot": "src","compilerOptions": {"assets": ["microservices/mail/te…

【宠粉赠书】智能计算系统:从深度学习到大模型 第2版

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套关于图神经网络的学习宝典——《智能计算系统&#xff1a;从深度学习到大模型 第2版》。下面我会详细给大家介绍这本书&#xff0c;文末留有领取方式。 “只要你想把大模型做得更好、做得更大、做得更快、做得更省电&am…

Docker部署常用开发组件(保姆级教程)

说明 本文总结了一些常用组件的Docker启动命令及过程&#xff0c;在开发过程中只需花费数分钟下载和配置即可完美使用这些服务。 Mysql MySQL 是一种开源关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;目前由 Oracle 公司维护。MySQL 以其高性能、可靠性和易用…

Qt4代码实现下面的界面

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

AI预测体彩排3采取888=3策略+和值012路或胆码测试8月22日升级新模型预测第59弹

经过近60期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大部…

【C++】map、set基本用法

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言: C的STL已经学习很大一部分了&#xff0c;接下来介绍的是map set是c的是两种关联容器。 简单介绍 map set&#xff1a; 两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器&#xff0c;其中每个键…

pip package查询网站(性质类似于npmjs.com)

网址&#xff1a;PyPI The Python Package Index python 的依赖包查询网站 就和 node 的 npmjs.com 一样

SD-WAN采用哪种网络技术?如何自建SD-WAN组网?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;是一种基于软件的网络架构&#xff0c;它利用软件定义网络&#xff08;SDN&#xff09;的技术来管理广域网&#xff08;WAN&#xff09;的连接和服务。SD-WAN的主要目的是提高网络…

四大LLM模型,预训练和后训练新范式详解

导读 最初&#xff0c;大语言模型LLM的训练过程只关注于预训练&#xff0c;但如今已经扩展到包含预训练和后训练两个阶段。后训练通常包括监督指令微调和对齐&#xff0c;这一方法在ChatGPT发布后广泛流行&#xff01; 翻译自:https://magazine.sebastianraschka.com/p/new-l…

基于距离度量学习的异常检测:一种通过相关距离度量的异常检测方法

异常通常被定义为数据集中与大多数其他项目非常不同的项目。或者说任何与所有其他记录(或几乎所有其他记录)显著不同的记录,并且与其他记录的差异程度超出正常范围,都可以合理地被认为是异常。 例如上图显示的数据集中,我们有四个簇(A、B、C和D)和三个位于这些簇之外的点:P1、P…