YOLOv5 CPU实时的实例分割教程-它来了!

news2024/11/25 16:19:15
一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com
Time of completion:2023.1.6
Last edited: 2023.1.6

YOLOv5 CPU实时的实例分割教程-它来了!

简介

前不久,ultralytics发布了一个yolov5 7.0版本,在这个版本中,隆重推出了yolov5的seg版本,也就是实例分割版本。

大佬酱也是奔着吃瓜要热乎的原则,立马上手尝试了一下,发现这个版本的mask回归头设计,还真的很高效。事实上在mask AP上的指标也不错!关键是速度快,可以在CPU下跑到realtime,还要啥自行车呢?

时至2023年,我们终于迎来了在CPU上实时跑实例分割的时代。

大佬酱实测了一下,在目标笔记多的时候,也可以以将近60ms的速度跑在CPU上,同时精度看起来也还不错。

单人场景下也可以跑的很快。

但是今天我们要做的事情不是就这样跑一下,而是要导出到ONNX,用ONNXRuntime来推理。

首先导出yolov5的实例分割模型:

python export.py --weights ~/Downloads/yolov5s-seg.pt --include onnx

这一步比较简单,导出来的onnx如下:

如果你嫌麻烦,也可以直接转到文末的代码专区,可以直接获取到onnx文件,并且推理脚本都有。

使用ONNXRuntime推理YOLOv5-seg

接下来就是拿到这个seg模型,用onnxruntime来推理。

你需要知道的是,在yolov5-seg模型中,使用协方差与原型图来进行mask的预测,也就是说,在你的pred里面,输出的维度实际上是117. 它包括:

4 + 1 + 80 + 32

其中32就是mask的协方差系数。

与此同时,还有另外一个分支输出掩码,通过协方差与掩码的乘积,就可以知道mask的具体输出。

ONNXRuntime推理结果

接下里就是onnxruntime推理,直接上代码:

def detect(image):
    im, ratio, (dw, dh) = letterbox(image, img_size, stride=32, auto=False)
    im /= 255.0

    print_shape(im)

    inputs = {model.get_inputs()[0].name: im}
    pred, proto = model.run(None, inputs)
    pred = pred.reshape([1, -1, 4 + 1 + classes + 32])
    pred = torch.as_tensor(pred)
    proto = torch.as_tensor(proto)
    print_shape(pred, proto)

    pred = non_max_suppression(
        pred, conf_thres, iou_thres, None, agnostic_nms, max_det=max_det, nm=32
    )

    # Process predictions
    for i, det in enumerate(pred):  # per image
        if len(det):
            masks = process_mask(
                proto[i], det[:, 6:], det[:, :4], im.shape[2:], upsample=True
            )  # HWC
            det[:, :4] = scale_boxes(
                im.shape[2:], det[:, :4], image.shape
            ).round()  # rescale boxes to im0 size
            segments = reversed(masks2segments(masks))
            segments = [
                scale_segments(im.shape[2:], x, image.shape, normalize=False)
                for x in segments
            ]

            boxes = det[:, :4]
            labels = det[:, 5]
            scores = det[:, 4]
            # print(boxes)
            # print(scores)
            image = visualize_det_cv2_part(image, scores, labels, boxes)
            image = vis_segments_mask(image, segments)
    return image

输出结果:

作者有言

如果需要代码,请私聊博主,博主看见回。
如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

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

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

相关文章

yolov8s网络模型结构图

yolov8!!!! yolov8!!!! yolov8!!!! yolov8!!!! yolov8真的来了!&#…

2023,本命年向阳而生

2023,本命年向阳而生 ——Maynor的2022复盘及2023目标 幸运且努力 先说结论:2022年是极不平凡的一年。 有很多重大事件发生,且与我们的生活息息相关。最令人高兴的是疫情的缓解,2023年也将有更多的机会。 我在这一年经历的事…

FFMPEG入门资料---001---介绍和参数说明

文档介绍 1.1 文档目的 整理出开源代码 ffmpeg 的资料, 方便公司同事后续使用。 1.2 文档范围 较为详细的介绍 ffmpeg 的功能、使用以及二次开发。 1.3 读者对象 希望了解 ffmpeg 知识, 从事 USM 及 IPTV 的同事。 1.4 参考文献 无 1.5 术语与缩…

AcWing 4655. 重新排序(差分+前缀和+贪心)

一、题目信息 二、思路分析 这道题的话,其实只看前一句话,我们应该用的是前缀和算法。但是这道题在此基础上做了改变,我们根据前缀和可以算出排序之前各个区间和的和。 根据题意,我们需要对数组重新排序,使得排序之后…

