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

    文章

    10275

    浏览量

    179311
  • API
    API
    +关注

    关注

    2

    文章

    2153

    浏览量

    66241
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10757

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何部署OpenVINO工具套件应用程序?

    编写代码并测试 OpenVINO工具套件应用程序后,必须将应用程序安装或部署到生产环境中的目标设备。 OpenVINO™部署管理器指南包含有关如何轻松使用部署管理器将应用程序打包并
    发表于 03-06 08:23

    构建开源OpenVINO工具套件后,模型优化器位于何处呢?

    构建开源OpenVINO工具套件后,模型优化器位于何处?
    发表于 03-06 08:18

    是否有用于OpenVINO工具套件的配置文件工具呢?

    是否有用于OpenVINO工具套件的配置文件工具
    发表于 03-06 07:29

    如何确定在OpenVINO™ Toolkit中预处理支持的输入颜色格式?

    无法确定在 OpenVINO™ Toolkit 中预处理支持的输入颜色格式。
    发表于 03-06 07:28

    在不安装OpenCV的情况下是否可以使用OpenVINO工具套件

    无法在不安装 OpenCV 的情况下确定是否可以使用OpenVINO工具套件
    发表于 03-06 07:12

    怎么卸载具有FreeLibrary功能OpenVINO工具套件DLL?

    无法卸载具有 FreeLibrary* 功能OpenVINO工具套件 DLL
    发表于 03-06 07:11

    请问OpenVINO工具套件中的验证应用程序是什么?

    OpenVINO工具套件中的验证应用程序是什么?
    发表于 03-06 06:54

    使用工具套件2020.2从ncappzoo运行模型和演示OpenVINO™报错怎么解决?

    使用工具套件 2020.2 从 ncappzoo 运行模型和演示OpenVINO™报错
    发表于 03-05 10:22

    OpenVINO工具套件插件对YOLOv5s模型和scatterUpate层的支持范围是什么?

    OpenVINO工具套件插件对YOLOv5s模型和scatterUpate层的支持范围是什么?
    发表于 03-05 10:16

    如何修复IR版本与OpenVINO工具套件版本不匹配问题?

    执行 Raspberry Pi 4 OpenVINO工具套件示例来自RPI4_NCS2并遇到以下错误: DeprecationWarning:InferRequest 的“输出”属性被弃用。相反
    发表于 03-05 09:04

    已安装OpenVINO工具套件,无法运行是怎么回事?

    已安装OpenVINO工具套件 无法运行行 demo_squeezenet_download_convert_run.bat 和 demo_benchmark.bat 演示。 收到的错误
    发表于 03-05 07:43

    将英特尔®独立显卡与OpenVINO工具套件结合使用时,无法运行推理怎么解决?

    使用英特尔®独立显卡与OpenVINO工具套件时无法运行推理
    发表于 03-05 06:56

    Sapphire Rapids与OpenVINO工具套件是否兼容?

    无法确定 Sapphire Rapids 与 OpenVINO工具套件的兼容性
    发表于 03-05 06:55

    如何下载 OpenVINO工具套件

    需要下载用于开发工作的 OpenVINO工具套件
    发表于 03-05 06:49

    为什么Caffe模型可以直接与OpenVINO工具套件推断引擎API一起使用,而无法转换为中间表示 (IR)?

    推断 Caffe 模型直接基于 英特尔® 神经电脑棒 2 (英特尔® NCS2)。 无法确定为什么 Caffe 模型可以直接与OpenVINO工具套件推断引擎 API 一起使用
    发表于 03-05 06:31