linux下 u2net tensorrt模型部署

news2025/1/23 21:11:13
  • TensorRT系列之 Windows10下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模型加速部署

    文章目录

    • ubuntu下u2net tensorrt模型部署
      • 一、Ubuntu18.04环境配置
      • 1.1 安装工具链和opencv
      • 1.2 安装Nvidia相关库
        • 1.2.1 安装Nvidia显卡驱动
        • 1.2.2 安装 cuda11.3
        • 1.2.3 安装 cudnn8.2
        • 1.2.4 下载 tensorrt8.4.2.4
        • 1.2.5 下载仓库TensorRT-Alpha并设置
      • 二、从u2net源码中导出onnx文件
      • 三、利用tensorrt编译onnx模型
      • 四、编译执行u2net-tensorrt工程
      • 五、结束语

ubuntu下u2net tensorrt模型部署

  • 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加速方法。
有源码!有源码!有源码! 不要慌,哈哈哈。
在这里插入图片描述

一、Ubuntu18.04环境配置

如果您对tensorrt不是很熟悉,请务必保持下面库版本一致。
请注意: Linux系统安装以下库,务必去进入系统bios下,关闭安全启动(设置 secure boot 为 disable)

1.1 安装工具链和opencv

sudo apt-get update 
sudo apt-get install build-essential 
sudo apt-get install git
sudo apt-get install gdb
sudo apt-get install cmake
sudo apt-get install libopencv-dev  
# pkg-config --modversion opencv

1.2 安装Nvidia相关库

注:Nvidia相关网站需要注册账号。

1.2.1 安装Nvidia显卡驱动

ubuntu-drivers devices
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-470-server # for ubuntu18.04
nvidia-smi

1.2.2 安装 cuda11.3

  • 进入链接: https://developer.nvidia.com/cuda-toolkit-archive
  • 选择:CUDA Toolkit 11.3.0(April 2021)
  • 选择:[Linux] -> [x86_64] -> [Ubuntu] -> [18.04] -> [runfile(local)]

    在网页你能看到下面安装命令,我这里已经拷贝下来:
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

cuda的安装过程中,需要你在bash窗口手动作一些选择,这里选择如下:

  • select:[continue] -> [accept] -> 接着按下回车键取消Driver和465.19.01这个选项,如下图(it is important!) -> [Install]

    在这里插入图片描述
    bash窗口提示如下表示安装完成
#===========
#= Summary =
#===========

#Driver:   Not Selected
#Toolkit:  Installed in /usr/local/cuda-11.3/
#......

把cuda添加到环境变量:

vim ~/.bashrc

把下面拷贝到 .bashrc里面

# cuda v11.3
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.3

刷新环境变量和验证

source ~/.bashrc
nvcc -V

bash窗口打印如下信息表示cuda11.3安装正常

nvcc: NVIDIA (R) Cuda compiler driver<br>
Copyright (c) 2005-2021 NVIDIA Corporation<br>
Built on Sun_Mar_21_19:15:46_PDT_2021<br>
Cuda compilation tools, release 11.3, V11.3.58<br>
Build cuda_11.3.r11.3/compiler.29745058_0<br>

1.2.3 安装 cudnn8.2

  • 进入网站:https://developer.nvidia.com/rdp/cudnn-archive
  • 选择: Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x
  • 选择: cuDNN Library for Linux (x86_64)
  • 你将会下载这个压缩包: “cudnn-11.3-linux-x64-v8.2.0.53.tgz”
# 解压
tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz

将cudnn的头文件和lib拷贝到cuda11.3的安装目录下:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

1.2.4 下载 tensorrt8.4.2.4

本教程中,tensorrt只需要下载\、解压即可,不需要安装。

  • 进入网站: 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 Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package
  • 你将会下载这个压缩包: “TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz”
# 解压
tar -zxvf TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
# 快速验证一下tensorrt+cuda+cudnn是否安装正常
cd TensorRT-8.4.2.4/samples/sampleMNIST
make
cd ../../bin/

导出tensorrt环境变量(it is important!),注:将LD_LIBRARY_PATH:后面的路径换成你自己的!后续编译onnx模型的时候也需要执行下面第一行命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/temp/TensorRT-8.4.2.4/lib
./sample_mnist

bash窗口打印类似如下图的手写数字识别表明cuda+cudnn+tensorrt安装正常
在这里插入图片描述

1.2.5 下载仓库TensorRT-Alpha并设置

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

设置您自己TensorRT根目录:

git clone https://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/cmake
vim common.cmake
# 在文件common.cmake中的第20行中,设置成你自己的目录,别和我设置一样的路径eg:
# set(TensorRT_ROOT /root/TensorRT-8.4.2.4)

二、从u2net源码中导出onnx文件

可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件:

# 下载u2net源码
https://github.com/xuebinqin/U-2-Net

安装 u2net环境

cd U-2-Net-master
pip install -r requirements.txt

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

cp alpha_export.py U-2-Net-master
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-alpha/data/u2net。

cd tensorrt-alpha/data/u2net
# 设置环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.2.4/lib

使用以下命令编译onnx模型:

# put your onnx file in this path:tensorrt-alpha/data/u2net
cd tensorrt-alpha/data/u2net
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.2.4/lib

../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=u2net.onnx   --saveEngine=u2net.trt   --buildOnly --minShapes=images:1x3x320x320 --optShapes=images:4x3x320x320 --maxShapes=images:8x3x320x320
../../../../TensorRT-8.4.2.4/bin/trtexec   --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
cd tensorrt-alpha/u2net
mkdir build
cd build
cmake ..
make -j10

按照需求执行推理,支持推理一张图片、在线推理视频文件,或者在线从摄像头获取视频流并推理。

## 320
# infer image
./app_u2net  --model=../../data/u2net/u2net.trt --size=320  --batch_size=1  --img=../../data/sailboat3.jpg  --show --savePath

# infer video
./app_u2net  --model=../../data/u2net/u2net.trt --size=320 --batch_size=2  --video=../../data/people.mp4  --show

# infer camera
./app_u2net  --model=../../data/u2net/u2net.trt --size=320 --batch_size=2  --cam_id=0  --show

例如:以下是u2net 部署后小模型的分割人像效果。在这里插入图片描述

再看一组发丝级别的分割效果:
在这里插入图片描述
在这里插入图片描述

五、结束语

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建Redis哨兵集群

目录 一、集群结构二、准备实例和配置三、启动四、测试 一、集群结构 这里我们搭建一个三节点形成的Sentinel集群&#xff0c;来监管之前的Redis主从集群。如图&#xff1a; 三个sentinel实例信息如下&#xff1a; 节点IPPORTs1192.168.239.1027001s2192.168.239.1027002s3…

RS232协议、RS485协议

RS232、RS485总线并不是单独的协议&#xff0c;这两种是依赖于串口的协议&#xff0c;这可以让他的抗干扰能力更强、提升传输速度。统一了接口标准。编程不受影响 2.RS232协议 RS232->TTL电平 常用电平转换芯片Max232 3.RS485协议 RS485采用差分信号进行传输&#xff0…

MyBatis进行单表多表查询以及其中的${}涉及的SQL注入

目录 回顾&#xff1a; 参数占位符#{}和${} ${}唯一使用地方 使用${}造成的SQL注入漏洞 like查询 mapper中接收结果的参数 resultType和resultMap​编辑 多表查询 回顾&#xff1a; 参数占位符#{}和${} #{} 占位符语法通常用于模板引擎或动态查询语句中。它是一种更加安全的…

C++产生未定义的行为的原因分析

前言 最近一直在做QT开发&#xff0c;编程环境是VS2017和QT5.11.2 经常遇到的问题就是&#xff0c;在VS中调试程序&#xff0c;前面都是正常运行的&#xff0c;但是当关闭窗口&#xff0c;退出程序的时候&#xff0c;VS会抛出一个异常 “未加载ntdll.pdb&#xff0c;触发了一…

Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集

Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集 一. 防火墙/IDS逃逸本章知识点本章选项一 .关于防火墙/IDS二. 报文分段三. 指定偏移大小四. IP欺骗五. 源地址欺骗六. 源端口欺骗七. 指定发包长度八. 目标主机随机排序九. MAC地址欺骗二. 信息收集本章知识点本章脚本一. 信息搜集…

iOS代码混淆工具推荐:IPA Guard详细介绍

iOS代码混淆工具推荐&#xff1a;IPA Guard详细介绍 目录 摘要&#xff1a; 引言 正文 1. IPA Guard概述 2. IPA Guard的功能特性 3. IPA Guard的混淆模式 4. 支持的语言 5. 使用场景 总结 参考资料 总结 参考资料 摘要&#xff1a; 了解并选择合适的iOS代码混淆工…

python 深度学习 解决遇到的报错问题7

目录 一、ValueError: unsupported pickle protocol: 5 二、报错protobuf 三、AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0 四、ModuleNotFoundError: No module named cartopy 五、ImportError: cannot import name COMMON_SAFE_A…

c语言小白如何入门?

