0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

英特尔物联网 来源:英特尔物联网 作者:贾志刚 2022-12-20 11:32 次阅读

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

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

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

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

工程化水平好,工程应用时“坑”少

文档详实友好,易读易懂

既容易在用户的数据集上重训练又容易在不同的平台上进行部署

社区活跃度高(截至2022-11-27有33.2k GitHub 星, 287个贡献者)

项目演进速度快

默认支持 OpenVINO 部署

在典型行业(制造业、农业、医疗、交通等)有广泛应用。

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

0bf4be0e-7f88-11ed-8abf-dac502259ad0.png

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

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

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

2022年英特尔发布了代号为 Alchemist 的第一代消费级锐炫桌面独立显卡,当前英特尔京东自营旗舰店里销售的主要型号为 A750 和 A770,其典型参数如下图所示。

0c1b5398-7f88-11ed-8abf-dac502259ad0.png

OpenVINO 从2022.2版开始支持英特尔独立显卡,包括英特尔数据中心 GPUFlex 系列和英特尔锐炫系列。

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 segmentpredict.py --source dataimages

向右滑动查看完整代码

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

0c61fdf2-7f88-11ed-8abf-dac502259ad0.png0c97f38a-7f88-11ed-8abf-dac502259ad0.png

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 模型的输入和输出,如下图所示:

0d03c736-7f88-11ed-8abf-dac502259ad0.png

从图中可以看出: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)填充边界,如下图所示。

0d339934-7f88-11ed-8abf-dac502259ad0.png

Letterbox 放缩效果

https://github.com/ultralytics/yolov5/blob/master/utils/augmentations.py#L111

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 运行结果如下图所示:

0d733594-7f88-11ed-8abf-dac502259ad0.png

源代码链接:

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_ov2022_sync_dGPU.py

1.4结论

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

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    61

    文章

    9940

    浏览量

    171677
  • 显卡
    +关注

    关注

    16

    文章

    2429

    浏览量

    67554
  • AI
    AI
    +关注

    关注

    87

    文章

    30640

    浏览量

    268821
  • 模型
    +关注

    关注

    1

    文章

    3217

    浏览量

    48801

原文标题:在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于C#和OpenVINO™英特尔独立显卡上部署PP-TinyPose模型

    和 OpenVINO,将 PP-TinyPose 模型部署英特尔独立显卡上。 1.1 PP-
    的头像 发表于 11-18 18:27 2508次阅读

    Yolov5算法解读

    yolov5于2020年由glenn-jocher首次提出,直至今日yolov5仍然不断进行升级迭代。 Yolov5YOLOv5s、
    的头像 发表于 05-17 16:38 8952次阅读
    <b class='flag-5'>Yolov5</b>算法解读

    YOLOv5】LabVIEW+TensorRT的yolov5部署实战(含源码)

    今天主要和大家分享LabVIEW中使用纯TensoRT工具包快速部署并实现yolov5的物体识别
    的头像 发表于 08-21 22:20 1303次阅读
    【<b class='flag-5'>YOLOv5</b>】LabVIEW+TensorRT的<b class='flag-5'>yolov5</b><b class='flag-5'>部署</b>实战(含源码)

    C++中使用OpenVINO工具包部署YOLOv5-Seg模型

    YOLOv5兼具速度和精度,工程化做的特别好,Git clone到本地即可在自己的数据集上实现目标检测任务的训练和推理,产业界中应用广泛。开源社区对YOLOv5支持实例
    的头像 发表于 12-21 10:17 2088次阅读
    <b class='flag-5'>在</b>C++中使用OpenVINO工具包<b class='flag-5'>部署</b><b class='flag-5'>YOLOv5</b>-Seg<b class='flag-5'>模型</b>

    yolov5转onnxcubeAI上部署失败的原因?

    第一个我是转onnx时 想把权重文件变小点 就用了半精度 --half,则说17版本不支持半精度 后面则是没有缩小的单精度 但是显示哪里溢出了···· 也不说是哪里、、。。。 到底能不能部署yolov5这种东西啊?? 也没看见几个部署
    发表于 03-14 06:23

    龙哥手把手教你学视觉-深度学习YOLOV5

    vi7.Labview调用yolov5模型进行摄像头实时检测学习本课程后,你可以获得:1. 快速掌握yolov5labview中应用的关键
    发表于 09-03 09:39

    怎样使用PyTorch Hub去加载YOLOv5模型

    Python>=3.7.0环境中安装requirements.txt,包括PyTorch>=1.7。模型和数据集从最新的 YOLOv5版本自动下载。简单示例此示例从
    发表于 07-22 16:02

    如何YOLOv5测试代码?

    使用文档“使用 YOLOv5 进行对象检测”我试图从文档第 10 页访问以下链接( i.MX8MP 上部署 yolov5s 的步骤 - NXP 社区) ...但是这样做时会被拒绝访问
    发表于 05-18 06:08

    英特尔推出了英特尔锐炬Xe MAX独立显卡

    英特尔推出了英特尔锐炬 Xe MAX 独立显卡,该显卡专为轻薄型笔记本电脑设计,现已通过合作伙伴问世。
    的头像 发表于 11-01 12:15 8767次阅读

    YOLOv5 7.0版本下载与运行测试

    支持实例分割了,从此YOLOv5实现了图像分类、对象检测、实例分割三个支持,从训练到部署
    的头像 发表于 11-30 15:55 3769次阅读

    C++中使用OpenVINO工具包部署YOLOv5模型

    下载并转换YOLOv5预训练模型的详细步骤,请参考:《基于OpenVINO™2022.2和蝰蛇峡谷优化并部署YOLOv5模型》,本文所使用的
    的头像 发表于 02-15 16:53 4633次阅读

    使用旭日X3派的BPU部署Yolov5

    本次主要介绍旭日x3的BPU中部署yolov5。首先在ubuntu20.04安装yolov5,并运行yolov5并使用pytoch的pt
    的头像 发表于 04-26 14:20 875次阅读
    使用旭日X3派的BPU<b class='flag-5'>部署</b><b class='flag-5'>Yolov5</b>

    使用OpenVINO优化并部署训练好的YOLOv7模型

    英特尔锐炫 显卡+ oneAPI 和 OpenVINO 实现英特尔 视频 AI 计算盒训推一体-上篇》一文中,我们详细介绍基于英特尔
    的头像 发表于 08-25 11:08 1497次阅读
    使用OpenVINO优化并<b class='flag-5'>部署</b>训练好的<b class='flag-5'>YOLOv</b>7<b class='flag-5'>模型</b>

    使用PyTorch英特尔独立显卡上训练模型

    《PyTorch 2.5重磅更新:性能优化+新特性》中的一个新特性就是:正式支持英特尔独立显卡上训练模型
    的头像 发表于 11-01 14:21 321次阅读
    使用PyTorch<b class='flag-5'>在</b><b class='flag-5'>英特尔</b><b class='flag-5'>独立</b><b class='flag-5'>显卡</b>上训练<b class='flag-5'>模型</b>

    树莓派上部署YOLOv5进行动物目标检测的完整流程

    卓越的性能。本文将详细介绍如何在性能更强的计算机上训练YOLOv5模型,并将训练好的模型部署到树莓派4B上,通过树莓派的摄像头进行实时动物目
    的头像 发表于 11-11 10:38 839次阅读
    <b class='flag-5'>在</b>树莓派<b class='flag-5'>上部署</b><b class='flag-5'>YOLOv5</b>进行动物目标检测的完整流程