VMware Workstation安装ESXI8.0

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

反射看这一篇文章就够了

第一章 反射的概述 第1节 反射的概念 Java的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法,并且对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制. 第2节 反射理解 1如果存在反射,那…

实现 SpringBoot 项目中的隐私数据脱敏

实现 SpringBoot 项目中的隐私数据脱敏什么是数据脱敏如何实现数据脱敏注解使用demo什么是数据脱敏 为了避免“用户信息泄露”的风险项(就是后台系统里用户的一些隐私数据直接明文显示了),其实指的就是要做数据脱敏。数据脱敏:把…

谷歌浏览器自带的翻译功能无法使用的解决办法

谷歌浏览器自带的翻译功能无法使用的解决办法 到 C:\Windows\System32\drivers\etc 目录找到hosts文件用记事本或者notepad打开在文件末尾添加:142.250.4.90 translate.googleapis.com要有管理员的身份才可以对hosts文件进行修改修改完毕以后,打开cmd命令…

MySQL 如何查找删除重复行

如何查找重复行 第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。本文要用到的数据样本: create table test(id int not …

解决Vue使用UEditor百度编辑器,上传图片服务配置问题

前言 查看文档前先查看http://fex.baidu.com/ueditor/#server-jsp 理解手册基本配置 此文档只针对TomcatWeb服务 vue版本为2.0版本和 vue-cli2.0 环境配置 需求配置实际项目配置JDK 1.6java version “19.0.1” 2022-10-18Apache Tomcat 6.0Server version: Apache Tomcat…

狂神说笔记——Nginx快速入门28

Nginx快速入门 在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。 随着用户越来越多了,并发量慢慢增大了,此时一台服务器满足不了需求了。 于是进行横向扩展,又增加了服务器。这个时候几个项目…

VTK-路径规划

前言:本博文主要研究VTK中路径规划相关的内容,后期会持续更新路径规划相关的拓展应用,希望能给各位小伙伴一些帮助,也希望小伙伴们多多关注支持。 vtkGraphGeodesicPath 位置:..\Filter\Modeling 描述:路…

DDS 发送大数据

Sending Large DataThis section describes the capabilities offered by Connext DDS—specifically, RTI FlatData™ language binding and Zero Copy transfer over shared memory—that allow sending and receiving large data samples with minimum latency. In this sec…

Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)

Oracle 19c - 手动升级到 Non-CDB Oracle Database 19c 的完整核对清单 (Doc ID 2577572.1)正在上传…重新上传取消To Bottom 文档内容 用途适用范围详细信息关于新的 Autoupgrade utility步骤 1: 升级到数据库 19c 的升级路径能够直接升级到 Oracle 19c 的数据库最小版本以下…

mongodb-18.聚合查询练习1

文章目录bulk writeaddFields增加field嵌套增加field覆盖显示用变量替换向数组中增加元素分组 bucket并行执行多个bucket$bucketAuto$count$document$facet1.使用Aggregation对象实现2.使用Aggregates实现$graphLookup 文档递归查询跨多文档递归$graphLookupbulk write db.piz…

第四十二讲:神州防火墙路由模式的初始配置

防火墙作为局域网的智能网关,处于内网和外网之间,必须工作在路由模式。路由模式下,防火墙上添加默认路由,配置SNAT转换,隐藏私有地址,内部用户正常访问外网。从安全考虑,内网处于trust区域&…

《2022年度ASA广告表现报告》生成,探索买量新高度!

回首 2022 年,ASA 广告的历程可以用“变化莫测”来形容,CPP 取代创意集、更新《广告指南》、上线新广告位等等,而这一系列改变,都在一定程度上影响着 ASA 广告的投放。一起来看看 2022 年度全球 ASA 广告的投放情况吧!…

日常使用的WhatsApp如何防止被封?

最近好多做外贸的朋友反映,自己手机号码注册的WhatsApp账号被封了,该如何将解封。首先我们先要了解为什么会被封?被封肯定是因为违反了WhatsApp条款和条件,但是具体如何违反的呢?我们一起来看看你没有这样做过&#xf…

【express】中间件

中间件(Middleware),特指业务流程的中间处理环节 1、调用流程 当一个请求到达Express的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理。 2、格式 Express的中间件,本质上就是一个functio…

repeat语句 及 赋值语句说明---verilog HDL

参考:verilog数字系统设计教程【第四版】夏宇闻 repeat语句用阻塞赋值语句,与用非阻塞语句产生的结果差别非常大,所以将二者放在同一篇文章中。 1、赋值语句 2、repeat 语句介绍   2.1、用法要点   2.2、代码举例    代码1:…