c语言小白如何入门&#xff1f; 作为过来人&#xff0c;我觉得刚开始&#xff0c;先按照课本把每个知识点都弄懂&#xff0c;有不懂的地方&#xff0c;先尝试自己理解或借助互联网先搜一下&#xff0c;还是理解不了&#xff0c;就可以去找学得比较好的同学&#xff0c; 最近很…

datepicker设置中文

之前是这样 修改后是这样 需要添加的样式&#xff1a; $(#birthday).datepicker({minView: 1,//设置只显示到月份format : "yyyy-mm-dd",//日期格式language: zh-CN}); 原文链接&#xff1a;bootstrap-datepicker中文文档 - itxst.com

【Proteus仿真】【STM32单片机】电蒸锅温度控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、按键开关、蜂鸣器、DS18B20温度传感器&#xff0c;液位传感器、继电器控制加热保温装置等。 主要功能&#xff1a; 系统运行后&am…

WPF中在MVVM模式下实现导航功能

WPF中在MVVM模式下实现导航功能 一、利用TabControl 使用场景&#xff1a;项目小&#xff0c;不用考虑内存开销的问题。 实现方式1-手动指定ViewModel 分别定义3个UserControl作为View用于演示 <UserControl...><Grid><StackPanel Orientation"Vertic…

error: use of undeclared identifier ‘MainWindow

error use of undeclared identifier ‘mainwindow‘ semantic issue in QtCreator在 QtCreator 中错误使用未声明的标识符“_qtcreator 编译无错误,但是提示undeclared identifier_一定不摆烂的研究牲的博客-CSDN博客 我刚刚创建了新的 Qt Widgets 应用程序。我打开 mainwind…

门店没人气?线下实体店如何利用软文推广获客

电商的多样化发展逐步改变人们的消费模式&#xff0c;实体店获客越来越难&#xff0c;流量为王的时代实体店应该如何打响知名度&#xff0c;吸引客户呢&#xff1f;软文推广就是一个不错的方式&#xff0c;帮助商家以低于传统硬广的营销成本获取流量&#xff0c;接下来媒介盒子…

Crypto(1) 攻防世界Caesar

根据题目可以知道是个凯撒加密&#xff0c;准确的说是一个单表代替密码&#xff0c;因为后面可以知道偏移量不是3 一个接着一个试验&#xff1a; 注意加密时偏移量是向后移动&#xff0c;解密时偏移量是向前面移动的 &#xff01;&#xff01;&#xff01;

[NewStarCTF 2023] web题解

文章目录 WEEK1泄漏的秘密Begin of UploadBegin of HTTPErrorFlaskBegin of PHPR!C!E!EasyLogin WEEK2游戏高手include 0。0ez_sqlUnserialize&#xff1f;Upload again!R!!C!!E!! WEEK1 泄漏的秘密 打开题目&#xff0c;提示有敏感信息泄露 直接扫一下目录&#xff0c;发现有…

Verilog编译预处理

文章目录 一、简介二、宏定义define三、文件包含include四、时间尺度timescale五、条件编译ifdef参考 一、简介 编译预处理是Verilog HDL编译系统的一个组成部分。 Verilog HDL编译系统通常先对这些特殊的命令进行预处理&#xff0c;然后将预处理的结果和源程序一起在进行通常…

Python —— hou.Node class

Houdini内所有节点&#xff08;Object、SOP、COP等&#xff09;的基类&#xff0c;该类的实例对应houdini内的节点&#xff1b; 每个节点都有一个唯一的路径&#xff08;定义其在节点树内的位置&#xff09;&#xff1b;节点路径层次结构类似于文件系统中的文件和文件夹的层次结…

ant design DatePicker禁用之前的时间

1、代码 <DatePicker fieldProps{disabledDate: (current: any) > {return current < moment().startOf(day);}}/>2、效果

正点原子嵌入式linux驱动开发——Linux设备树

在前面系统移植的过程中多次提到“设备树”这个概念和创建自己的设备树。但是并没有在TF-A和uboot里说设备树的原理&#xff0c;因为相对比较复杂。 本章就来详细的谈一谈设备树。掌握设备树是Linux驱动开发人员必备的技能&#xff01;因为在新版本的Linux中&#xff0c;ARM相…

icg模块clock gating解析

// 两种形式&#xff1a; 与门形式 或门形式 三个用途&#xff1a; 用于关断时钟&#xff0c;降低功耗用于动态时钟切换是防止毛刺的产生用于时钟分频 解析&#xff1a;与门形式 解析&#xff1a;或门形式