tensorrt部署YOLOv5模型记录【附代码,支持视频检测】上

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 笔记

环境说明


系统:windows 10

VS2017

TensorRT-8.2.4.2

CUDA 10.2

显卡1650

看自己cuda的版本可以打开cmd,输入nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:32:27_Pacific_Daylight_Time_2019
Cuda compilation tools, release 10.2, V10.2.89

关于cuda的安装网上有很多,这里不再说明【但要注意版本的对应,还有装CUDA10.2一定要装上官网提供的两个补丁!】


可以一个电脑上装多个版本的cuda,比如我的电脑就是装了cuda10.0和cuda10.2,只需要切换环境变量即可。


TensorRT下载与配置



进入官网应该如果没有账号就注册一个,登录以后才可以下载,会有如下界面

10.png

选择你想要的下载的版本【注意和自己的cuda对应】

比如我下载的版本为8.2.4.2,cuda版本10.2,cudnn8.2

11.png

下载好以后解压


1. 将 TensorRT-8.2.4.2\include中头文件 copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include



2. 将TensorRT-8.2.4.2\lib 中所有lib文件 copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64



3. 将TensorRT-8.2.4.2\lib 中所有dll文件copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin


VS2017配置


用VS2017测试一下Tensorrt是否安装成功


打开【TensorRT-8.2.4.2\samples\sampleMNIST\sample_mnist.sln】


打开项目后,右键项目》属性》配置属性》常规,检查下我画红框的地方【VS2015不一样】

12.png

然后点VC++目录,在右侧常规中的可执行文件目录中,将TensorRT中的lib库文件路径填写进去。填写进去以后要点击右下角的应用

13.png

再点C/C++,右侧的附加包含目录,将tensorrt的bin目录路径填写上去,然后点右下角应用

14.png

再点击链接器》输入,在右侧的附加依赖项中将TensorRT下lib库中的.lib放进去 然后点击应用。

15.png

我的附加依赖项中包含以下lib文件【可以参考以下】,就把你lib文件下的lib文件全放进来,其中cudnn.lib,cublas.lib,cudart.lib,nvrtc.lib,是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64 目录下的


nvinfer.lib

nvinfer_plugin.lib

nvonnxparser.lib

nvparsers.lib

cudnn.lib

cublas.lib

cudart.lib

nvrtc.lib


全部设置好,回到VS界面中,右键项目生成


16.png

生成项目以后,会在F:\TensorRT-8.2.4.2\bin  目录下生成一个sample_mnist.exe文件,然后用cmd进行该路径下,运行这个exe文件,出现以下案例就说明安装成功了。

