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

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

3天内不再提示

OpenVINO工具套件预处理API的概念及使用方法

英特尔物联网 来源:英特尔物联网 作者:杨雪锋 2022-06-09 17:25 次阅读

1.1概述

在《基于OpenVINO 2022.1实现YOLOv5推理程序》中详述了:

■ YOLOv5框架的安装和如何导出YOLOv5.onnx模型

■ OpenVINO 2022.1的安装以及如何编写YOLOv5模型的推理程序

本文将介绍如何使用OpenVINO 2022.1的预处理API,进一步提升YOLOv5模型的推理计算性能。

1.2什么是预处理API函数?

OpenVINO 2022.1之前版本不提供OpenVINO Runtime原生的用于数据预处理的API函数1 ,如图1-1所示,开发者必须通过第三方库(例如:OpenCV)来实现数据预处理。

4f0aec8c-e7d4-11ec-ba43-dac502259ad0.png

图1-1 OpenVINO Runtime预处理API

假设没有预处理API,那么输入数据的预处理操作只能放在CPU上实现,CPU完成数据预处理后,再将预处理后的数据传给iGPU、VPU等AI加速计算设备进行推理计算。

有了预处理API后,就能将预处理操作集成到在模型执行图中,这样iGPU、VPU 或即将发布的Intel独立显卡都能进行数据预处理,无需依赖CPU,提高了执行效率,如图1-2所示。

4f224c60-e7d4-11ec-ba43-dac502259ad0.png

图1-2 预处理OpenCV vs OpenVINO

1.3数据预处理的典型操作

由于输入数据的Shape、Precision等特征,与模型输入张量的要求不一致,所以需要通过预处理,将输入数据按照模型输入张量的要求进行转换,如图1-3所示。

4f52176a-e7d4-11ec-ba43-dac502259ad0.png

图1-3 输入数据 vs 模型输入张量

从图1-3中可见,数据预处理的典型操作有:

■改变输入数据的形状:[720, 1280,3] → [1, 3, 640, 640]

■改变输入数据的精度:U8 → f32

■ 改变输入数据的颜色通道顺序:BGR → RGB

■改变输入数据的布局(layout):HWC → NCHW

■ 归一化数据:减去均值(mean),除以标准差(std)

1.4数据预处理API的使用方法

对应数据预处理的典型操作,OpenVINO 工具套件预处理API提供了相应的类,方便开发者快速使用,其主要流程有6步2 ,如图1-4所示,依次是:

1 实例化PrePostProcessor对象;

2 申明输入数据的信息

3 指定模型的数据布局(layout)

4 设置模型输出张量的信息

5 定义预处理的具体步骤

6 将预处理步骤集成到模型

4f7a257a-e7d4-11ec-ba43-dac502259ad0.png

图1-4 使用预处理API的流程

本文将按照上述顺序依次介绍。

1.4.1 实例化PrePostProcessor对象

实例化PrePostProcessor对象的Python代码,如代码清单1-1所示。

代码清单1-1 实例化PrePostProcessor对象

4f8b9cec-e7d4-11ec-ba43-dac502259ad0.png

1.4.2 申明输入数据的信息

申明输入数据的信息的Python代码,如代码清单1-2所示。

代码清单1-2 申明输入数据的信息

4fa39ef0-e7d4-11ec-ba43-dac502259ad0.png

1.4.3 指定模型的数据布局(layout)

指定模型的数据布局(layout) 的Python代码,如代码清单1-3所示。

代码清单1-3 指定模型的数据布局(layout)

4fc1fa6c-e7d4-11ec-ba43-dac502259ad0.png

1.4.4 设置模型输出张量的信息

设置模型输出张量的信息的Python代码,如代码清单1-4所示。

代码清单1-4 设置模型输出张量的信息

4fdccd38-e7d4-11ec-ba43-dac502259ad0.png

1.4.5 定义预处理的具体步骤

定义预处理的具体步骤的Python代码,如代码清单1-5所示。

代码清单1-5 定义预处理的具体步骤

