模型部署系列:10x速度提升,Yolov8检测模型稀疏化——CPU上超500FPS

YOLOv8由广受欢迎的YOLOv3和YOLOv5模型的作者 Ultralytics 开发,凭借其无锚设计将目标检测提升到了一个新的水平。YOLOv8 专为实际部署而设计,重点关注速度、延迟和经济性。

[1] 详细内容请参阅 MarkAI Blog
[2] 更多资料及工程项目请关注 MarkAI Github
[3] 通关感知算法面试请Star 2024年千道算法面试题综述

在本文中,您将了解 YOLO 的最新版本以及如何将其与 DeepSparse 一起部署以获得 CPU 上的最佳性能。我们通过在 AWS 上部署模型来说明这一点,在 YOLOv8s(小型版本)上实现 209 FPS,在 YOLOv8n(纳米版本)上实现 525 FPS,比 PyTorch 和 ONNX 运行时加速 10 倍!
在这里插入图片描述

有关 DeepSparse 如何通过稀疏性实现加速的详细指南,请查看
YOLOv5 with Neural Magic’s DeepSparse。

YOLOv8 用法

新的ultralytics包可以轻松地使用自定义数据训练 YOLO 模型并将其转换为 ONNX 格式以进行部署。

以下是 Python API 的示例:

from ultralytics import YOLO# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from scratch
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)# Use the model
results = model.train(data="coco128.yaml", epochs=3)  # train the model
results = model.val()  # evaluate model performance on the validation set
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image
success = YOLO("yolov8n.pt").export(format="onnx")  # export a model to ONNX format

下面是一个通过 CLI 的示例:

yolo task=detect mode=predict model=yolov8n.pt 
source="https://ultralytics.com/images/bus.jpg"

使用 DeepSparse 部署 YOLOv8

对于现实应用程序中的生产部署,推理速度对于确定系统的总体成本和响应能力至关重要。DeepSparse 是一个推理运行时,专注于让 YOLOv8 等深度学习模型在 CPU 上快速运行。DeepSparse 通过推理优化的稀疏模型实现了最佳性能,它还可以有效地运行标准的现成模型。

让我们将标准 YOLOv8 模型导出到 ONNX 并在 CPU 上运行一些基准测试。

# Install packages for DeepSparse and YOLOv8
pip install deepsparse[yolov8] ultralytics# Export YOLOv8n and YOLOv8s ONNX models
yolo task=detect mode=export model=yolov8n.pt format=onnx opset=13
yolo task=detect mode=export model=yolov8s.pt format=onnx opset=13# Benchmark with DeepSparse!
deepsparse.benchmark yolov8n.onnx --scenario=sync --input_shapes="[1,3,640,640]"
> Throughput (items/sec): 198.3282
> Latency Mean (ms/batch): 5.0366deepsparse.benchmark yolov8s.onnx --scenario=sync --input_shapes="[1,3,640,640]"
> Throughput (items/sec): 68.3909
> Latency Mean (ms/batch): 14.6101

DeepSparse 还提供了一些方便的实用程序,用于将模型集成到您的应用程序中。例如,您可以使用 YOLOv8 对图像或视频进行注释。带注释的文件保存在annotation-results文件夹中:

deepsparse.yolov8.annotate --source basilica.jpg --model_filepath "yolov8n.onnx # or "yolov8n_quant.onnx"

在这里插入图片描述

通过优化推理模型,可以进一步提升 DeepSparse 的性能。DeepSparse 的构建是为了利用通过权重修剪和量化进行优化的模型,这些技术可以在不降低准确性的情况下大幅缩减所需的计算量。通过我们的 One-Shot 优化方法(将在即将推出的 Sparsify 产品中提供),我们生成了 YOLOv8s 和 YOLOv8n ONNX 模型,这些模型已量化为 INT8,同时保持至少 99% 的原始 FP32 mAP@0.5 。这是仅使用 1024 个样本且没有反向传播即可实现的。您可以在此处下载 量化模型。

运行以下命令来测试性能:

deepsparse.benchmark yolov8n_quant.onnx --scenario=sync --input_shapes="[1,3,640,640]"
> Throughput (items/sec): 525.0226
> Latency Mean (ms/batch): 1.9047deepsparse.benchmark yolov8s_quant.onnx --scenario=sync --input_shapes="[1,3,640,640]"
> Throughput (items/sec): 209.9472
> Latency Mean (ms/batch): 4.7631

DeepSparse在 FP32 下的速度快 4 倍,在 INT8 下的速度快 10 倍。

在这里插入图片描述

ModelSizemAPval (50-95)mAPval (50)PrecisionEngineSpeed CPU b1(ms)FPS CPU
YOLOv8n64037.253.1FP32PyTorch20.548.78
YOLOv8n64037.253.1FP32ONNXRuntime21.7446.00
YOLOv8n64037.253.1FP32DeepSparse5.74198.33
YOLOv8n INT864036.752.6INT8DeepSparse1.90525.02
YOLOv8s64044.662.0FP32PyTorch31.3031.95
YOLOv8s64044.662.0FP32ONNXRuntime32.4330.83
YOLOv8s64044.662.0FP32DeepSparse14.6668.23
YOLOv8s INT864044.261.6INT8DeepSparse4.76209.95

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

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

相关文章

