win10下u2net 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模型加速部署

  • 更多(点我进去)…

    文章目录

    • 一、u2net简介
    • 二、Win10 TensorRT环境配置
      • 2.1 安装VS2019
      • 2.2 安装库
        • 2.2.1 安装Nvidia显卡驱动
        • 2.2.2 安装 cuda11.2
        • 2.2.3 安装 cudnn8.2.1
        • 2.2.4 下载 tensorrt8.4.2.4
        • 2.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)的卷积神经网络,其核心思想是探索比场景或图像周围区域更专注的物体或区域,因此非常适合于做抠图应用。这种算法主要利用由AlexNet,VGG,ResNet,ResNeXt,DenseNet等骨干网络提取的深度特征进行显著物体检测。

  • 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驱动、cuda,cudnn、opencv、tensorrt;
  • 2、创建属性表;
  • 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?lang=cn#
  • 依据实际情况选择,如下图是我的选择(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 -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 不需要手动设置环境变量,如下图,环境变量都是自动设置的。
请添加图片描述

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& debug)
nvinfer.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源码
git clone https://github.com/xuebinqin/U-2-Net
cd U-2-Net-master

安装 u2net环境

pip install -r requirements.txt

在u2net官方git页面下载pth格式模型,你将得到文件:u2net.pth和u2netp.pth;其中,u2netp.pth是小模型。然后使用tensorrt-alpha中提供的python脚本导出onnx,脚本路径:TensorRT-Alpha/u2net/alpha_export.py,具体导出指令如下:

python alpha_export.py --net=u2net --weights=saved_models/u2net/u2net.pth
python alpha_export.py --net=u2netp --weights=saved_models/u2netp/u2netp.pth

四、利用tensorrt编译onnx模型

将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里,里面有个tensorrt官方提供的模型编译工具,即:trtexec.exe 如下图:
在这里插入图片描述
然后使用,以下指令编译onnx模型,需要注意:参数 --onnx 和 --saveEngine 可以设置为自定义路径,例如:

 --onnx=d:/Data/xxx.onnx  --saveEngine=d:/Data/xxx.trt 
./trtexec.exe   --onnx=u2net.onnx   --saveEngine=u2net.trt   --buildOnly --minShapes=images:1x3x320x320 --optShapes=images:4x3x320x320 --maxShapes=images:8x3x320x320
./trtexec.exe   --onnx=u2netp.onnx  --saveEngine=u2netp.trt  --buildOnly --minShapes=images:1x3x320x320 --optShapes=images:4x3x320x320 --maxShapes=images:8x3x320x320

五、编译执行u2net-tensorrt工程

下载源码并编译

git clone https://github.com/FeiYull/tensorrt-alpha

仿造 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 ------
1>u2net.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 --size=320  --batch_size=1  --img=../../data/sailboat3.jpg  --show --savePath
# infer video
./u2net.exe  --model=../../data/u2net/u2net.trt --size=320 --batch_size=2  --video=../../data/people.mp4  --show
# infer camera
./u2net.exe  --model=../../data/u2net/u2net.trt --size=320 --batch_size=2  --cam_id=0  --show

这里给个示范,例如我要在命令行使用u2net推理一张图:

.\u2net.exe --model=D:\ThirdParty\TensorRT-8.4.2.4\bin\u2netp.trt --size=320  --batch_size=1  --img=d:/Data/horse.jpg  --show --savePath=s:/

效果如下图:
在这里插入图片描述

六、结束语

都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169699.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Chrome的新“IP保护”功能将隐藏用户的IP地址

导语:在保护用户隐私方面,Google Chrome正在测试一项名为“IP保护”的新功能。通过使用代理服务器掩盖用户的IP地址,这项功能能够增强用户的隐私保护。在意识到IP地址可能被用于秘密追踪后,Google希望在确保用户隐私的同时&#x…

云原生微服务实战 Spring Cloud Alibaba 之 Nacos

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

【proteus】8086仿真/汇编:创建项目并添加汇编代码文件

1.创建好新项目 2.点击source code 弹出VSM 3. 4.注意两个都不勾选 可以看到schematic有原理图出现 5. 再次点击source code 6.project/project settings,取消勾选embed 7. add 8.输入文件名保存后: 注意:proteus不用写dos的相关语句 。

UA硬件安装环境

v2301硬件安装环境 Opcenter Execution Foundation 计算机至少应具有以下特征: 操作系统 RAM :最小 12 GB ,建议 16 GB CPU :最小 2 vCPU (建议频率 > 2.5 GHz ) HDD :高达 120 GB 的…

