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模型加速部署
更多(点我进去)…
yolov7 tensorrt cuda模型推理加速部署TensorRT-Alpha《Korea-Night》
YOLOv7是一种基于深度学习的目标检测算法,由美国计算机科学家Joseph Redmon等人于2016年提出。YOLOv7的创新点在于其速度和准确性的平衡,以及在处理小目标时的优越性能。
YOLOv7的主要创新点包括:
多尺度预测:YOLOv7采用了多尺度预测的方法,可以同时检测不同大小的目标,提高了检测的准确性。
特征融合:YOLOv7使用了更深的卷积神经网络来提取特征,并将浅层和深层的特征进行融合,提高了检测的准确性。
锚框设计:YOLOv7采用了Darknet-53作为基础网络,并设计了新的锚框,使得模型能够更好地适应各种形状的目标。
损失函数优化:YOLOv7使用了新的损失函数,使得模型在训练过程中能够更好地学习到目标的位置信息。
YOLOv7的作者Joseph Redmon是YOLO系列算法的主要贡献者,他在计算机视觉领域有着广泛的影响力。他的研究成果被广泛应用于自动驾驶、安防监控等领域。
YOLOv7对业界的影响主要体现在以下几个方面:
提高了目标检测的速度和准确性:YOLOv7在保持较高准确性的同时,大大提高了检测速度,满足了实时性的需求。
推动了深度学习在目标检测领域的应用:YOLOv7的成功应用,推动了深度学习在目标检测领域的广泛应用。
促进了相关技术的发展:YOLOv7的出现,推动了目标检测技术、深度学习技术等相关技术的发展。
本文提供深度学习CV领域模型加速部署案例,仓库实现的cuda c支持多batch图像预处理、推理、decode、NMS。大部分模型转换流程为:torch->onnx->tensorrt。下图左边是yolov7-python源码推理结果,右边是本文基于tensorrt实现yolov7模型部署的推理结果。
有源码!有源码!有源码! 不要慌,哈哈哈。
三步解决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文件,下载yolov7源码:
git clone https://github.com/WongKinYiu/yolov7
git checkout 072f76c72c641c7a1ee482e39f604f6f8ef7ee92
安装 yolov7环境
pip install -r requirements.txt
命令行进入yolov7源码根目录,用以下指令导出onnx模型文件
# 640
python export.py --weights yolov7-tiny.pt --dynamic --grid
python export.py --weights yolov7.pt --dynamic --grid
python export.py --weights yolov7x.pt --dynamic --grid
# 1280
python export.py --weights yolov7-w6.pt --dynamic --grid --img-size 1280
将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里,里面有个tensorrt官方提供的模型编译工具,即:trtexec.exe 如下图:
然后使用,以下指令编译onnx模型,需要注意:参数 --onnx 和 --saveEngine 可以设置为自定义路径,例如:
--onnx=d:/Data/xxx.onnx --saveEngine=d:/Data/xxx.trt
# 640
.\trtexec.exe --onnx=yolov7-tiny.onnx --saveEngine=yolov7-tiny.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
.\trtexec.exe --onnx=yolov7.onnx --saveEngine=yolov7.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
.\trtexec.exe --onnx=yolov7x.onnx --saveEngine=yolov7x.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
.\trtexec.exe --onnx=yolov7-w6.onnx --saveEngine=yolov7-w6.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工程;其中,yolov7需要将如下图多个文件添加到工程中:
1>------ 已启动生成: 项目: yolov7, 配置: 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>yolov7.vcxproj -> D:\my_code_trt\TensorRT-Alpha-VS2019\TensorRT-Alpha\x64\Release\yolov7.exe
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
以下是命令行执行指令,需要说明的是执行推理任务,支持图片、视频、摄像头
## 640
# infer image
./app_yolov7.exe --model=../../data/yolov7/yolov7-tiny.trt --size=640 --batch_size=1 --img=../../data/6406401.jpg --show --savePath
./app_yolov7.exe --model=../../data/yolov7/yolov7-w6.trt --size=1280 --batch_size=1 --img=../../data/6406401.jpg --show --savePath=../
# infer video
./app_yolov7.exe --model=../../data/yolov7/yolov7-tiny.trt --size=640 --batch_size=2 --video=../../data/people.mp4 --show
# infer camera
./app_yolov7.exe --model=../../data/yolov7/yolov7-tiny.trt --size=640 --batch_size=2 --cam_id=0 --show
这里给个示范,例如我要在命令行使用yolov7推理一张图:
.\yolov7.exe --model=D:/ThirdParty/TensorRT-8.4.2.4/bin/yolov7-tiny.trt --size=640 --batch_size=1 --img=d:/Data/1.jpg --show --savePath=d:/
yolov7 tensorrt cuda模型推理加速部署TensorRT-Alpha《Korea-Night》
都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha