部署实战 | 手把手教你在Windows下用TensorRT部署YOLOv8

点击下方卡片,关注「集智书童」公众号

点击加入👉「集智书童-YOLO算法」交流群

本文作者丨feiyull

1、加速结果展示

1.1 性能速览

🚀快速看看yolov8n 在移动端RTX2070m(8G)的新能表现:

modelvideo resolutionmodel input sizeGPU Memory-UsageGPU-Util
yolov8n1920x10808x3x640x6401093MiB/7982MiB14%

picture.image yolov8n一个batch中平均每帧运行耗时(ms)

1.2 精度对齐

下面是左边是python框架推理结果,右边是TensorRT-Alpha推理结果。

picture.image yolov8n : Offical( left ) vs Ours( right )

picture.image yolov7-tiny : Offical( left ) vs Ours( right )

picture.image yolov6s : Offical( left ) vs Ours( right )

picture.image yolov5s : Offical( left ) vs Ours( right )

YOLOv4 YOLOv3 YOLOR YOLOX略。

2、Windows10环境配置

「三步解决win环境配置」

  • 1、安装vs2019、Nvidia驱动、cuda,cudnn、opencv、tensorrt;
  • 2、创建属性表;
  • 3、工程设置,运行;
    问题:为什么使用vs2019属性表,而不用cmake?
    回答:因为属性表可以做到:一次创建,到处使用。

2.1 安装VS2019

需要Microsoft账号,如果您有别的途径下载安装也可以。

picture.image

2.2 安装库

注:Nvidia相关网站需要注册账号。

2.2.1 安装Nvidia显卡驱动

picture.image

  • 选择:[搜索]->[下载] ->[双击默认安装] -> [重启系统] -> [进入cmd],输入如下指令:

          
            
nvidia-smi  

        

看到如下信息表明驱动正常:

picture.image

2.2.2 安装 cuda11.2


          
            
nvcc -V  

        

CMD窗口打印如下信息表示cuda11.2安装正常


          
            
nvcc: NVIDIA (R) Cuda compiler driver  
Copyright (c) 2005-2020 NVIDIA Corporation  
Built on Mon_Nov_30_19:15:10_Pacific_Standard_Time_2020  
Cuda compilation tools, release 11.2, V11.2.67  
Build cuda_11.2.r11.2/compiler.29373293_0  

        

note:cuda11.2 不需要手动设置环境变量,如下图,环境变量都是自动设置的。

picture.image

2.2.3 安装 cudnn8.2.1

  • 进入网站:https://developer.nvidia.com/rdp/cudnn-archive
  • 选择:Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x
  • 选择:cuDNN Library for Windows (x86)
  • 你将会下载这个压缩包: "cudnn-11.3-windows-x64-v8.2.1.32_2.zip"
  • 解压之后,cudnn的头文件、库文件都要拷贝到cuda安装目录。
  • 如下图,进入cudnn解压所在文件夹中include,拷贝所有头文件,粘贴到CUDA/v11.2/include中
  • lib、bin中的文件也拷贝到对应cuda目录中
  • 重启系统

picture.image

2.2.4 下载 tensorrt8.4.2.4

  • 进入网站:https://developer.nvidia.cn/nvidia-tensorrt-8x-download
  • 把这个打勾:I Agree To the Terms of the NVIDIA TensorRT License Agreement
  • 选择: TensorRT 8.4 GA Update 1
  • 选择: TensorRT 8.4 GA Update 1 for Windows 10 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 ZIP Package
  • 你将会下载这个压缩包: "TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4.zip"
  • 解压到F:\ThirdParty,并重命名为:TensorRT-8.4.2.4
  • 并将路径"F:\ThirdParty\TensorRT-8.4.2.4\lib"添加到环境变量,如下图:
  • 重启系统

picture.image

2.2.5 OpenCV4.5.5安装

  • 进入:https://opencv.org/releases/
  • 选择:[OpenCV – 4.5.5] -> [Windows]
  • 下载完成之后,是一个exe的自解压格式,解压到:D:\ThirdParty
  • 并将路径:"D:\ThirdParty\opencv4.5.5\build\bin" 和 "D:\ThirdParty\opencv4.5.5\build\x64\vc15\bin"添加到环境变量,如下图:
  • 重启系统 note:我的opencv在D盘,tensorrt在E盘,根据实际情况修改就行了。

picture.image

2.3 创建属性表

一般地,Visual Studio 2019,一个库对应两个属性表文件,分别对应:vs2019的debug模式和release模式,例如:本文中OpenCV创建了这两种。而TensorRT和CUDA只需要创建一种属性表(适用以上两种模式)。

2.3.1 创建OpenCV属性表