2023年【A特种设备相关管理(锅炉压力容器压力管道)】考试题及A特种设备相关管理(锅炉压力容器压力管道)考试内容

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)考试题是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理(锅炉压力容器压力管道)考试内容,安全生产模…

DockerCompose部署RabbitMQ集群

DockerCompose部署RabbitMQ集群 最近小黄在工作中正好需要部署RabbitMQ集群,借此来记录一下,也希望可以帮助到大家 前置条件 简单介绍一下咱们公司现有的条件以及想要达成的效果 服务器3台,3台都是属于一个专有网络中,也就是说3…

【开源】基于JAVA的桃花峪滑雪场租赁系统

项目编号: S 036 ,文末获取源码。 \color{red}{项目编号:S036,文末获取源码。} 项目编号:S036,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…

关于“Python”的核心知识点整理大全19

目录 ​编辑 8.6.4 使用 as 给模块指定别名 8.6.5 导入模块中的所有函数 8.7 函数编写指南 8.8 小结 第9章 类 9.1 创建和使用类 9.1.1 创建 Dog 类 dog.py 1. 方法__init__() 2. 在Python 2.7中创建类 9.1.2 根据类创建实例 1. 访问属性 2. 调用方法 3. 创建多…

快速搭建知识付费平台?我有才,为你提供一站式解决方案

在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和维护一个属于自己的知识付费平台需要…

Oracle md5

SQL CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2 ISretval varchar2(32); BEGINretval : utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING > passwd));RETURN retval; END; 测试 select md5(lw112190) from dual 效果

70套大数据可视化大屏模板,总有一款适合你(含演示示例)

分享70款还不错的前端数据可视化大屏源码 其中包含行业:智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等,全网最新、最多,最全、最酷、最炫大数据可视化模板。 你可以点击预览获取查看该源码资源的最终展示效果…

三、JS逆向

一、JS逆向 解释:在我们爬虫的过程中经常会遇到参数被加密的情况,这样只有先在前端搞清楚加密参数是怎么生成的才能继续我们的爬虫,而且此时我们还需要用python去执行这个加密的过程。本文主要讲怎么在浏览器调试JS,以及Python执…

基于ssm企业人事管理系统的设计与实现论文

摘 要 进入信息时代以来,很多数据都需要配套软件协助处理,这样可以解决传统方式带来的管理困扰。比如耗时长,成本高,维护数据困难,数据易丢失等缺点。本次使用数据库工具MySQL和编程技术SSM开发的企业人事管理系统&am…

后端对数据库查询的时间格式化

方式一: 在属性上加入注解,对日期进行格式化,如: JsonFormat(pattern "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime;方式二: 在WebMvcConfiguration 中扩展Spring MVC的消息转换器&#xf…

基于ssm旅行社管理系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅行社管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

RFID助力光伏硅片生产:透明溯源,质量至上

RFID助力光伏硅片生产:透明溯源,质量至上 应用背景 光伏产业作为可再生能源的主要发展方向之一,在过去几十年中取得了显著的进展。为了提高光伏产业的效率和质量。在光伏硅片生产过程中,原材料的获取、管理和追溯对于保证硅片品…

换能器信号工作原理

一、ANB板子发送一个周期,频率为40M和60M的 78V的激励脉冲信号。如下图 频率越高,周期越短。图像分辨率更高。原因如下: ①由于采用的是纵向分辨率。相邻两个点之间必须要间隔 下图的2分之兰大才能被识别。 二、当信号给到换能器后&#xf…

邮政快递物流查询,分析筛选出提前签收件

批量查询邮政快递单号的物流信息,将提前签收件分析筛选出来。 所需工具: 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界面左上角…

SpringBoot核心功能-temp

yml&类配置 Configuration-processor

nestjs守卫/全局守卫校验jwt

一、守卫 目标 部分接口需要用户登录后才可以访问,用户登录后可以颁发 jwt_token 给前端,前端在调用需要鉴权的接口,需要在请求头添加 jwt_token,后端校验通过才能继续访问,否则返回403无权访问 创建守卫 anth 安装…

mysql:不要在索引列进行数学运算和函数运算

不要在索引列进行数学运算和函数运算。这是因为数学运算和函数运算会改变索引列的值,导致索引失效。 如果需要进行计算或函数处理,最好将数据取出并在应用程序中进行处理。 下面举个对照的例子: 1)看语句explain select * from …

注塑模具ERP有哪些功能?可以帮助企业解决什么难题

不同的注塑模具有不同的业务流程和生产环节,有些生产企业在订单、物料需求计划、车间、班组负荷评估、项目成本核算、边角料统计分析等方面还存在不少问题。 与此同时,也有部分注塑模具企业通过ERP软件科学制定注塑生产排产,智能核算注塑物料…

用print太慢了!强烈推荐这款Python Debug工具~

作为程序员,我们都深知调试(Debug)在编程过程中的重要性。然而,使用传统的"print"语句进行调试可能效率较低,今天,笔者将推荐一款独具一格的Python调试工具——Reloadium。Reloadium为IDE添加了热…

深入理解Spring Security授权机制原理

原创/朱季谦 在Spring Security权限框架里,若要对后端http接口实现权限授权控制,有两种实现方式。 一、一种是基于注解方法级的鉴权,其中,注解方式又有Secured和PreAuthorize两种。 Secured如: 1 PostMapping("…