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模型加速部署
更多(点我进去)…
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。
三步解决win环境配置:
需要Microsoft账号,如果您有别的途径下载安装也可以。
注:Nvidia相关网站需要注册账号。
nvidia-smi
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 不需要手动设置环境变量,如下图,环境变量都是自动设置的。
一般地,Visual Studio 2019,一个库对应两个属性表文件,分别对应:vs2019的debug模式和release模式,例如:本文中OpenCV创建了这两种。而TensorRT和CUDA只需要创建一种属性表(适用以上两种模式)。
创建opencv库debug属性表:
右击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个步骤:
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的坑),在后文提到。属性表做到了一次新建,到处使用。
这一节演示如何新建vs工程,如何设置工程,是通用方法。适用于仓库所有模型源码。
如下图,打开vs2019,点击:文件 -> 新建-> 项目。
选择:空项目 -> 下一步。
选择创建。
如下图,现在将工程设置为:Release X64。
如下图,选择:属性管理器 -> Release | x64 -> 添加现有属性表,把上一节生成的三个RleaseX64属性表添加进来。
添加进来后样子如下图:
TensorRT项目包含c++和cuda c代码,通俗讲,c++代码文件格式为:
可以直接从网盘下载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
将上一个章节中导出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
下载源码并编译
git clone https://github.com/FeiYull/tensorrt-alpha
仿造 2.3.4 新建工程与设置 中新建、设置vs2019工程;其中,u2net需要将如下图多个文件添加到工程中:
如下图,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