ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

win10下yolov5 tensorrt模型部署

win10下yolov5 tensorrt模型部署 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模型加速部署更多点我进去…文章目录一、YOLOv5简介二、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工程设置三、从yolov5源码中导出onnx文件四、利用tensorrt编译onnx模型五、编译执行yolov5-tensorrt工程六、结束语yolov5 tensorrt cuda模型推理加速部署《TensorRT-Alpha》场景Tokyo一、YOLOv5简介YOLOv5的创新性相比于之前的目标检测算法YOLOv5在多个方面进行了创新和优化。首先它在网络结构上采用了轻量级的设计使用了CSPDarknet53作为骨干网络减少了计算量和参数量提高了算法的实时性和效率。其次YOLOv5引入了蒸馏学习策略使用教师模型指导学生模型进行学习提高了模型的性能和泛化能力。此外YOLOv5还采用了多尺度特征融合策略使得模型能够更好地捕捉到不同尺度的目标特征。另外YOLOv5还改进了损失函数的设计采用GIOU和COCO等损失函数提高了模型的准确性。YOLOv5对工业界的影响YOLOv5的推出对工业界产生了广泛的影响。首先它被广泛应用于智能驾驶、安防监控、机器人视觉等场景中为工业界提供了更准确、高效和可靠的目标检测工具。其次YOLOv5的推出加速了目标检测技术的发展和应用促进了计算机视觉领域的进步。此外YOLOv5的开源也为工业界提供了更多的参考和选择推动了深度学习算法的发展和完善。YOLOv5的优点YOLOv5具有多个优点。首先它具有高效性能够在短时间内处理大量的图像和视频数据。其次YOLOv5具有准确性能够准确地检测到目标物体并对其进行分类和定位。此外YOLOv5还具有实时性能够实时地输出检测结果和处理速度使得它能够适用于各种实际应用场景中。另外YOLOv5还具有易用性其简单的接口和易懂的文档使得开发者可以轻松上手并开发出高质量的目标检测程序。本文提供深度学习CV领域模型加速部署案例仓库实现的cuda c支持多batch图像预处理、推理、decode、NMS。大部分模型转换流程为torch-onnx-tensorrt。有源码有源码有源码不要慌哈哈哈。二、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点击确认。然后编译一下编译成功如下图三、从yolov5源码中导出onnx文件可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver 你也可以自己下载仓库然后按照下面指令手动导出onnx文件下载yolov5源码# 下载yolov5源码gitclone https://github.com/ultralytics/yolov5cdyolov5gitcheckout v7.0安装 yolov5环境pipinstall-rrequirements.txt命令行进入yolov5源码根目录用以下指令导出onnx模型文件其中–dynamic参数一定要加上。# 640python export.py--weightsyolov5n.pt--dynamic--includeonnx python export.py--weightsyolov5s.pt--dynamic--includeonnx python export.py--weightsyolov5m.pt--dynamic--includeonnx python export.py--weightsyolov5l.pt--dynamic--includeonnx python export.py--weightsyolov5x.pt--dynamic--includeonnx# 1280python export.py--weightsyolov5n6.pt--dynamic--includeonnx python export.py--weightsyolov5s6.pt--dynamic--includeonnx python export.py--weightsyolov5m6.pt--dynamic--includeonnx python export.py--weightsyolov5l6.pt--dynamic--includeonnx python export.py--weightsyolov5x6.pt--dynamic--includeonnx四、利用tensorrt编译onnx模型将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里里面有个tensorrt官方提供的模型编译工具即trtexec.exe 如下图然后使用以下指令编译onnx模型需要注意参数 --onnx 和 --saveEngine 可以设置为自定义路径例如--onnxd:/Data/xxx.onnx--saveEngined:/Data/xxx.trt# 640# 640./trtexec.exe--onnxyolov5n.onnx--saveEngineyolov5n.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 ./trtexec.exe--onnxyolov5s.onnx--saveEngineyolov5s.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 ./trtexec.exe--onnxyolov5m.onnx--saveEngineyolov5m.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 ./trtexec.exe--onnxyolov5l.onnx--saveEngineyolov5l.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640 ./trtexec.exe--onnxyolov5x.onnx--saveEngineyolov5x.trt--buildOnly--minShapesimages:1x3x640x640--optShapesimages:4x3x640x640--maxShapesimages:8x3x640x640# 1280./trtexec.exe--onnxyolov5n6.onnx--saveEngineyolov5n6.trt--buildOnly--minShapesimages:1x3x1280x1280--optShapesimages:4x3x1280x1280--maxShapesimages:8x3x1280x1280 ./trtexec.exe--onnxyolov5s6.onnx--saveEngineyolov5s6.trt--buildOnly--minShapesimages:1x3x1280x1280--optShapesimages:4x3x1280x1280--maxShapesimages:8x3x1280x1280五、编译执行yolov5-tensorrt工程下载源码并编译gitclone https://github.com/FeiYull/tensorrt-alphagitfetch origingitcheckout legacy仿造2.3.4 新建工程与设置中新建、设置vs2019工程其中yolov5需要将如下图多个文件添加到工程中红色框内文件来自TensorRT-Alpha/utils/蓝色框内文件来自TensorRT-Alpha/yolov5/绿色框内文件来自TensorrRT安装路径下TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4\TensorRT-8.4.2.4\samples\common\logger.cpp如下图yolov5项目编译成功从下面编译信息可以看到exe文件所在路径为D:\VS2019_Project\TensorRT-Alpha\x64\Release\yolov5.exe已启动生成…1------ 已启动生成: 项目: yolov5, 配置: Release x64 ------1yolov5.vcxproj -D:\VS2019_Project\TensorRT-Alpha\x64\Release\yolov5.exe生成: 成功1个失败0个最新0个跳过0个以下是命令行执行指令需要说明的是执行推理任务支持图片、视频、摄像头# 640# infer an image./yolov5.exe--versionv570--model../../data/yolov5/yolov5n.trt--size640--batch_size1--img../../data/6406401.jpg--show--savePath../# infer video./yolov5.exe--versionv570--model../../data/yolov5/yolov5n.trt--size640--batch_size2--video../../data/people.mp4--show# infer web camera./yolov5.exe--versionv570--model../../data/yolov5/yolov5n.trt--size640--batch_size2--show--cam_id0# 1280./yolov5.exe--versionv570--model../../data/yolov5/yolov5s6.trt--size1280--batch_size1--img../../data/6406401.jpg--show--savePath这里给个示范例如我要在命令行使用yolov5推理一张图.\yolov5.exe--modelD:\ThirdParty\TensorRT-8.4.2.4\bin\yolov5n.trt--size640--batch_size1--imgd:/Data/1.jpg--show--savePathd:/效果如下图下面是yolov5推理视频效果可以自己玩一玩.\yolov5.exe--modelD:\ThirdParty\TensorRT-8.4.2.4\bin\yolov5n.trt--size640--batch_size1--videoE:\VideoAlpha\source_video\football.mp4--showyolov5 tensorrt cuda模型推理加速部署《TensorRT-Alpha》场景Tokyo以下是bash窗口打印的推理时间注意例如batch_size设置为2每一行表示表示处理两张图的平均时间。[10/22/2023-08:20:02][I]preprocesstime0.783168;infertime3.58605;postprocesstime0.082752[10/22/2023-08:20:02][I]preprocesstime0.646848;infertime4.24038;postprocesstime0.082688[10/22/2023-08:20:02][I]preprocesstime0.616544;infertime2.89075;postprocesstime0.07968[10/22/2023-08:20:02][I]preprocesstime2.53853;infertime2.80883;postprocesstime0.046496[10/22/2023-08:20:02][I]preprocesstime0.99216;infertime2.41869;postprocesstime0.064448[10/22/2023-08:20:02][I]preprocesstime0.879072;infertime2.42074;postprocesstime0.064704[10/22/2023-08:20:02][I]preprocesstime0.988768;infertime2.4105;postprocesstime0.069312[10/22/2023-08:20:02][I]preprocesstime0.797376;infertime3.5328;postprocesstime0.089024[10/22/2023-08:20:02][I]preprocesstime0.698368;infertime4.05299;postprocesstime0.100928[10/22/2023-08:20:02][I]preprocesstime0.747136;infertime2.87949;postprocesstime0.087008[10/22/2023-08:20:02][I]preprocesstime0.7568;infertime2.46784;postprocesstime0.087456[10/22/2023-08:20:02][I]preprocesstime0.73088;infertime2.39514;postprocesstime0.097824[10/22/2023-08:20:02][I]preprocesstime1.00698;infertime2.9583;postprocesstime0.101824[10/22/2023-08:20:02][I]preprocesstime3.27907;infertime2.4361;postprocesstime0.099104[10/22/2023-08:20:02][I]preprocesstime0.74784;infertime2.94502;postprocesstime0.09872[10/22/2023-08:20:02][I]preprocesstime0.75568;infertime2.43712;postprocesstime0.09744[10/22/2023-08:20:02][I]preprocesstime1.63821;infertime2.44134;postprocesstime0.104608[10/22/2023-08:20:02][I]preprocesstime0.718368;infertime2.44019;postprocesstime0.105568[10/22/2023-08:20:02][I]preprocesstime1.08122;infertime2.54874;postprocesstime0.104608六、结束语都看到这里了觉得可以请点赞收藏有条件的去仓库点个star仓库https://github.com/FeiYull/TensorRT-Alpha/tree/legacy
返回列表