Node学习笔记之MySQL基本使用

使用 SQL 管理数据库 其实写接口简单来说就是操作数据库数据,所以我们需要学会数据库的增、删、查、改等基本操作 1. 什么是 SQL SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置1.1 配置文件1.2 基本配置 2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装插件3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处,请根据实际情况选择修改哪个。 (1) 全局配置文件&am…

实验数据旋转角度处理过程中的常见问题

问题 做实验过程中使用 EM tracker 测量自己机器人末端旋转时的角度。 尾部 设置EMTracker 1,作为固定基准,其轴线与机器人中心轴线近似重合,EM Tracker 2 固定在机器人活动关节上,两者轴线夹角近似为机器人旋转角度。论文尚未发…

Python----range方法(函数)

range 英 /reɪndʒ/ n. (变动或浮动的)范围,界限;视觉(或听觉)范围;v. (在一定的范围内)变化,变动;(按一定位置或顺序&#x…

LeetCode算法心得——元素和最小的山形三元组 II(预处理和简单动规)

大家好,我是晴天学长,枚举+简单的动态规划思想,和前段时间的周赛题的写法可以说一模一样,像这种类似3元的题,要控制时间复杂度的话,只能枚举一个变量,所以要前缀和或者动规等待。需要…

FPGA时序分析与约束(6)——综合的基础知识

在使用时序约束的设计过程中,综合(synthesis)是第一步。 一、综合的解释 在电子设计中,综合是指完成特定功能的门级网表的实现。除了特定功能,综合的过程可能还要满足某种其他要求,如功率、操作频率等。 有…

深度学习中的不确定性综述

领域学者: http://www.gatsby.ucl.ac.uk/~balaji/ 论文标题: A Survey of Uncertainty in Deep Neural Networks 论文链接: https://arxiv.org/pdf/2107.03342.pdf 概要 在过去的十年中,神经网络几乎遍及所有科学领域&#x…

mysqld: File ‘./binlog.index‘ not found (OS errno 13 - Permission denied) 问题解决

问题背景 Centos7 安装Mysql 8后启动时遇到的问题,看了好几个博客方案无效,搞了半小时才找到正解,在此次进行记录。 在此假设你已经修改了对应目录的权限,比如配置的mysql data目录初始化后已经执行了chown -R mysql:mysql /XXX/…

leetcode:面试题 17.04. 消失的数字(找单身狗/排序/公式)

一、题目: 函数原型:int missingNumber(int* nums, int numsSize) 二、思路: 思路1 利用“找单身狗”的思路(n^n0;0^nn),数组中有0-n的数字,但缺失了一个数字x。将这些数字按位异或0…

02-2、PyCharm中文乱码的三处解决方法

PyCharm中文乱码 修改处1: 修改处2:这个也没用 在Pycharm中可以创建一个模版,每次新建python文件时Pycharm会默认在前两行生成utf-8 #!/user/bin/env python3 # -- coding: utf-8 -- 还是乱码 再在这里设置以下 添加 : -Dfi…

031-第三代软件开发-屏幕保护

第三代软件开发-屏幕保护 文章目录 第三代软件开发-屏幕保护项目介绍屏幕保护 关键字: Qt、 Qml、 MediaPlayer、 VideoOutput、 function 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language&#…

交换机基础(四):MSTP负载均衡配置案例

如图所示是某个企业内部核心网络的结构图,目前企业中有20个VLAN, 编号为VLAN1~VLAN20, 为了确保内部网络的可靠性,使用 了冗余链路和MSTP 协议。为了能更好地利用网络资源和带宽,现管理员希望通过配置MSTP 的负载均衡实现网络带宽…

测试C#调用Windows Media Player组件

新建基于.net framework的Winform项目,可以通过添加引用的方式选择COM组件中的Windows Media Player组件,如下图所示:   也可以在VS2022的工具箱空白处点右键,选择“选择项…”菜单。   在弹出的选择工具箱项窗口中&#xf…

力扣刷题 day54:10-24

1.十进制整数的反码 每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N 0 外,任何二进制表示中都不含前导零。 二进制的反…

NOIP2023模拟1联测22 黑暗料理

NOIP2023模拟1联测22 黑暗料理 题目大意 自己看 思路 两个数相加能够产生质数的情况就是:11 或者 偶数质数 那么 1 1 1 不能保留超过一个 建一个图,原点连向所有奇数点,所有偶数点连向汇点,奇数点和偶数点的和为奇数的就相连 …

蜣螂优化(DBO)求解置换流水车间调度问题(PFSP)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…