【YOLO】Windows 下 YOLOv8 使用 TensorRT 进行模型加速部署

news2025/1/21 12:18:04

本文全文参考文章为 win10下 yolov8 tensorrt模型加速部署【实战】
本文使用的代码仓库为 TensorRT-Alpha

注:其他 Yolov8 TensorRT 部署项目:YOLOv8 Tensorrt Python/C++部署教程

一、前期准备工作

安装Visual Studio 2019或者Visual Studio 2022、Nvidia驱动
安装cuda,cudnn、opencv、tensorrt并进行相应的环境配置,这里不做配置教程

二、属性表的创建

制作属性表的3个步骤:
1. 拷贝include路径
2. 拷贝lib路径,外加设置dll到系统环境变量
3. 拷贝lib文件名称

打开 VS 2019,创建新项目 Yolov8_TensorRT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1 创建OpenCV属性表

在这里插入图片描述
如上图将项目设置为 Debug x64 或者 Release x64 模式即可

接着切换到 属性管理器 ,这里以 Release x64 为例,右键选择 添加新项目属性表,命名为 OpenCV_ReleaseX64.props
在这里插入图片描述
在这里插入图片描述
接下来要对属性表进行编辑,双击建好的属性表,主要编辑内容为:
通用属性 -> VC++目录 -> 包含目录库目录 以及 链接器-> 输入 -> 附加依赖项
在这里插入图片描述
在这里插入图片描述
首先对 包含目录 进行编辑,这里将 OpenCV 头文件路径拷贝进去,并确定
路径如下:

path/to/opencv/build/include
path/to/opencv/build/include/opencv2

在这里插入图片描述
接下来,对 库目录 进行编辑,将库路径拷贝进去,并确定
路径如下:

path/to/opencv/build/x64/vc15/lib

在这里插入图片描述
然后对 链接器-> 输入 -> 附加依赖项 进行编辑,将opencv_world460.lib 添加进去
只需要文件名,不同版本文件名不一样,我OpenCV版本是4.6.0所以这里是460
该文件本地路径是 opencv/build/x64/vc15/lib/opencv_world460.lib
在这里插入图片描述
最后点击 应用确定 即可

结束完这个操作后,Release x64OpenCV 属性表 就配置完成了

实现Debug x64OpenCV 属性表,只需要将最后 链接器-> 输入 -> 附加依赖项 文件名改为 opencv_world460d.lib ,其余操作和上面流程一致

2.2 创建TensorRT属性表

同样在 Release | X64 下右键选择 添加新项目属性表,命名为 TensorRT_X64.props
OpenCV属性表 类似,需要编辑的内容为:
通用属性 -> VC++目录 -> 包含目录库目录 以及 链接器-> 输入 -> 附加依赖项

首先对 包含目录 进行编辑,这里将 TensorRT 头文件路径拷贝进去,头文件路径如下:

path/to/TensorRT-8.4.3.1/include
path/to/TensorRT-8.4.3.1/samples/common
path/to/TensorRT-8.4.3.1/samples/common/windows

在这里插入图片描述
接下来,对 库目录 进行编辑,将库路径拷贝进去
文件路径如下:

path/to/TensorRT-8.4.3.1/lib

在这里插入图片描述

然后对 链接器-> 输入 -> 附加依赖项 进行编辑,文件名为:

# 文件目录 path/to/TensorRT-8.4.3.1/lib
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib

在这里插入图片描述

最后,修改 TensorRT属性表通用属性 ->C/C++ -> 预处理器 -> 预处理器定义 -> 添加指令:_CRT_SECURE_NO_WARNINGS
在这里插入图片描述
到此,TensorRT属性表配置完成

2.3 创建CUDA属性表

CUDA属性表直接使用官方的,路径为:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.6.props


这样,所有的属性表就配置完成了

三、YOLOv8 模型部署

3.1 导出训练权重的 onnx 文件

进入YOLOv8的项目中使用以下命令导出 onnx 文件

 yolo export model=weights/Animal/animal.pt format=onnx dynamic=True simplify=True

在这里插入图片描述

3.2 使用 TensorRT 编译 onnx 文件

使用以下命令对onnx文件进行编译

D:/TensorRT-8.4.3.1/bin/trtexec.exe --onnx=./weights/Animal/animal.onnx --saveEngine=./weights/Animal/animal.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640

在这里插入图片描述

3.3 编译运行

先下载 TensorRT-Alpha

git clone https://github.com/FeiYull/TensorRT-Alpha.git

3.3.1设置项目文件