4fef0b1a-e7d4-11ec-ba43-dac502259ad0.png

50002544-e7d4-11ec-ba43-dac502259ad0.png

1.4.6 将预处理步骤集成到模型

将预处理步骤集成到模型的Python代码,如代码清单1-6所示。

代码清单1-6 将预处理步骤集成到模型

502210f0-e7d4-11ec-ba43-dac502259ad0.png

1.4.7 将集成了预处理步骤的模型导出

使用serialize()函数,可以将集成了预处理步骤的模型导出,方便后续调用,如代码清单1-7所示。

代码清单1-7 导出包含预处理步骤的模型

503df586-e7d4-11ec-ba43-dac502259ad0.png

使用Netron打开导出模型,可以看到预处理步骤已经集成到执行图中,如图1-5所示。

50524f54-e7d4-11ec-ba43-dac502259ad0.png

图1-5 预处理集成到执行图中

导出集成预处理模型的完整源代码:

1.5完整范例代码和测试结果

本文随附使用OpenVINO 2022.1预处理API实现YOLOv5s推理程序的完整源代码,参见:https://gitee.com/ppov-nuc/yolov5_infer/blob/main/infer_with_openvino_preprocess.py。

表1-1 使用OpenVINO 2022.1预处理API和

使用OpenCV实现预处理的性能对比

操作系统:Windows10;Python版本:3.8;OpenVINO版本:2022.1

模型:yolov5s.onnx

50864836-e7d4-11ec-ba43-dac502259ad0.png

执行命令, 将yolov5s.onnx转换为FP16精度的yolov5s.xml后

mo --input_model yolov5s.onnx --data_type FP16

操作系统:Windows10;Python版本:3.8;OpenVINO版本:2022.1

模型:yolov5s.xml @ FP16

50a22038-e7d4-11ec-ba43-dac502259ad0.png

1.6总结

本文完整介绍了什么是OpenVINO工具套件预处理API和为什么推荐使用预处理API将预处理操作集成到模型执行图中,然后详细介绍了使用步骤并提供了完整范例源代码。

通过运行源代码,可以看到,使用了OpenVINO 工具套件预处理API,使输入数据预处理操作不再依赖CPU,可以由推理设备(如GPU/VPU)完成,提高了推理计算效率,减少了运行时间。

原文标题:使用OpenVINO™ 预处理API进一步提升YOLOv5推理性能 | 开发者实战

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

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

    关注

    61

    文章

    9955

    浏览量

    171716
  • API
    API
    +关注

    关注

    2

    文章

    1499

    浏览量

    61984
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10478

原文标题:使用OpenVINO™ 预处理API进一步提升YOLOv5推理性能 | 开发者实战

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