创建opencv库debug属性表:

  • step1:基于VS2019随便新建一个C++项目,如下图,项目设置为Debug、X64模式

picture.image

  • step2:如下图,选择:[属性窗口] -> [右击Debug|x64] -> [添加新项目属性表]

picture.image

  • step3:文件命名为:OpenCV4.5.5_DebugX64.props -> [添加]
  • 编辑属性表:[如下图:双击属性表]

picture.image

  • step4:如下图,选择:[通用属性] -> [VC++目录] -> [包含目录] -> [编辑]

picture.image

  • step5:如下图,将两个OpenCV两个头文件目录拷贝进去 -> [确认]

picture.image

  • step6:选择:[通用属性] -> [VC++目录] -> [库目录] -> [编辑] -> 将路径:"D:\ThirdParty\opencv4.5.5\build\x64\vc15\lib"拷贝进去 -> [确认]
  • step7:选择:[通用属性] -> [链接器] -> [输入] -> [附加依赖项] -> 将文件名" 「opencv_world455d.lib」 "拷贝进去->[确认]

小结:

到这里,opencv库debug属性表制作完成,release属性表和上述流程一样,唯一区别在于,如下图,项目切换到Release x64模式,新建OpenCV4.5.5_ReleaseX64属性表,然后在step7中,将文件名修改为:" 「opencv_world455.lib」 "

picture.image

请记住,制作属性表就3个步骤:

  • 拷贝include路径
  • 拷贝lib路径,外加设置dll到系统环境变量
  • 拷贝lib文件名称

2.3.2 创建TensorRT属性表

右击Debug|x64 or 右击Release|x64新建属性表,重命名为:TensorRT8.4.2.4_X64,


          
            
# include路径  
F:\ThirdParty\TensorRT-8.4.2.4\include  
F:\ThirdParty\TensorRT-8.4.2.4\samples\common  
F:\ThirdParty\TensorRT-8.4.2.4\samples\common\windows  
# lib路径  
F:\ThirdParty\TensorRT-8.4.2.4\lib  
# lib文件名称(for release& debug)  
nvinfer.lib  
nvinfer_plugin.lib  
nvonnxparser.lib  
nvparsers.lib  

        

依照上一节3个步骤:

  • step1:选择:[通用属性] -> [VC++目录] -> [包含目录] -> [编辑] -> 把上述3个include路径拷贝进去
  • step2:选择:[通用属性] -> [VC++目录] -> [库目录] -> [编辑] -> 把上述lib路径拷贝进去
  • step3:选择:[通用属性] -> [链接器] -> [输入] -> [附加依赖项] -> [编辑] -> 将上述lib文件名称拷贝进去->[确认] 最后,修改tensorrt属性表:[通用属性] -> [C/C++] -> [预处理器] -> [预处理器定义] -> 添加指令:_CRT_SECURE_NO_WARNINGS -> [确认]

2.3.3 创建CUDA属性表

CUDA属性表直接白嫖官方,在路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.2.props

最后,我们应该有了如下属性表文件:

picture.image

其中,cuda 和tensorrt的属性表同时兼容release x64 和debug x64,你再新建TensorRT-Alpha中yolov8 yolov7 yolov6 等项目后,只需要把上述提前做好的属性表引入到工程就行了,当然项目还需要进行简单设置(设置NVCC,避免tensorrt的坑),在后文提到。属性表做到了一次新建,到处使用。

3、YOLOv8模型部署

Windows10环境安装YOLOv8的python环境安装,参考我的另一篇《Win10环境下yolov8快速配置与测试》:https://blog.csdn.net/m0\_72734364/article/details/128815530

3.1 获取YOLOv8 onnx文件

