【YOLOv5模型部署】——TensorRT推理引擎安装与使用基于Flask的项目部署

news2024/12/21 19:57:05

声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载!

温馨提示:对于我的电脑没有Nvidia的独显,只有Intel的集显,最后导出时无法识别Nvidia显卡设备!!就没成功!! 如果你的torch与我一样之前安装的CPU版本,那么很可能最后与我一样!


一、模型部署概述

算法要落地到实际应用,这就叫模型部署

模型部署是将训练好的机器学习或深度学习模型集成到实际应用中,使其能够对外提供服务的过程。只有将模型部署到实际应用中,才能发挥其作用,为企业或个人带来实际效益。

主要包括在线部署离线部署两种。

  • 在线部署:是指将训练好的模型直接部署到实时应用场景中,以实时处理和预测数据。其主要优势在于实时性高效性。其算法原理是将训练好的模型加载到内存中,然后通过输入数据流进行处理和预测。

具体步骤:①加载训练好的模型文件、②将输入数据流转换为模型所需的格式、③通过模型进行处理和预测,④输出预测结果。

  • 离线部署:则是将训练好的模型部署到非实时应用场景中,以批量处理和预测数据。它的主要优势在于数据安全计算资源利用率。离线部署的算法原理是将训练好的模型保存到磁盘中,然后通过批量输入数据进行处理和预测。

具体步骤包括:①训练好的模型保存到磁盘中、②将批量输入数据加载到内存中、③通过模型进行处理和预测,④将预测结果保存到磁盘中。


大模型小模型的部署方式区别:

  • 大模型通常参数较多、层数较深,因此具有更强的表达能力和更高的准确度。但是,这也意味着大模型需要更多的计算资源和时间来训练和推理。在部署大模型时,往往需要考虑到服务器的性能、内存和存储等要求。

常见的部署方式包括将模型部署为Web服务,或者将模型打包成Docker镜像后部署到云服务器上。这些方式可以充分利用云端的强大计算资源,满足大模型对性能的需求。

  • 小模型通常参数较少、层数较浅,具有轻量级、高效率、易于部署等优点。这些模型适用于数据量较小、计算资源有限的场景,例如移动端应用嵌入式设备等。

在部署小模型时,可以考虑将模型直接部署到这些设备上,或者使用一些轻量级的框架来实现。这样既可以节省计算资源,又可以实现快速响应和实时处理。


训练框架推理引擎的不同角色:

  • 训练框架主要用于模型的训练阶段,它提供了构建、训练和验证机器学习模型的工具和方法。训练框架通常包含了大量的优化算法和技巧,以及丰富的数据处理和模型调优功能,帮助研究人员和开发者更高效地训练出高质量的模型。
  • 当模型训练完成后,需要将其部署到实际应用中进行推理时,就需要使用推理引擎了。

推理引擎是实施问题求解的核心执行机构,它主要负责在设备端高效地运行模型,进行前向推理。与训练框架相比,推理引擎更关注于模型的执行效率和性能优化,以满足实际应用中对于实时性、准确性和资源消耗等方面的要求。


二、TensorRT推理引擎

TensorRT是NVIDIA开发的一种高性能深度学习推理优化器和运行时加速库(引擎),主要用于加速深度学习应用在生产环境中的部署

目标是为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可以支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,与NVIDIA的GPU结合,它能在这些框架中进行快速和高效的部署推理。

模型部署时不再使用训练时的Torch框架,主要有以下几个原因:

  • 资源消耗与性能:训练阶段,为了加快训练速度,通常会使用多GPU分布式训练,这在资源消耗上是非常大的。然而,在实际部署时,出于成本考虑,往往不会使用过多的GPU资源,甚至会选择使用CPU进行模型的推理。