收藏 人收藏

    评论

    相关推荐

    谐波的概念及应用

    本文简单介绍了谐波的概念及应用。
    的头像 发表于 10-18 14:14 425次阅读
    谐波的<b class='flag-5'>概念及</b>应用

    特瑞仕DC/DC转换器实机特性比较工具的特征和使用方法

    本篇文章说明了特瑞仕在官网公开的实机特性比较工具的特征和使用方法
    的头像 发表于 09-26 17:03 1993次阅读
    特瑞仕DC/DC转换器实机特性比较<b class='flag-5'>工具</b>的特征和<b class='flag-5'>使用方法</b>

    使用OpenVINO C# API部署YOLO-World实现实时开放词汇对象检测

    的快速准确识别,并通过AR技术将虚拟元素与真实场景相结合,为用户带来沉浸式的交互体验。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO 2024.0部署 YOLO-World实现实时开放词汇对象检
    的头像 发表于 08-30 16:27 641次阅读
    使用<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>部署YOLO-World实现实时开放词汇对象检测

    S参数的概念及应用

    电子发烧友网站提供《S参数的概念及应用.pdf》资料免费下载
    发表于 08-12 14:29 0次下载

    机器学习中的数据预处理与特征工程

    在机器学习的整个流程中,数据预处理与特征工程是两个至关重要的步骤。它们直接决定了模型的输入质量,进而影响模型的训练效果和泛化能力。本文将从数据预处理和特征工程的基本概念出发,详细探讨这两个步骤的具体内容、
    的头像 发表于 07-09 15:57 400次阅读

    TensorFlow的定义和使用方法

    数据流图,从而简化机器学习模型的构建、训练和部署。自2015年11月开源以来,TensorFlow迅速成为数据科学家、软件开发者以及教育工作者广泛使用的工具,广泛应用于图像识别、自然语言处理、推荐系统等多个领域。本文将深入解读TensorFlow的定义、
    的头像 发表于 07-02 14:14 765次阅读

    OpenVINO C# API在intel平台部署YOLOv10目标检测模型

    的模型设计策略,从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。在本文中,我们将结合OpenVINO C# API使用最新发布的OpenVINO 2024.1部署YOLOv10目标检
    的头像 发表于 06-21 09:23 1024次阅读
    用<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>在intel平台部署YOLOv10目标检测模型

    信号的预处理包括哪些环节

    的各个环节,包括信号的采集、预滤波、采样、量化、编码、去噪、特征提取等。 信号采集 信号采集是信号预处理的第一步,它涉及到从实际物理现象中获取信号的过程。信号采集的方法取决于信号的类型和来源,例如声音、图像、温
    的头像 发表于 06-03 10:35 2964次阅读

    简单两步使用OpenVINO™搞定Qwen2的量化与部署任务

    英特尔 OpenVINO工具套件是一款开源 AI 推理优化部署的工具套件,可帮助开发人员和企业加速生成式人工智能 (AIGC)、大语言模
    的头像 发表于 04-26 09:39 1660次阅读
    简单两步使用<b class='flag-5'>OpenVINO</b>™搞定Qwen2的量化与部署任务

    简单三步使用OpenVINO™搞定ChatGLM3的本地部署

    英特尔 OpenVINO工具套件是一款开源 AI 推理优化部署的工具套件,可帮助开发人员和企业加速生成式人工智能 (AIGC)、大语言模
    的头像 发表于 04-03 18:18 2058次阅读
    简单三步使用<b class='flag-5'>OpenVINO</b>™搞定ChatGLM3的本地部署

    基于英特尔哪吒开发者套件平台来快速部署OpenVINO Java实战

    OpenVINO 工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平
    的头像 发表于 03-21 18:24 1482次阅读
    基于英特尔哪吒开发者<b class='flag-5'>套件</b>平台来快速部署<b class='flag-5'>OpenVINO</b> Java实战

    OpenVINO™ Java API应用RT-DETR做目标检测器实战

    本文将从零开始详细介绍环境搭建的完整步骤,我们基于英特尔开发套件AIxBoard为硬件基础实现了Java在Ubuntu 22.04系统上成功使用OpenVINO™ Java API,并且成功运行了RT-DETR实现实时端到端目标
    的头像 发表于 03-18 15:04 799次阅读
    <b class='flag-5'>OpenVINO</b>™ Java <b class='flag-5'>API</b>应用RT-DETR做目标检测器实战

    C语言中的预处理

    所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。
    发表于 03-01 12:16 900次阅读
    C语言中的<b class='flag-5'>预处理</b>器

    如何在MacOS上编译OpenVINO C++项目呢?

    英特尔公司发行的模型部署工具 OpenVINO 模型部署套件,可以实现在不同系统环境下运行,且发布的 OpenVINO 2023 最新版目前已经支持 MacOS 系统并同时支持在苹果
    的头像 发表于 01-11 18:07 902次阅读
    如何在MacOS上编译<b class='flag-5'>OpenVINO</b> C++项目呢?

    相位噪声的概念及其应用

    频率稳定度分短稳和长稳。短稳是指由相噪,电源和负载变化引起的频率波动;长稳是指因老化等引起的频率漂移。相位噪声是晶体振荡器短期稳定度的重要指标。今天凯擎小妹就来讲一下相位噪声的概念及其应用。
    的头像 发表于 12-26 13:28 1108次阅读
    相位噪声的<b class='flag-5'>概念及</b>其应用