在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型

news2025/2/5 17:48:07

作者:贾志刚 英特尔物联网创新大使 

        

目录

1.1 YOLOv5实时实例分割模型简介

1.2 英特尔®消费级锐炫™ A 系列显卡简介

1.3  在英特尔独立显卡上部署YOLOv5-seg模型的完整流程

1.3.1 搭建YOLOv5开发环境和OpenVINO部署环境

1.3.2 验证YOLOv5开发环境和OpenVINO部署环境

1.3.3 导出yolov5s-seg OpenVINO IR模型

1.3.4 使用Netron工具查看yolov5s-seg.onnx 模型的输入和输出

1.3.5 使用OpenVINO Runtime API 编写yolov5s-seg推理

1.4 结论


        本文将介绍在基于OpenVINO在英特尔独立显卡上部署YOLOv5实时实例分割模型的全流程,并提供完整范例代码供读者使用。

1.1 YOLOv5实时实例分割模型简介

 YOLOv5是AI开发者友好度最佳的框架之一,与其它YOLO系列相比:

  • 工程化水平好,工程应用时“坑”少
  • 文档详实友好,易读易懂
  • 既容易在用户的数据集上重训练又容易在不同的平台上进行部署
  • 社区活跃度高(截至2022-11-27有33.2k GitHub星, 287个贡献者)
  • 项目演进速度快
  • 默认支持OpenVINO部署
  • 在典型行业(制造业、农业、医疗、交通等)有广泛应用。

                2022年11月22日,YOLOv5 v7.0版正式发布,成为YOLO系列中第一个支持实时实例分割(Real Time Instance Segmentation)的框架。从此,YOLOv5框架不仅具有实时目标检测模型,还涵盖了图像分类和实例分割。

图片来源: https://github.com/ultralytics/yolov5/releases

        与实时实例分割SOTA性能榜中的模型相比YOLOv5作者发布的YOLOv5-Seg模型数据,无论是精度还是速度,都领先于当前SOTA性能榜中的模型。

1.2 英特尔®消费级锐炫™ A 系列显卡简介

        2022年英特尔发布了代号为Alchemist第一代消费级锐炫™桌面独立显卡,当前英特尔京东自营旗舰店里销售的主要型号为A750A770,其典型参数如下图所示。OpenVINO™ 从2022.2版开始支持英特尔独立显卡,包括英特尔® 数据中心 GPU Flex 系列和英特尔® 锐炫™系列。

1.3  在英特尔独立显卡上部署YOLOv5-seg模型的完整流程

在英特尔独立显卡上部署YOLOv5-seg模型的完整流程主要有三步:

  1. 搭建YOLOv5开发环境和OpenVINO部署环境
  2. 运行模型优化器(Model Optimizer)优化并转换模型
  3. 调用OpenVINO Runtime API函数编写模型推理程序,完成模型部署

本文将按照上述三个步骤,依次详述。

1.3.1 搭建YOLOv5开发环境和OpenVINO部署环境

        最近的YOLOv5 Github 代码仓,即YOLOv5 v7.0,已经将openvino-dev[onnx]写入requirement.txt文件,当执行pip install -r requirements.txt,会安装完YOLOv5开发环境和OpenVINO部署环境。

git clone https://github.com/ultralytics/yolov5  # clonecd yolov5

cd yolov5

pip install -r requirements.txt

1.3.2 验证YOLOv5开发环境和OpenVINO部署环境

        执行完上述命令后,运行命令

python segment\predict.py --source data\images

        执行结果如下图所示,说明YOLOv5开发环境和OpenVINO部署环境已搭建成功。

1.3.3 导出yolov5s-seg OpenVINO IR模型

        使用命令:

python export.py --weights yolov5s-seg.pt --include onnx

        获得yolov5s-seg ONNX格式模型:yolov5s-seg.onnx。

        然后运行命令:

mo -m yolov5s-seg.onnx --data_type FP16

    获得yolov5s-seg IR格式模型:yolov5s-seg.xml和yolov5s-seg.bin。