TensorRT正是针对这种情况,通过优化内存使用和网络结构,减少推理过程中的内存消耗,提高系统整体效率,从而实现低延迟和高吞吐量的推理。

  • 跨平台支持:TensorRT支持主流的GPU架构,如NVIDIA的CUDA架构,这使得它可以在不同平台上部署和运行优化后的模型,增加了模型的灵活性和可移植性。
  • 模型优化:TensorRT提供了灵活的API和工具,可以根据需求进行网络结构的剪枝、融合和量化,实现模型的定制化优化。此外,它还能针对特定的硬件平台(如NVIDIA GPU)优化模型,从而实现更快的推理速度。

1、环境安装

①CUDA

下载链接如下:

CUDA-11-6-0下载icon-default.png?t=N7T8https://developer.nvidia.com/cuda-11-6-0-download-archive

选择对应电脑系统的版本,右下角下载,下载后安装一直点“Next”即可!这样安装完一般都在C盘的以下文件路径:


②CUDNN

下载链接如下:

CUDNN下载icon-default.png?t=N7T8https://developer.nvidia.com/rdp/cudnn-archive

这里下载上面这个压缩包,解压复制里面的4个文件:

将这4个文件粘贴在CUDA的路径下:


若前两步安装正确,在终端中输入nvcc -V会显示如下:


③TensorRT

TensorRT安装icon-default.png?t=N7T8https://developer.nvidia.com/nvidia-tensorrt-download

下载解压后里面的文件如下:

这里的python文件夹里面有一些预编译好的库文件,需要根据我们的python版本用pip进行安装。具体操作如下:

  • 查看我们的python版本为3.8.19,则需要pip安装第三个cp38的版本
  • 从文件路径处输入“cmd”回车直接可进入目标目录的cmd窗口:
  • 激活环境后直接输入pip命令+文件名即可安装对应cp38版本的tensorrt:

此外lib文件夹中的文件如下,需要把它们复制粘贴在刚才CUDA安装位置的bin文件夹里:

粘贴位置如下(C盘):


④zlibwapi.dll

若之前训练安装的是CU116版本的Pytorch,可不必这一步!!其他版本的似乎没有这个文件

zLibDll文件icon-default.png?t=N7T8https://www.winimage.com/zLibDll/

将压缩包里zlibwapi.dll这个应用扩展程序也粘贴在CUDA的bin文件夹中:


2、模型导出

①pip install onnx

打开yolov5的项目文件夹的export.py文件,可见上面注释“Format”支持导出很多种格式,默认的模型格式是Pytorch。

“Requirements”提示我们需要安装requirements.txt和onnx,requirements.tx之前已经有了,onnx可以理解为一个“中间格式适配器”,很多格式都可以先转换为onnx格式然后再转换为其他格式:

下面安装下onnx:

pip install onnx


②导出命令

export.py的导出使用方法注释“Usage”中也有,include后面的根据“Format”第二列中选择对应格式的字段,比如TensorRT格式对应engine

终端中输入以下代码运行导出,发现报错说“必须运行在GPU”上:

再代码后指定设备--device 0即可:

python export.py --weights yolov5s.pt --include engine --device 0

对于我的电脑没有Nvidia的独显,只有Intel的集显,所以这里无法识别设备!!就没成功!! 


某站作者大大(@你可是处女座啊)导出完成后的界面如下,给出了不同的用法如detect.py、val.py、torchhub用法等:

yolov5s.pt权重文件所在目录会出现一个名为yolov5s.engine的对应tenorrt格式的权重文件。


③torch和tensorrt效果对比

  • 使用torch运行detect.py

运行速度:

  • 使用tensorrt运行detect.py(权重文件改为yolov5s.engine即可)

运行效果:


发现使用tensorrt的时间还臂用torch的时间慢了0.7ms,这是为什么呢?

因为torch的输入维度是384x640,而tensorrt的输入维度是640x640(模型在部署落地应用时一般输入维度都是固定的,所以tensorrt在加速时维度是定死的,不可改的),之所以是640x640是因为导出tensorrt格式时为指定维度:

python export.py --weights yolov5s.pt --include engine --device 0

若想导出tensorrt格式时将维度定为384x640以便与torch的检测速度对比,则重新导出:

python export.py --weights yolov5s.pt --include engine --device 0 img 384 640
  • 重新使用tensorrt运行detect.py文件(注意指定对应的权重文件),结果如下,可见速度提升了不少:


拓:若想导出tensorrt格式时指定半精度推理,可用下面导出方法:

python export.py --weights yolov5s.pt --include engine --device 0 img 384 640 --half

导出后,再次运行detect.py文件(注意指定对应的权重文件),结果如下,速度又提升了点:

不只是导出tensor格式时可指定img大小,运行detect.py时也可指定img的维度,只是该维度不能超过导出时最大的384x640,例如运行detetc.py时指定img192x640:

可发现检测速度又有了提升:


三、基于Flask的YOLOv5项目部署

1、基于文件的模型检测

 主要文件:

2、基于图像的模型检测

这里由于上面受显卡限制,不再详细写过程,可参考原视频:

基于Flask的模型部署icon-default.png?t=N7T8http:// https://www.bilibili.com/video/BV1Mk4y1i7v1/?share_source=copy_web&vd_source=8f7729bb666414c7bb823ad003dc6e38


往期精彩

STM32专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/A3BJ2

OpenCV-Python专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/jFJWe

AI底层逻辑专栏(9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/6BVhM

机器学习专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/ALlLlSimulink专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/csDO4电机控制专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7 

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

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

相关文章

Java小白一文讲清Java中集合相关的知识点(四)

LinkedList底层结构 LinkedList底层实现了双向链表和双向队列特点可以添加任意元素,包括null,元素可以重复线程不安全,没有实现同步 LinkedList底层操作机制 LinkedList底层维护了一个双向链表LinkedList中维护了两个属性first和last分别指向首结点和…

如何启动vue ui,快速创建vue项目

1.查看自己是否已经安装了vue3.0脚手架版本,打开cmd命令框输入vue -V(大写为查看,此处查看的是脚手架的版本)。如果没有提示版本,而是命令不存在...则要进行下面的1.1操作 1.1安装Vue CIL,如果已安装,此步忽略。安装完…

计算机毕业设计选题推荐-中华诗词文化交流平台-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

快速搭建和运行Spring Boot项目的简易指南

对于非Java开发的后端开发人员而言,即便未曾接触过Java,也可能听说过Spring Boot这一框架。若想要快速搭建并运行一个Spring Boot项目,可以遵循以下步骤: 环境准备 **安装Java JDK:**确保您的开发环境中安装了Java J…

Android Studio编译时各类型网络超时优化方案

我们国家有很多长城,我觉得最重要的除了大家耳熟能详的西起嘉峪关,东至山海关的万里长城,还有一个叫GFW的国家长城防火墙,这个防火墙起初仅是为了禁止用户访问政治敏感信息,后来逐渐强大。。。目前最新进展是我们已和世…

142.环形链表二-力扣

142. 环形链表 II - 力扣(LeetCode) struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fasthead;struct ListNode *slowhead;while(fast && fast->next){fast fast->next->next;slow slow->next;if(fasts…

Python 使用中点查找矩形的角(Find Corners of Rectangle using mid points)

考虑一个矩形 ABCD,我们给出了边 AD 和 BC 中点(分别为 p 和 q)的坐标以及它们的长度 L(AD BC L)。现在给定参数,我们需要打印 4 个点 A、B、C 和 D 的坐标。 例子: 输入:p (1,…

人工智能在病理组学和精准医疗中的最新研究进展|顶刊速递·24-09-05

小罗碎碎念 本期推文主题:AI病理精准医疗 这段时间一直在尝试不同的学习道路,兜兜转转还是觉得,每天跟踪最新文献其实是很有必要的,并且这些最新的文献不一定非要与自己专业完全匹配,不然就会把自己困住。 这期推文和…

文章润色太费时?试试这5款ai写作工具

你是否曾梦想拥有一个私人编辑,随时随地帮你打磨文字,让写作变得既轻松又专业? 告诉你一个好消息,现在有5款AI写作工具,它们就拥有这样的能力!这些AI助手擅长润色文章,优化语法,甚至…

微信小程序使用nfc读取

** 微信小程序开发nfc读取 ** &#xff08;注释微信官方api&#xff0c;仅支持安卓&#xff0c;不支持苹果ios&#xff09;官方文档 上代demo <template><div class"nfc"><u-navbar leftIcon"arrow-leftward" bgColor"#ffffff&qu…

网络安全服务基础Windows--第12节-域与活动目录

工作组 在Windows环境中配置⼯作组相对简单&#xff0c;适合⼩型⽹络环境&#xff0c;如家庭或⼩型办公室⽹络。⼯作组通过简单的⽹络共享和本地管理来实现资源共享&#xff0c;⽽不依赖于中央控制的服务器。 ● 定义&#xff1a;⼯作组是⼀种对等⽹络模型&#xff0c;在这种…

ASP源码 发布站改制最终版 原来3000ok网通大站的源程序

ASP源码 新服发布站改制最终版 原来3000ok网通大站的源程序 这个是非常完整 兼容性很强的。 后台地址&#xff1a;http://你的域名/admin 账号&#xff1a;admin 密码&#xff1a;admin 会员发布地址&#xff1a;http://你的域名/gamevip 源码下载&#xff1a;https://downlo…

【网络安全】IIS未授权访问敏感数据

未经许可,不得转载。 文章目录 正文攻击方法正文 IIS 是 Internet Information Services 的缩写,是微软开发的一个基于 Windows 的 Web 服务器。 HAProxy 是一个知名的高性能负载均衡器和代理服务器。它通常用于将流量分发到多个后端服务器,常与 Web 服务器(包括 IIS)一…

智匠MindCraft:一站式AI模型API调用平台

智匠MindCraft提供了一站式的AI模型解决方案&#xff0c;通过单一API接口&#xff0c;用户可以轻松调用多种主流AI模型&#xff0c;涵盖大语言模型、图片生成、视频生成、语音识别和语音合成等多个领域。以下是该平台的详细介绍&#xff1a; 1、平台概览 主页访问&#xff1a…

基于Qt设计的人脸课堂考勤机系统(219)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能1.2 设计思路【1】系统架构设计【2】流程设计【3】关键技术实现【2】整体构架1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】项目背景1.4 开发工具的选择1.5 系统框架图1.6 系统功…

How to apply streaming in azure openai dotnet web application?

题意&#xff1a;"如何在 Azure OpenAI 的 .NET Web 应用程序中应用流式处理&#xff1f;" 问题背景&#xff1a; I want to create a web api backend that stream openai completion responses. "我想创建一个 Web API 后端&#xff0c;用于流式传输 OpenAI…

计算机领域学术会议(ICCBD+AI 2024)

第五届计算机、大数据与人工智能国际会议&#xff08;ICCBDAI 2024&#xff09;将于2024年11月1日-3日在江西景德镇召开。 本届会议由景德镇陶瓷大学主办&#xff0c;西安交通大学、暨南大学、南京邮电大学、景德镇学院、ELSP&#xff08;爱迩思出版社&#xff09;、ESBK国际学…

《中国储运》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《中国储运》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《中国储运》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中储发展股份有限公司 主办单位&…

Openwrt远程唤醒Windows

OpenWrt 安装 luci-app-wol 安装 luci-app-wol&#xff0c;按下一节配置好Windows和主板。 电脑设置 参考 主板BIOS如何设置启用网络唤醒(WOL: Wake On Lan)功能远程唤醒远程控制——Windows 注意 关闭 “电源选项”下“电源按钮”的“启用快速启动”

微软的Teams只有会议号和密码怎么参会呢

客户只给了个会议邀请的截图&#xff0c;没有办法获取直接的参会链接&#xff0c;只能通过图上的会议号码和密码来进入会议&#xff0c;如果这样必须要先登录&#xff0c;但我不想登录怎么办呢&#xff1f; 可以通过以下链接来实现&#xff1a; https://www.microsoft.com/zh-c…