&&&& RUNNING TensorRT.sample_mnist [TensorRT v8204] # F:\TensorRT-8.2.4.2\bin\sample_mnist.exe
[05/27/2022-15:16:25] [I] Building and running a GPU inference engine for MNIST
[05/27/2022-15:16:26] [I] [TRT] [MemUsageChange] Init CUDA: CPU +396, GPU +0, now: CPU 3492, GPU 890 (MiB)
[05/27/2022-15:16:27] [I] [TRT] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 3516 MiB, GPU 890 MiB
[05/27/2022-15:16:27] [I] [TRT] [MemUsageSnapshot] End constructing builder kernel library: CPU 3623 MiB, GPU 926 MiB
[05/27/2022-15:16:28] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +193, GPU +70, now: CPU 3800, GPU 996 (MiB)
[05/27/2022-15:16:29] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +178, GPU +86, now: CPU 3978, GPU 1082 (MiB)
[05/27/2022-15:16:29] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-15:16:29] [I] [TRT] Local timing cache in use. Profiling results in this builder pass will not be stored.
[05/27/2022-15:16:43] [I] [TRT] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.
[05/27/2022-15:16:45] [I] [TRT] Detected 1 inputs and 1 output network tensors.
[05/27/2022-15:16:45] [I] [TRT] Total Host Persistent Memory: 5440
[05/27/2022-15:16:45] [I] [TRT] Total Device Persistent Memory: 0
[05/27/2022-15:16:45] [I] [TRT] Total Scratch Memory: 0
[05/27/2022-15:16:45] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 1 MiB, GPU 16 MiB
[05/27/2022-15:16:45] [I] [TRT] [BlockAssignment] Algorithm ShiftNTopDown took 0.0466ms to assign 3 blocks to 8 nodes requiring 57857 bytes.
[05/27/2022-15:16:45] [I] [TRT] Total Activation Memory: 57857
[05/27/2022-15:16:45] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +8, now: CPU 4472, GPU 1250 (MiB)
[05/27/2022-15:16:45] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +0, GPU +10, now: CPU 4472, GPU 1260 (MiB)
[05/27/2022-15:16:45] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-15:16:45] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in building engine: CPU +0, GPU +4, now: CPU 0, GPU 4 (MiB)
[05/27/2022-15:16:45] [I] [TRT] [MemUsageChange] Init CUDA: CPU +0, GPU +0, now: CPU 4398, GPU 1164 (MiB)
[05/27/2022-15:16:45] [I] [TRT] Loaded engine size: 1 MiB
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +59, GPU +66, now: CPU 4457, GPU 1232 (MiB)
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +3, GPU +8, now: CPU 4460, GPU 1240 (MiB)
[05/27/2022-15:16:46] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in engine deserialization: CPU +0, GPU +1, now: CPU 0, GPU 1 (MiB)
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +79, GPU +66, now: CPU 4372, GPU 1198 (MiB)
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +2, GPU +8, now: CPU 4374, GPU 1206 (MiB)
[05/27/2022-15:16:46] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-15:16:46] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +0, now: CPU 0, GPU 1 (MiB)
[05/27/2022-15:16:46] [I] Input:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@.*@@@@@@@@@@
@@@@@@@@@@@@@@@@.=@@@@@@@@@@
@@@@@@@@@@@@+@@@.=@@@@@@@@@@
@@@@@@@@@@@% #@@.=@@@@@@@@@@
@@@@@@@@@@@% #@@.=@@@@@@@@@@
@@@@@@@@@@@+ *@@:-@@@@@@@@@@
@@@@@@@@@@@= *@@= @@@@@@@@@@
@@@@@@@@@@@. #@@= @@@@@@@@@@
@@@@@@@@@@=  =++.-@@@@@@@@@@
@@@@@@@@@@       =@@@@@@@@@@
@@@@@@@@@@  :*## =@@@@@@@@@@
@@@@@@@@@@:*@@@% =@@@@@@@@@@
@@@@@@@@@@@@@@@% =@@@@@@@@@@
@@@@@@@@@@@@@@@# =@@@@@@@@@@
@@@@@@@@@@@@@@@# =@@@@@@@@@@
@@@@@@@@@@@@@@@* *@@@@@@@@@@
@@@@@@@@@@@@@@@= #@@@@@@@@@@
@@@@@@@@@@@@@@@= #@@@@@@@@@@
@@@@@@@@@@@@@@@=.@@@@@@@@@@@
@@@@@@@@@@@@@@@++@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[05/27/2022-15:16:46] [I] Output:
0:
1:
2:
3:
4: **********
5:
6:
7:
8:
9:
&&&& PASSED TensorRT.sample_mnist [TensorRT v8204] # F:\TensorRT-8.2.4.2\bin\sample_mnist.exe

如果运行exe报错,比如以下错误

[ltWrapper.cpp::nvinfer1::rt::CublasLtWrapper::setupHeuristic::327] Error Code 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCESS failed. )
[01/19/2022-11:26:08] [E] [TRT] 2: [builder.cpp::nvinfer1::builder::Builder::buildSerializedNetwork::609] Error Code 2: Internal Error (Assertion enginePtr != nullptr failed. )