直接在网盘下载(https://share.weiyun.com/3T3mZKBm),或者 google driver(https://drive.google.com/drive/folders/1-8phZHkx\_Z274UVqgw6Ma-6u5AKmqCOv) 或者使用如下命令导出onnx:


          
            
# 🔥 yolov8 官方仓库: https://github.com/ultralytics/ultralytics  
# 🔥 yolov8 官方教程: https://docs.ultralytics.com/quickstart/  
# 🚀TensorRT-Alpha will be updated synchronously as soon as possible!  
  
# 安装 yolov8  
conda create -n yolov8 python==3.8 -y  
conda activate yolov8  
pip install ultralytics==8.0.5  
pip install onnx==1.12.0  
  
# 下载官方权重(".pt" file)  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt  
https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x6.pt  

        

导出 onnx:


          
            
# 640  
yolo mode=export model=yolov8n.pt format=onnx dynamic=True    #simplify=True  
yolo mode=export model=yolov8s.pt format=onnx dynamic=True    #simplify=True  
yolo mode=export model=yolov8m.pt format=onnx dynamic=True    #simplify=True  
yolo mode=export model=yolov8l.pt format=onnx dynamic=True    #simplify=True  
yolo mode=export model=yolov8x.pt format=onnx dynamic=True    #simplify=True  
# 1280  
yolo mode=export model=yolov8x6.pt format=onnx dynamic=True   #simplify=True  

        

3.2 编译 onnx


          
            
# trtexec.exe在路径:F:\ThirdParty\TensorRT-8.4.2.4\bin  
  
# trtexec.exe, onnx, trt路径改成自己的  
  
# 640  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8n.onnx  --saveEngine=yolov8n.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8s.onnx  --saveEngine=yolov8s.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8m.onnx  --saveEngine=yolov8m.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8l.onnx  --saveEngine=yolov8l.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8x.onnx  --saveEngine=yolov8x.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640  
# 1280  
../../../../TensorRT-8.4.2.4/bin/trtexec.exe   --onnx=yolov8x6.onnx  --saveEngine=yolov8x6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280  

        

你将会的到例如:yolov8n.trt、yolov8s.trt、yolov8m.trt等文件。

3.3 编译运行

3.3.1 新建、设置项目

下载TensorRT-Alpha仓库:


          
            
git clone https://github.com/FeiYull/tensorrt-alpha  

        

3.3.2 编译运行

上面视频在vs2019中设置命令行参数,您也可以在CMD命令行上运行程序,如下:


          
            
# 下面参数解释  
# --show 表示可视化结果  
# --savePath 表示保存,默认保存在build目录  
# --savePath=../ 保存在上一级目录  
  
## 640  
# 推理图片  
./app_yolov8.exe  --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=1  --img=../../data/6406407.jpg   --show --savePath  
./app_yolov8.exe  --model=../../data/yolov8/yolov8n.trt --size=640 --batch_size=8  --video=../../data/people.mp4  --show --savePath  
  
# 推理视频  
./app_yolov8.exe  --model=../../data/yolov8/yolov8n.trt     --size=640 --batch_size=8  --video=../../data/people.mp4  --show --savePath=../  
  
# 在线推理相机视频  
./app_yolov8.exe  --model=../../data/yolov8/yolov8n.trt     --size=640 --batch_size=2  --cam_id=0  --show  
  
## 1280  
# infer camera  
./app_yolov8.exe  --model=../../data/yolov8/yolov8x6.trt     --size=1280 --batch_size=2  --cam_id=0  --show  

        

我的B站所有视频都在WIN10环境运行,https://space.bilibili.com/2028719613

picture.image

4、参考

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

5、推荐阅读

[picture.image

FastPillars实时3D目标检测 | 完美融合PointPillar、YOLO以及RepVGG的思想](https://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247501632&idx=1&sn=aea9ac03d57e6e3f4df06d5bd0abe064&chksm=feb827fec9cfaee82d332e9a20fc6e8a7d8c437728b3553e980f6949c73252c99112045c956c&scene=21#wechat_redirect)

[picture.image

3D检测涨点Trick | 2D检测居然可以教BEV进行3D目标检测](https://mp.weixin.qq.com/s?__biz=MzU5OTA2Mjk5Mw==&mid=2247501557&idx=1&sn=30457d95d35fb8b5498e1360fad884f0&chksm=feb8264bc9cfaf5d1fea4fcfa2b3a13e769e5dc90dcb8a152f1333d76086951bb88a0aa551d1&scene=21#wechat_redirect)

picture.image

YOLOv6设计来源 | 具有硬件感知的神经网络设计

picture.image

扫码加入👉「集智书童-YOLO算法」交流群

(备注: 方向+学校/公司+昵称 )

picture.image

picture.image

picture.image

picture.image

picture.image

picture.image

想要了解更多:

前沿AI视觉感知全栈知识👉「分类、检测、分割、关键点、车道线检测、3D视觉(分割、检测)、多模态、目标跟踪、NerF」

行业技术方案 👉「AI安防、AI医疗、AI自动驾驶」

AI模型部署落地实战 👉「CUDA、TensorRT、NCNN、OpenVINO、MNN、ONNXRuntime以及地平线框架」

欢迎扫描上方二维码,加入「 集智书童-知识星球 」,日常分享论文、学习笔记、问题解决方案、部署方案以及全栈式答疑,期待交流!

免责声明

凡本公众号注明“来源:XXX(非集智书童)”的作品,均转载自其它媒体,版权归原作者所有,如有侵权请联系我们删除,谢谢。

点击上方卡片,关注 「集智书童」 公众号

0
0
0
0
评论
未登录
暂无评论