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简介二、Win10 TensorRT环境配置2.1 安装VS20192.2 安装库2.2.1 安装Nvidia显卡驱动2.2.2 安装 cuda11.22.2.3 安装 cudnn8.2.12.2.4 下载 tensorrt8.4.2.42.2.5 OpenCV4.5.5安装2.3 创建属性表2.3.1 创建OpenCV属性表2.3.2 创建TensorRT属性表2.3.3 创建CUDA属性表2.3.4 新建工程与设置2.3.4.1 新建vs工程2.3.4.2 vs2019工程设置三、从yolov7源码中导出onnx文件四、利用tensorrt编译onnx模型五、编译执行yolov7-tensorrt工程六、结束语yolov7 tensorrt cuda模型推理加速部署TensorRT-Alpha《Korea-Night》一、YOLOv7简介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模型部署的推理结果。yolov7-tiny : Offical( left ) vs Ours( right 有源码有源码有源码不要慌哈哈哈。二、Win10 TensorRT环境配置三步解决win环境配置1、安装vs2019、Nvidia驱动、cudacudnn、opencv、tensorrt2、创建属性表3、工程设置运行注一定是先安装vs2019再安装cuda顺序不能颠倒因为cuda会自动给vs2019安装插件。问题windows环境下为什么使用vs2019属性表而不用cmake回答因为属性表可以做到一次创建到处使用。2.1 安装VS2019需要Microsoft账号如果您有别的途径下载安装也可以。进入https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/选择[2019] - [下载]在新页面选择 Visual Studio Community 2019 (version 16.11)下载完成之后安装过程选择如下图重启系统2.2 安装库注Nvidia相关网站需要注册账号。2.2.1 安装Nvidia显卡驱动进入 https://www.nvidia.cn/Download/index.aspx?langcn#依据实际情况选择如下图是我的选择(for RTX3070)选择[搜索]-[下载] -[双击默认安装] - [重启系统] - [进入cmd]输入如下指令nvidia-smi看到如下信息表明驱动正常2.2.2 安装 cuda11.2进入: https://developer.nvidia.com/cuda-toolkit-archive选择CUDA Toolkit 11.2.0 (December 2020)选择[Windows] - [x86_64] - [10] - [exe(local)] - [Download(2.9GB)]双击安装重启在cmd窗口输入如下指令nvcc-VCMD窗口打印如下信息表示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, release11.2, V11.2.67 Build cuda_11.2.r11.2/compiler.29373293_0note:cuda11.2 不需要手动设置环境变量如下图环境变量都是自动设置的。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目录中重启系统2.2.4 下载 tensorrt8.4.2.4进入网站 https://developer.nvidia.com/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添加到环境变量如下图重启系统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盘根据实际情况修改就行了。2.3 创建属性表一般地Visual Studio 2019一个库对应两个属性表文件分别对应vs2019的debug模式和release模式例如本文中OpenCV创建了这两种。而TensorRT和CUDA只需要创建一种属性表(适用以上两种模式)。2.3.1 创建OpenCV属性表创建opencv库debug属性表step1基于VS2019随便新建一个C项目如下图项目设置为Debug、X64模式step2如下图选择[属性窗口] - [右击Debug|x64] - [添加新项目属性表]step3文件命名为OpenCV4.5.5_DebugX64.props - [添加]编辑属性表[如下图双击属性表]step4如下图选择[通用属性] - [VC目录] - [包含目录] - [编辑]step5如下图将两个OpenCV两个头文件目录拷贝进去 - [确认]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”请记住制作属性表就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 debugnvinfer.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最后我们应该有了如下属性表文件其中cuda 和tensorrt的属性表同时兼容release x64 和debug x64你再新建TensorRT-Alpha中yolov8 yolov7 yolov6 等项目后只需要把上述提前做好的属性表引入到工程就行了当然项目还需要进行简单设置(设置NVCC避免tensorrt的坑)在后文提到。属性表做到了一次新建到处使用。2.3.4 新建工程与设置这一节演示如何新建vs工程如何设置工程是通用方法。适用于仓库所有模型源码。2.3.4.1 新建vs工程如下图打开vs2019点击文件 - 新建- 项目。选择空项目 - 下一步。选择创建。如下图现在将工程设置为Release X64。2.3.4.2 vs2019工程设置如下图选择属性管理器 - Release | x64 - 添加现有属性表把上一节生成的三个RleaseX64属性表添加进来。添加进来后样子如下图TensorRT项目包含c和cuda c代码通俗讲c代码文件格式为.h头文件.cpp文件由c编译器编译而cuda代码头文件格式为.h头文件.cu文件由NVCC编译器编译例如我们添加如下图5个文件在工程中。添加CUDA依赖右击项目 - 生成依赖项 - 生成自定义将如下图CUDA11.2打钩 - 确认右击项目 - 属性将会打开如下界面将字符集设置为未设置点击确认。最后在项目中同时选中所有.cu文件和对应的.h文件注意是所有。我这里就是a.h 和 a.cu文件了。然后右击 - 点属性。【注】在tensorrt-alpha开源项目中例如yolov8会添加多个.cu .cpp .h格式文件其中.cu和对应的.h文件都是这样设置目的就是让NVCC编译器来编译cuda代码。得到如下界面我们把项类型设置为CUDA C/C点击确认。然后编译一下编译成功如下图三、从yolov7源码中导出onnx文件可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver 你也可以自己下载仓库然后按照下面指令手动导出onnx文件下载yolov7源码gitclone https://github.com/WongKinYiu/yolov7gitcheckout 072f76c72c641c7a1ee482e39f604f6f8ef7ee92安装 yolov7环境pipinstall-rrequirements.txt命令行进入yolov7源码根目录用以下指令导出onnx模型文件# 640python export.py--weightsyolov7-tiny.pt--dynamic--gridpython export.py--weightsyolov7.pt--dynamic--gridpython export.py--weightsyolov7x.pt--dynamic--grid# 1280python export.py--weightsyolov7-w6.pt--dynamic--grid--img-size1280四、利用tensorrt编译onnx模型将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里里面有个tensorrt官方提供的模型编译工具即trtexec.exe 如下图然后使用以下指令编译onnx模型需要注意参数 --onnx 和 --saveEngine 可以设置为自定义路径例如--onnxd:/Data/xxx.onnx--saveEngined:/Data/xxx.trt# 640.\trtexec.exe--onnxyolov7-tiny.onnx--saveEngineyolov7-tiny.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 .\trtexec.exe--onnxyolov7.onnx--saveEngineyolov7.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 .\trtexec.exe--onnxyolov7x.onnx--saveEngineyolov7x.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640# 1280.\trtexec.exe--onnxyolov7-w6.onnx--saveEngineyolov7-w6.trt--buildOnly--minShapesimages:1x3x1280x1280--optShapesimages:4x3x1280x1280--maxShapesimages:8x3x1280x1280注如果报错Error Code 1: Cuda Runtime (an illegal memory access was encountered “bool context m_context-executeV2((void**)bindings)” returns false可能是爆显存了降低batch-size就行了五、编译执行yolov7-tensorrt工程下载源码并编译gitclone https://github.com/FeiYull/tensorrt-alphagitfetch origingitcheckout legacy仿造2.3.4 新建工程与设置中新建、设置vs2019工程其中yolov7需要将如下图多个文件添加到工程中红色框内文件来自TensorRT-Alpha/utils/蓝色框内文件来自TensorRT-Alpha/yolov7/绿色框内文件来自TensorrRT安装路径下TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4\TensorRT-8.4.2.4\samples\common\logger.cpp如下图yolov7项目编译成功从下面编译信息可以看到exe文件所在路径为D:\my_code_trt\TensorRT-Alpha-VS2019\TensorRT-Alpha\x64\Release\yolov7.exe1------ 已启动生成: 项目: yolov7, 配置: Release x64 ------1正在生成代码10of1033functions(0.0%)were compiled, the rest were copied from previous compilation.10functions were newincurrent compilation10functions had inline decision re-evaluated but remain unchanged1已完成代码的生成1yolov7.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--size640--batch_size1--img../../data/6406401.jpg--show--savePath./app_yolov7.exe--model../../data/yolov7/yolov7-w6.trt--size1280--batch_size1--img../../data/6406401.jpg--show--savePath../# infer video./app_yolov7.exe--model../../data/yolov7/yolov7-tiny.trt--size640--batch_size2--video../../data/people.mp4--show# infer camera./app_yolov7.exe--model../../data/yolov7/yolov7-tiny.trt--size640--batch_size2--cam_id0--show这里给个示范例如我要在命令行使用yolov7推理一张图.\yolov7.exe--modelD:/ThirdParty/TensorRT-8.4.2.4/bin/yolov7-tiny.trt--size640--batch_size1--imgd:/Data/1.jpg--show--savePathd:/效果如下图下面是推理视频效果可以自己玩一玩yolov7 tensorrt cuda模型推理加速部署TensorRT-Alpha《Korea-Night》六、结束语都看到这里了觉得可以请点赞收藏有条件的去仓库点个star仓库https://github.com/FeiYull/TensorRT-Alpha/tree/legacy