TensorRT-Alpha/yolov8 中选中的文件拷贝到项目的 源文件
在这里插入图片描述
TensorRT-Alpha/utils 中选中的文件拷贝到项目的 头文件
在这里插入图片描述
最后将TensorRT-8.4.3.1/samples/common 下的 logger.cpp、sampleOptions.cpp 文件拷贝到项目的 资源文件在这里插入图片描述
接下来设置 生成依赖项,选择 CUDA 11.6(若没有,见下文 遇到的问题 中有解决方案)
在这里插入图片描述
在这里插入图片描述
然后设置 NVCC 编译 .cu及其对应头文件
选择下图中框选的文件右键 属性->项类型 更改为 CUDA C/C++ ,然后点击应用、确定即可

最后,右键 Yolov8_TensorRT -> 属性 -> 配置属性 -> 高级 -> 字符集,设置为 未设置
在这里插入图片描述
接着点击 生成 -> 生成解决方案,直到成功
(这里可能会出现问题: 由于找不到 opencv_world460d.dll, 无法执行代码,重新安装程序可能会解决此问题,见下文 遇到的问题 中有解决方案)
在这里插入图片描述
上述所有步骤都成功完成后,即可设置命令行参数,编译运行啦

3.3.2 编译运行

运行前先修改为自己的 类别数和类别名
类别数app_yolov8.cpp 中修改
类别名utils.h 中修改
在这里插入图片描述
在这里插入图片描述
使用如下命令进行图像的推理

--model=E:/Git_Projects/ultralytics/weights/Animal/animal.trt --size=640 --batch_size=1  --img=E:/Data/Animal/27.jpg  --savePath=E:/Data/Animal/Animal_27 # --show

右键项目 -> 属性 -> 属性配置 -> 调试 -> 命令参数,将上述命令添加进去
在这里插入图片描述
最后,点击 本地Windows调试器 即可
在这里插入图片描述
命令行推理

# 推理图片
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=1 --img=path/to/xxx.jpg --show --savePath=path/to/xxx
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=8 --img=path/to/xxx.jpg --show --savePath=path/to/xxx

# 推理视频
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=8 --video=path/to/xxx.mp4 --show --savePath=../

# 在线推理相机视频
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=640 --batch_size=2 --cam_id=0  --show

## 1280
# infer camera
./Yolov8_TensorRT.exe --model=path/to/xxx.trt --size=1280 --batch_size=2 --cam_id=0  --show

四、推理效果

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、可能遇到的问题

5.1 在对项目设置 生成依赖项,未出现 CUDA 版本选项

在这里插入图片描述
解决方法:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\extras\visual_studio_integration\MSBuildExtensions 下的4个文件全部复制到
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations 即可解决问题
在这里插入图片描述
在这里插入图片描述

5.2 由于找不到 opencv_world460d.dll,无法执行代码,重新安装程序可能会解决此问题

解决方法:
将 opencv 安装路径 path/to/opencv/build/x64/vc15/bin 中所有后缀是 .dll 的应用程序扩展复制到 C:/Windows/System32 中,即可解决
在这里插入图片描述

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

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

相关文章

Shell脚本文本三剑客之awk编辑器(人类从不掩饰探索星空的愿望)

文章目录 一、awk简介二、awk工作原理三、awk命令格式四、awk命令的使用1.print操作按行输出文本2.print操作按字段截取输出文本3.使用BEGIN和END指定操作5.使用操作getline6.使用操作OFS7.配合数组使用 一、awk简介 awk是linux的一个强大的命令,具备强大的文本格式…

puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名

背景 最近产品觉得我们网站在百度收录上排名太靠后了,又不肯花钱,就让我们想办法提升网站的SEO。由于项目是用vue3写的,并且已经迭代多个版本了,用nuxt实在不适宜,当然俺的开发水平也不够,周期也会拉得很长…

字典翻译EasyTrans简单使用分享

前言 最近太忙了,一直按在项目上摩擦,都没有时间写分享了。今天终于市把所有负责的模块都写完了,本次迭代引入了字典翻译,借这个机会顺便分享下。 一、什么是字典翻译 所谓的字典翻译其实简单理解就是一些不常更新的有键值对属性的…

什么是 Java 的内存模型?如何保证安全

Java 的内存模型定义了多线程程序中,不同线程之间如何共享和访问共享变量的规则。Java 内存模型的设计旨在保证线程安全和可见性,同时保证程序的性能。本文将介绍 Java 内存模型的基本概念、线程安全的实现方法以及如何使用 synchronized 和 volatile 关…

yolo 训练

这里写目录标题 分配训练集&Validation数量数据集读取读取全部文件夹替换路径 loss weightNMSBBox_IOUEIou Optimizer 分配训练集&Validation数量 validation_size training_size * validation_ratio / (1 - validation_ratio)training_size 219 validation_ratio …

基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计

基于JavaSpringMVCvueelement实现前后端分离校园失物招领系统详细设计 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获…

单轴丝杠平台实现搬运功能

1. 功能说明 本文示例将实现R279样机单轴丝杠平台搬运的功能。 该机构是由一个丝杠模组和一个 舵机关节模组 组合而成,关节模组上安装了一个电磁铁。 注意限位开关【①触碰传感器、②近红外传感器】的安装位置: 2. 丝杠传动机构原理 丝杠传动机构是一个将…

基于海思Hi3531 ARM+K7 FPGA高性能综合视频图像处理平台

板卡概述 XM703是自主研制的一款基于PCIE总线架构的高性能综合视频图像处理平台,该平台采用Xilinx的高性能Kintex UltraScale系列FPGA加上华为海思的高性能视频处理器来实现。 华为海思的HI3531DV200是一款集成了ARM A53四核处理器性能强大的神经网络引擎&#xff…

最新域名查询-中文域名注册到期查询软件

最新域名查询 最新域名查询指的是查询最新注册的域名或者快速确认某个域名是否被注册等相关信息的工具。以下是一些常用的最新域名查询工具: 域名Whois查询工具:Whois查询是一种查询域名注册信息的方式,可以查询已经注册的域名的所有信息&am…

http/https

http 基本概念 超文本传输协议,是互联网应用最广泛的协议之一,用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 https 基本概念 HTTPS是HTTP over SSL的简称,即工作…

LTI连续线性时不变系统能控性证明(格拉姆判据、秩判据)

一、能控性和能达性 1.1、能控性和能达性的定义 能控性:如果在一个有限的时间间隔内,可以用幅值没有限制的输入作用,使偏离系统平衡状态的某个初始状态回复到平衡状态,就称这个初始状态是能控的。 能达性:系统在外控…

【网红营销】海外网红营销怎么做?及注意事项?

随着互联网的发展和全球化的进程,海外网红营销逐渐成为企业推广产品和服务的重要途径。海外网红可以借助其社交媒体平台上的影响力,帮助企业扩大品牌知名度、提升销售业绩。然而,海外网红营销存在着一定的挑战和风险,企业需要制定…

探索将大语言模型用作推荐系统

编者按:目前大语言模型主要问答、对话等场景,进行被动回答。是否可以将大模型应用于推荐系统,进行主动推送呢? 这篇文章回顾了可以将大模型作为推荐系统的理论基础,并重点描述了基于英文和阿拉伯语的购物数据集微调T5-…

菜鸟健身-新手使用哑铃锻炼手臂的动作与注意事项

目录 一、前言 二、哑铃锻炼手臂的好处 三、哑铃锻炼手臂的注意事项 四、哑铃锻炼手臂的基本动作 1. 哑铃弯举 2. 哑铃推举 3. 哑铃飞鸟 五、哑铃锻炼手臂的进阶动作 1. 哑铃侧平举 2. 哑铃俯身划船 六、哑铃锻炼手臂的训练计划 七、总结 一、前言 哑铃是一种非常…

2023年5月天津/南京/成都/深圳CDGA/CDGP数据治理认证报名

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…

MySQL 日志管理与恢复

MySQL日志管理 MySQL的默认日志保存位置为/usr/local/mysql/data 日志开启方式有两种:通过配置文件或者是通过命令 通过命令修改开启的日志是临时的,关闭或重启服务后就会关闭 MySQL日志管理 日志的分类 1.错误日志 用来记录当MySQL启动、停止或运行时…

畅购商城4.0

畅购商城4.0 1.走进电商 1.1电商行业分析 近年来,世界经济正向数字化转型,大力发展数字经济成为全球共识。党的十九大报告明确提出要建设“数字中国”“网络强国”,我国数字经济发展进入新阶段,市场规模位居全球第二,数…

DC-DC直流隔离升压电源模块高压稳压可调输出12v24v48v转60V80V110V150V200V220V250V300V400V500V

特点 效率高达 80%以上1*2英寸标准封装单电压输出价格低稳压输出工作温度: -40℃~85℃阻燃封装,满足UL94-V0 要求温度特性好可直接焊在PCB 上 应用 HRB W2~40W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为:4.5~9V、9~18V、及18~36V、…

我们拆了一款将ChatGPT“落地”的AI语音交互机器人,八核A7全志R58主控

视频版本拆机:【60块钱,垃圾佬的第一台机器人,国产8核CPU全志R58】 https://www.bilibili.com/video/BV1Qk4y177ja/?share_sourcecopy_web&vd_source6ec797f0de1d275e996fb7de54dea06b 公子小白是一对由狗尾草智能科技推出的人工智能机…

Pytorch代码——持续更新

1 连续两个argsort 返回张量中每个元素对应的排名 torch.argsort(torch.argsort(pred, dim1, descendingTrue),dim1,descendingFalse) 例子 使用一个argsort后得到的是张量中按列降序排序后的索引, 再使用一个argsort后是张量中每一个元素的排名。 例如第2行中…