这可能是cuda10.2和Tensorrt兼容问题,需要安装cuda10.2补丁包(官网有),如果你确定已经安装了,可以再重新生成一下项目再试试。


YOLOV5 部署


针对YOLOv5 6.0版本进行部署


以yolov5s.pt为例,下载yolov5 6.0 和上述链接中的代码到本地:


根据基于上述参考链接中的代码,本项目添加了视频检测功能,可替换自己的类。同时为了可以读取类的txt文件,在项目中添加了一个获得类的函数

std::vector<std::string> get_classes(std::string &path)
{
  std::vector<std::string> classes_name;
  std::ifstream infile(path);
  if (infile.is_open())
  {
    std::string line;
    while (getline(infile,line))
    {
      classes_name.emplace_back(line);
    }
  }
  return classes_name;
}
git clone -b v6.0 https://github.com/ultralytics/yolov5.git
https://github.com/YINYIPENG-EN/YOLOv5TensorRT.git

生成wts模型

将yolov5s.pt 文件放到yolov5文件夹下

17.png

运行:

-w参数为输入pt权重模型路径,-o参数为输出wts模型的路径。将会在当前文件夹下生成yolov5s.wts文件,这个文件是用来之后转换成tensorrt的序列化模型

python gen_wts.py -w yolov5s.pt -o yolov5s.wts

image.png


相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
目录
相关文章
|
关系型数据库 MySQL 数据库
Docker部署Mysql数据库详解
Docker是一种流行的容器化平台,可以简化应用程序的部署和管理。在本博客中,我们将探讨如何使用Docker部署两个广泛使用的数据库:MySQL。我们将提供详细的步骤和相应的命令,以帮助您轻松地在Docker容器中设置和运行这个数据库。
2593 0
|
机器学习/深度学习 存储 并行计算
一篇就够:高性能推理引擎理论与实践 (TensorRT)
本文分享了关于 NVIDIA 推出的高性能的深度学习推理引擎 TensorRT 的背后理论知识和实践操作指南。
14330 9
一篇就够:高性能推理引擎理论与实践 (TensorRT)
|
XML 数据格式 Python
旋转标注工具roLabelImg使用教程
旋转标注工具roLabelImg使用教程
旋转标注工具roLabelImg使用教程
|
7月前
|
存储 XML JSON
Activiti 7 核心数据库表概览及流程生命周期中的作用
Activiti 7 工作流引擎通过约25张核心数据库表实现流程定义、运行时状态、历史记录与身份数据的存储。表名以ACT_开头,后跟标识用途的字母组合(如RE表示Repository静态信息,RU表示Runtime动态数据)。流程启动时在运行时表登记数据,任务执行中更新关联信息,结束时清理运行时记录并完善历史记录。各表分工明确且逻辑紧密关联,确保高效运行与完整留痕的平衡。掌握这些表的作用和关联有助于深入理解Activiti底层原理及进行高级应用开发。
493 0
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
20280 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
4721 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
机器学习/深度学习 传感器 算法
单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法
本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet、SMOKE等。 基于深度信息的方法 涉及到模型包括:MF3D、MonoGRNet、D4LCN、MonoPSR等。 基于点云信息的方法 涉及到模型包括:Pseudo lidar、DD3D、CaDDN、LPCG等。
2579 2
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
19447 0
|
并行计算 计算机视觉 C++
部署实战 | 手把手教你在Windows下用TensorRT部署YOLOv8(一)
部署实战 | 手把手教你在Windows下用TensorRT部署YOLOv8(一)
1866 0
|
PyTorch 开发工具 算法框架/工具
yolo系列的ONNX部署(C++)【适用于v4\v5\v5-6.1\v7】
yolo系列的ONNX部署(C++)【适用于v4\v5\v5-6.1\v7】
1767 0
yolo系列的ONNX部署(C++)【适用于v4\v5\v5-6.1\v7】

热门文章

最新文章