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模型加速部署更多点我进去…文章目录一、u2net简介二、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工程设置三、从u2net源码中导出onnx文件四、利用tensorrt编译onnx模型五、编译执行u2net-tensorrt工程六、结束语一、u2net简介U-2-Net是一种基于显著对象检测SOD的卷积神经网络其核心思想是探索比场景或图像周围区域更专注的物体或区域因此非常适合于做抠图应用。这种算法主要利用由AlexNetVGGResNetResNeXtDenseNet等骨干网络提取的深度特征进行显著物体检测。U-2-Net在设计上进行了一些创新。首先它采用了编码器-解码器的结构这种结构在许多分割模型中都有广泛应用如U-Net。其次U-2-Net在编码器和解码器之间添加了跳跃连接skip connection即在每个编码器阶段都会将对应的特征图与解码器中的相应特征图相加。这种跳跃连接有助于将编码器的低级特征与解码器的高级特征相结合从而提高分割的准确性。U-2-Net的应用场景非常广泛除了显著对象检测外还可以应用于生物医学图像分割、语义分割等方向。由于U-2-Net具有较好的分割性能和较低的计算复杂度因此在实际应用中具有较高的实用价值。u2net对物体分割的边缘细节把控非常到位如下图是检测效果。本文提供u2net-tensorrt加速方法。提供深度学习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.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添加到环境变量如下图重启系统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点击确认。然后编译一下编译成功如下图三、从u2net源码中导出onnx文件可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver 你也可以自己下载仓库然后按照下面指令手动导出onnx文件下载u2net源码# 下载u2net源码gitclone https://github.com/xuebinqin/U-2-NetcdU-2-Net-master安装 u2net环境pipinstall-rrequirements.txt在u2net官方git页面下载pth格式模型你将得到文件u2net.pth和u2netp.pth其中u2netp.pth是小模型。然后使用tensorrt-alpha中提供的python脚本导出onnx脚本路径TensorRT-Alpha/u2net/alpha_export.py具体导出指令如下python alpha_export.py--netu2net--weightssaved_models/u2net/u2net.pth python alpha_export.py--netu2netp--weightssaved_models/u2netp/u2netp.pth四、利用tensorrt编译onnx模型将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里里面有个tensorrt官方提供的模型编译工具即trtexec.exe 如下图然后使用以下指令编译onnx模型需要注意参数 --onnx 和 --saveEngine 可以设置为自定义路径例如--onnxd:/Data/xxx.onnx--saveEngined:/Data/xxx.trt./trtexec.exe--onnxu2net.onnx--saveEngineu2net.trt--buildOnly--minShapesimages:1x3x320x320--optShapesimages:4x3x320x320--maxShapesimages:8x3x320x320 ./trtexec.exe--onnxu2netp.onnx--saveEngineu2netp.trt--buildOnly--minShapesimages:1x3x320x320--optShapesimages:4x3x320x320--maxShapesimages:8x3x320x320五、编译执行u2net-tensorrt工程下载源码并编译gitclone https://github.com/FeiYull/tensorrt-alphagitfetch origingitcheckout legacy仿造2.3.4 新建工程与设置中新建、设置vs2019工程其中u2net需要将如下图多个文件添加到工程中红色框内文件来自TensorRT-Alpha/utils/蓝色框内文件来自TensorRT-Alpha/u2net/绿色框内文件来自TensorrRT安装路径下TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4\TensorRT-8.4.2.4\samples\common\logger.cpp如下图u2net项目编译成功从下面编译信息可以看到exe文件所在路径为D:\my_code_trt\TensorRT-Alpha-VS2019\TensorRT-Alpha\x64\Release\u2net.exe已启动生成…1------ 已启动生成: 项目: u2net, 配置: Release x64 ------1u2net.vcxproj -D:\my_code_trt\TensorRT-Alpha-VS2019\TensorRT-Alpha\x64\Release\u2net.exe生成: 成功1个失败0个最新0个跳过0个以下是命令行执行指令需要说明的是执行推理任务支持图片、视频、摄像头# infer image./u2net.exe--model../../data/u2net/u2net.trt--size320--batch_size1--img../../data/sailboat3.jpg--show--savePath# infer video./u2net.exe--model../../data/u2net/u2net.trt--size320--batch_size2--video../../data/people.mp4--show# infer camera./u2net.exe--model../../data/u2net/u2net.trt--size320--batch_size2--cam_id0--show这里给个示范例如我要在命令行使用u2net推理一张图.\u2net.exe--modelD:\ThirdParty\TensorRT-8.4.2.4\bin\u2netp.trt--size320--batch_size1--imgd:/Data/horse.jpg--show--savePaths:/效果如下图六、结束语都看到这里了觉得可以请点赞收藏有条件的去仓库点个star仓库https://github.com/FeiYull/TensorRT-Alpha/tree/legacy