1.3.4 使用Netron工具查看yolov5s-seg.onnx 模型的输入和输出

        使用Netron(https://netron.app/),查看yolov5s-seg.onnx模型的输入和输出,如下图所示:

从图中可以看出:yolov5s-seg模型

  • 输入节点名字:“images”;数据: float32[1,3,640,640]
  • 输出节点1的名字:“output0”;数据:float32[1,25200,117]。其中117的前85个字段跟YOLOv5定义完全一致,即检测框信息;后32个字段用于计算掩膜数据。
  • 输出节点2的名字:“output1”;数据:float32[1,32,160,160]。Output1的输出与output0后32个字段做矩阵乘法后得到的数据,即为对应目标的掩膜数据。

1.3.5 使用OpenVINO Runtime API 编写yolov5s-seg推理

        由于yolov5s-seg模型是在yolov5模型的基础上增加了掩膜输出分支,所以图像数据的预处理部分跟yolov5模型一模一样。

整个推理程序主要有五个关键步骤:

  • 第一步:创建Core对象;
  • 第二步:载入yolov5s-seg模型,并面向英特尔独立显卡编译模型
  • 第三步:对图像数据进行预处理
  • 第四步:执行AI推理计算
  • 第五步:对推理结果进行后处理,并可视化处理结果。

整个代码框架如下所示:

# Step1: Create OpenVINO Runtime Core

core = Core()

# Step2: Compile the Model, using dGPU A770m

net = core.compile_model("yolov5s-seg.xml", "GPU.1")

output0, output1 = net.outputs[0],net.outputs[1]

b,n,input_h,input_w = net.inputs[0].shape # Get the shape of input node

# Step3: Preprocessing for YOLOv5-Seg

# ...

# Step 4: Do the inference

outputs = net([blob])

pred, proto = outputs[output0], outputs[output1]

# Step 5 Postprocess and Visualize the result

# ...

其中YOLOv5-seg的前处理跟YOLOv5一样,范例代码如下:

im, r, (dh, dw)= letterbox(frame, new_shape=(input_h,input_w)) # Resize to new shape by letterbox

im = im.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB

im = np.ascontiguousarray(im)  # contiguous

im = np.float32(im) / 255.0    # 0 - 255 to 0.0 - 1.0

        由于YOLOv5系列模型的输入形状是正方形,当输入图片为长方形时,直接调用OpenCV的resize函数放缩图片会使图片失真,所以YOLOv5使用letterbox方式,将图片以保持原始图片长宽比例的方式放缩,然后用灰色color=(114, 114, 114)填充边界,如下图所示。

Letterbox放缩效果

        YOLOv5-seg的后处理跟YOLOv5几乎一样,需要对推理结果先做非极大值抑制。本文直接使用了YOLOv5自带的non_max_suppression()函数来实现非极大值抑制,并拆解出检测框(bboxes), 置信度(conf),类别(class_ids)和掩膜(masks)。关键代码如下:

from utils.general import non_max_suppression

pred = torch.tensor(pred)

pred = non_max_suppression(pred, nm=32)[0].numpy() #(n,38) tensor per image [xyxy, conf, cls, masks]

bboxes, confs, class_ids, masks= pred[:,:4], pred[:,4], pred[:,5], pred[:,6:]

yolov5seg_ov2022_sync_dgpu.py运行结果如下图所示:

源代码链接:https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_ov2022_sync_dGPU.py

1.4 结论

        YOLOv5 的实时实例分割程序通过OpenVINO 部署在英特尔独立显卡上,可以获得高速度与高精度。读者还可以将程序通过OpenVINO异步API升级为异步推理程序或者用OpenVINO C++ API改写推理程序,这样可以获得更高的AI推理计算性能。

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

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

相关文章

Spring Cloud之acos服务注册与Dubbo

Spring Cloud之acos服务注册与Dubbo nacos是springcloud的扩展,注册中心功能通过NacosDiscoveryClient 继承DiscoveryClient,在springcloud中,与Eureka可以无侵入的切换。注册中心可以手动剔除服务实例,通过消息通知客户端更新缓…

【推荐】数据湖技术及实践与案例资料汇总合集47篇

数据湖或hub的概念最初是由大数据厂商提出的,表面上看,数据都是承载在基于可向外扩展的HDFS廉价存储硬件之上的。但数据量越大,越需要各种不同种类的存储。最终,所有的企业数据都可以被认为是大数据,但并不是所有的企业…

30多条立马执行的站内SEO优化建议

站内SEO优化,讲来讲去很多年,但是国内很少有比较全面的Check List。国外的文章,一般都是教你如何优化一篇文章。而不是教你如何打造一个一个商业化的产品页。本篇文章是结合我这几年的独立站SEO项目经验,对站内SEO进行的一些总结,有30多条立马执行的站内SEO优化建议。 其实…

SpringBoot+Actuator+Prometheus+Grafana进行可视化应用监控

最终效果 actuator actuator是什么 看一看chatGPT怎么说? Spring Boot Actuator是Spring Boot的一个子项目,它为监视和管理Spring Boot应用程序提供了附加功能。它提供了一组端点,允许您监视和管理应用程序,如运行状况检查、度量…

[附源码]计算机毕业设计Python电影推荐网站(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

使用FastDeploy在英特尔CPU和独立显卡上端到端高效部署AI模型

目录 1.1 产业实践中部署AI模型的痛点 1.1.1 部署模型的典型流程 1.1.2 端到端的AI性能 1.1.3 部署模型的难点和痛点 1.2 FastDeploy简介 1.3 英特尔独立显卡简介 1.4 使用FastDeploy在英特尔CPU和独立显卡上部署模型的步骤 1.4.1 搭建FastDeploy开发环境 1.4.2 下载…

秒杀/抢购架构设计

1 秒杀业务分析 1.1 正常电子商务流程 (1)查询商品; (2)创建订单; (3)扣减库存; (4)更新订单; (5)付款&…

Odoo丨手把手教你灵活控制表单明细的创建与删除!

文章目录一、前言二、表单明细的创建与删除1.根据主表字段带出明细信息2.根据主表字段控制明细表的添加和删除功能三、总结一、前言 我们知道,在Odoo页面上,控制的最小单位是字段,可通过Odoo提供的属性,控制字段的必填、只读、隐…

Spring Cloud 应用 Proxyless Mesh 模式探索与实践

作者:十眠 Service Mesh 简介 Service Mesh 早已不是一个新兴的概念,目前已经有许多关于 Service Mesh 的探索以及实践。 2016 年可以说是 Service Mesh 的元年,Buoyant 公司 CEO William Morgan 率先发布 Linkerd ,成为业界首…

Java中的多线程(上)

作者:~小明学编程 文章专栏:JavaEE 格言:热爱编程的,终将被编程所厚爱。 目录 多线程 什么是线程 为什么需要多线程 进程和线程的区别(面试重点) Java实现多线程 多线程带来的好处 认识Thread类 T…

前端基础_贝塞尔和二次方曲线

贝塞尔和二次方曲线 贝塞尔曲线可以是二次和三次方的形式,常用于绘制复杂而有规律的形状。 绘制贝塞尔曲线主要使用bezierCurveTo方法。该方法可以说是lineTo的曲线版,将从当前坐标点到指定坐标点中间的贝塞尔曲线追加到路径中。该方法的定义如下。 b…

艾美捷耗氧率检测试剂盒说明书及相关研究

细胞内稳态通过ATP的产生来维持。ATP的生成可以通过单独的糖酵解(无氧呼吸)或通过糖酵解与氧化磷酸化的耦合来完成。氧化磷酸化是氧(O2)依赖性的,发生在线粒体中,是哺乳动物细胞合成ATP的最有效和优选的方法…

电力系统可视化——比PowerWorld还精彩(Matlab实现)

目录 1 概述 2 PowerWorld 3 案例及Matlab代码实现 3.1 案例 3. 2 结果展现 3.3 Matlab代码实现 1 概述 信息可视化的应用为电力行业带来了巨大的希望,但其潜力尚未被可视化社区充分挖掘。先前关于电力系统可视化的工作仅限于在地理布局之上描绘原始或处理过的…

【数据结构】单链表OJ

目录 一、反转单链表 描述 二、返回链表的中间节点 三、返回倒数第K个节点 描述 示例1 四、合并两个已排序的链表 描述 五、分隔链表 六、判断一个链表是否为回文结构 描述 示例1 示例2 示例3 七、两个链表的第一个公共结点 描述 输入描述: 返回值描…

LICEcap:GIF屏幕录制工具

写博客的时候,我经常会用到需要自制gif的场景,我之前一直使用视频转gif工具处理https://tool.lu/video2gif/,大致就是利用qq录屏成视频,然后通过工具转成gif。 今天无意间看到其他博主用了 LICEcap 工具 LICEcap 是一款简洁易用的…

“隐形贫困者”自学Python做副业,教你如何月入10000+

现在的年轻人总是觉得攒不下钱,虽然表面风光,每天出入高级CBD,可是几乎每个人都是月光族,这一类人被定义为“隐形贫困者”,原因是什么呢?根据小编的分析,现在人们对生活质量要求普遍提高了&…

毕业设计 单片机智能避障超声波跟随小车 - 物联网 嵌入式

文章目录0 前言1 项目背景2 实现效果3 设计原理HC-SR04超声波模块5 部分代码6 最后0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告…

玩转云端 | 数据管理深似海,运维如何变“路人”?

数字技术正在改变人们生产、生活的方方面面。作为数字经济时代的重要生产要素,数据正以指数级别爆发式增长,企业对于数据存储及处理的方式和要求已是“今时不同往日”。最早古人存储数据的方法是“以物记物”或“借物记物”,即用更易于携带的…

如何视频裁剪?建议收藏这几种裁剪视频的方法

现在的网络很是方便,我们可以轻轻松松的在网上找到各种网课视频来进行学习。不过有些网课里面的重点内容不仅比较少,还很分散,让我们很难做到高效的学习。但其实我们可以通过视频裁剪,将有重点内容的视频裁剪下来,这样…

SpringBoot SSMP案例整合二 运维篇

目录 一、程序打包 二、项目打包后 若启动失败 三、虚拟机启动SpringBoot项目(Linux) 四、临时属性 五、配置文件4级分类 六、自定义配置文件 七、多环境开发(yml版本) 八、多环境开发多文件版(yml版&#xf…