TensorRT系列之 Win10下yolov8 tensorrt模型加速部署
TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署
TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署
TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署
TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署
TensorRT系列之 Linux下 yolox tensorrt模型加速部署
TensorRT系列之 Linux下 u2net tensorrt模型加速部署
更多(点我进去)…
yolov6 tensorrt cuda模型推理加速部署TensorRT-Alpha《YunNan-Stree》
YOLOv6是美团发布的检测算法,在最新版本中,YOLOv6主要更新了如下几个方面:
发布了移动端轻量级模型YOLOv6Lite,这个模型更适用于移动端的应用场景,同时保持了较高的精度和速度平衡。
发布了新的模型YOLOv6-Face,这是专门为人脸检测任务设计的模型,能够更准确地检测和识别人脸。
优化了模型的性能和准确度,提高了模型的稳定性和鲁棒性。
修复了一些已知的问题,提升了用户体验。
此外,根据官方发布的信息,新版本的YOLOv6在各个模型大小(nano, tiny, small, medium, large)上都取得了较高的目标检测精度。例如,YOLOv6-nano在COCO val2017数据集上达到了35.0 mAP,YOLOv6-s在同样的数据集上达到了43.1 mAP。这些改进都大大增强了YOLOv6在各种应用场景中的实用性。
本文提供深度学习CV领域模型加速部署案例,仓库实现的cuda c支持多batch图像预处理、推理、decode、NMS。大部分模型转换流程为:torch->onnx->tensorrt。下图左边是yolov6-python源码推理结果,右边是本文基于tensorrt实现yolov6模型部署的推理结果。
有源码!有源码!有源码! 不要慌,哈哈哈。
三步解决win环境配置:
需要Microsoft账号,如果您有别的途径下载安装也可以。
注:Nvidia相关网站需要注册账号。
nvidia-smi
看到如下信息表明驱动正常:
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 不需要手动设置环境变量,如下图,环境变量都是自动设置的。
一般地,Visual Studio 2019,一个库对应两个属性表文件,分别对应:vs2019的debug模式和release模式,例如:本文中OpenCV创建了这两种。而TensorRT和CUDA只需要创建一种属性表(适用以上两种模式)。
创建opencv库debug属性表:
右击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个步骤:
CUDA属性表直接白嫖官方,在路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.2.props
最后,我们应该有了如下属性表文件:
其中,cuda 和tensorrt的属性表同时兼容release x64 和debug x64,你再新建TensorRT-Alpha中yolov8 yolov7 yolov6 等项目后,只需要把上述提前做好的属性表引入到工程就行了,当然项目还需要进行简单设置(设置NVCC,避免tensorrt的坑),在后文提到。属性表做到了一次新建,到处使用。
这一节演示如何新建vs工程,如何设置工程,是通用方法。适用于仓库所有模型源码。
如下图,打开vs2019,点击:文件 -> 新建-> 项目。
选择:空项目 -> 下一步。
选择创建。
如下图,现在将工程设置为:Release X64。
如下图,选择:属性管理器 -> Release | x64 -> 添加现有属性表,把上一节生成的三个RleaseX64属性表添加进来。
添加进来后样子如下图:
TensorRT项目包含c++和cuda c代码,通俗讲,c++代码文件格式为:
可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件,下载yolov6源码:
# 下载yolov6源码
git clone https://github.com/meituan/YOLOv6
# 切换版本为6.3.0
git checkout 0.3.0
安装 yolov6环境
pip install -r requirements.txt
命令行进入yolov6源码根目录,用以下指令导出onnx模型文件
# 640
python ./deploy/ONNX/export_onnx.py --weights yolov6n.pt --img 640 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6s.pt --img 640 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6m.pt --img 640 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6l.pt --img 640 --dynamic-batch --simplify
# 1280
python ./deploy/ONNX/export_onnx.py --weights yolov6n6.pt --img 1280 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6s6.pt --img 1280 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6m6.pt --img 1280 --dynamic-batch --simplify
python ./deploy/ONNX/export_onnx.py --weights yolov6l6.pt --img 1280 --dynamic-batch --simplify
将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里,里面有个tensorrt官方提供的模型编译工具,即:trtexec.exe 如下图:
然后使用,以下指令编译onnx模型,需要注意:参数 --onnx 和 --saveEngine 可以设置为自定义路径,例如:
--onnx=d:/Data/xxx.onnx --saveEngine=d:/Data/xxx.trt
# 640
./trtexec.exe --onnx=yolov6n.onnx --saveEngine=yolov6n.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
./trtexec.exe --onnx=yolov6s.onnx --saveEngine=yolov6s.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
./trtexec.exe --onnx=yolov6m.onnx --saveEngine=yolov6m.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
./trtexec.exe --onnx=yolov6l.onnx --saveEngine=yolov6l.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
./trtexec.exe --onnx=yolov6n6.onnx --saveEngine=yolov6n6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
./trtexec.exe --onnx=yolov6s6.onnx --saveEngine=yolov6s6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
./trtexec.exe --onnx=yolov6m6.onnx --saveEngine=yolov6m6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
./trtexec.exe --onnx=yolov6l6.onnx --saveEngine=yolov6l6.trt --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
注:如果报错(Error Code 1: Cuda Runtime (an illegal memory access was encountered “bool context = m_context->executeV2((void**)bindings)” returns false)
可能是爆显存了,降低batch-size就行了
下载源码并编译
git clone https://github.com/FeiYull/tensorrt-alpha
仿造 2.3.4 新建工程与设置 中新建、设置vs2019工程;其中,yolov6需要将如下图多个文件添加到工程中:
已启动生成…
1>------ 已启动生成: 项目: yolov6, 配置: Release x64 ------
1>正在生成代码
1>0 of 1033 functions ( 0.0%) were compiled, the rest were copied from previous compilation.
1> 0 functions were new in current compilation
1> 0 functions had inline decision re-evaluated but remain unchanged
1>已完成代码的生成
1>yolov6.vcxproj -> D:\my_code_trt\TensorRT-Alpha-VS2019\TensorRT-Alpha\x64\Release\yolov6.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
以下是命令行执行指令,需要说明的是执行推理任务,支持图片、视频、摄像头
## 640
# infer image
./app_yolov6.exe --model=../../data/yolov6/yolov6n.trt --size=640 --batch_size=1 --img=../../data/6406401.jpg --show --savePath=../
# infer video
./app_yolov6.exe --model=../../data/yolov6/yolov6n.trt --size=640 --batch_size=2 --video=../../data/people.mp4 --show
# infer camera
./app_yolov6.exe --model=../../data/yolov6/yolov6n.trt --size=640 --batch_size=2 --cam_id=0 --show
## 1280
# infer video
./app_yolov6.exe --model=../../data/yolov6/yolov6s6.trt --size=1280 --batch_size=2 --video=../../data/people.mp4 --savePath=../
这里给个示范,例如我要在命令行使用yolov6推理一张图:
.\yolov6.exe --model=D:/ThirdParty/TensorRT-8.4.2.4/bin/yolov6s.trt --size=640 --batch_size=1 --img=d:/Data/2.jpg --show --savePath=d:/
效果如下图:
下面是yolov6推理视频效果,可以自己玩一玩:
yolov6 tensorrt cuda模型推理加速部署TensorRT-Alpha《YunNan-Stree》
都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha