OpenVINO 2022.3之四:OpenVINO模型转换

news2024/9/21 14:33:51

OpenVINO 2022.3之四:OpenVINO模型转换

OpenVINO 2022.3 支持的模型格式:

  • OpenVINO IR(中间表示) - OpenVINO™的专有格式,可以完全利用其全部功能。

  • ONNX和PaddlePaddle - 直接支持的格式,这意味着它们可以在OpenVINO Runtime中使用,无需进行任何先前的转换。有关如何在ONNX和PaddlePaddle上运行推理的指南,请参阅如何将OpenVINO™与您的应用程序集成。

  • TensorFlow、PyTorch、MXNet、Caffe、Kaldi - 间接支持的格式,这意味着在运行推理之前需要将其转换为OpenVINO IR。转换由Model Optimizer完成,在某些情况下可能需要进行中间步骤。
    在这里插入图片描述
    运行 Model Optimizer 将模型转换为IR格式

    mo --input_model INPUT_MODEL

指定输入形状

–input 和 --input_shape: 用于覆盖模型转换的原始输入形状;

示例如下:

# 单个输入
mo --input_model MobileNet.pb --input_shape [2,300,300,3]
# 多个输入
mo --input_model ocr.onnx --input data,seq_len --input_shape [3,150,200,1],[3]
# 使用 input
mo --input_model ocr.onnx --input data[3,150,200,1],seq_len[3]
# 动态维度可以用 -1 * 或 * ? 标记
mo --input_model ocr.onnx --input data,seq_len --input_shape [-1,150,200,1],[-1]
# 定义未知维度的边界,以优化模型的内存消耗
mo --input_model ocr.onnx --input data,seq_len --input_shape [1..3,150,200,1],[1..3]

模型优化

–disable_fusing, --disable_resnet_optimization 和 --finegrain_fusing: openvino 默认提供了一些方法来加速卷积神经网络(CNN)的推理,可以使用–disable_fusing来关闭这些优化,特别地,对于ResNet系列网络使用 --disable_resnet_optimization;进一步,可以使用–finegrain_fusing关闭特定的节点优化;

预处理嵌入模型(重要)

–scale_values, --reverse_input_channels, 和–layout: 基于这些参数,Model Optimizer生成OpenVINO IR并插入其他子图以执行定义的预处理操作,可以加快整个流水线(包括预处理和推理);

# 单个输入的 layout 
mo --input_model tf_nasnet_large.onnx --layout nhwc
# 多个输入的 layout 
mo --input_model yolov3-tiny.onnx --layout input_1(nchw),image_shape(n?)
# 改变模型的layout 
mo --input_model tf_nasnet_large.onnx --source_layout nhwc --target_layout nchw
mo --input_model tf_nasnet_large.onnx --layout "nhwc->nchw"
# 改变多个输入的模型的layout 
mo --input_model yolov3-tiny.onnx --source_layout "input_1(nchw),image_shape(n?)" --target_layout "input_1(nhwc)"
mo --input_model yolov3-tiny.onnx --layout "input_1(nchw->nhwc),image_shape(n?)"
# 使用 --mean_values, --scale_values, --scale 指定均值和比例值
mo --input_model unet.pdmodel --mean_values [123,117,104] --scale 255
# 反转输入通道
mo --input_model alexnet.pb --reverse_input_channels

模型压缩为FP16格式

–compress_to_fp16: 将模型转换为FP16格式,以支持半精度推理,会导致一定的精度下降;

mo --input_model INPUT_MODEL --compress_to_fp16

剪裁模型

–input 和 --output 参数定义转换模型的新输入和输出,为了去除模型中不需要的部分(例如不受支持的操作和训练子图);

# Cutting at the End
mo --input_model inception_v1.pb -b 1 --output=InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu --output_dir <OUTPUT_MODEL_DIR>
# Cutting from the Beginning
mo --input_model=inception_v1.pb -b 1 --output InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu --input InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu --output_dir <OUTPUT_MODEL_DIR>
# Shape Override for New Inputs
mo --input_model inception_v1.pb --input_shape=[1,5,10,20] --output InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu --input InceptionV1/InceptionV1/Conv2d_1a_7x7/Relu --output_dir <OUTPUT_MODEL_DIR>

1 转换ONNX模型

mo --input_model <INPUT_MODEL>.onnx

2 转换PyTorch模型

可以通过导出到ONNX格式来支持转换PyTorch模型。为了优化和部署使用了PyTorch训练的模型:

1.将PyTorch模型导出到ONNX。

2.基于训练好的网络拓扑结构、权重和偏差值,将ONNX模型转换为生成优化中间表示(IR)的模型。

import torch

# Instantiate your model. This is just a regular PyTorch model that will be exported in the following steps.
model = SomeModel()
# Evaluate the model to switch some operations from training mode to inference.
model.eval()
# Create dummy input for the model. It will be used to run the model inside export function.
dummy_input = torch.randn(1, 3, 224, 224)
# Call the export function
torch.onnx.export(model, (dummy_input, ), 'model.onnx')

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

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

相关文章

DT7遥控DBUS协议解析

文章目录 运行环境&#xff1a;1.1 DBUS协议解析1)DT7遥控2)配置串口引脚3)配置串口接收DMA 2.1例程代码移植1)例程移动到 Inc 和 Src2)makefile添加.c文件 3.1核心代码解释4.1代码修改1)bsp_rc.c 和 remote_control.c2)调用代码 5.1调试1)硬件接线2)串口工具监视拨杆数据 运行…

【C进阶】-- 字符串函数(1)

目录 0. 前言 1. 函数介绍 1.1 strlen 1.1.1主动改变\0的位置 ✅"strlen函数的返回类型是size_t - 无符号整型"✅ 当使用strlen函数但不引用头文件时&#xff0c;执行结果超出预料: 求字符串长度的方法&#x1f4a5; 1.计数器 2.递归 3.指针 - 指针 1.2 st…

HBase安装下载与集群(高可用)

一、准备 1.1 安装zookeeper zookeeper 安装下载与集群 1.2 安装HADOOP hadoop搭建集群搭建 1.3下载HBase https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/ 二、正常部署 2.1 检查是否正常启动 2.2解压 tar -zvxf hbase-2.4.11-bin.tar.gz2.3配置环境变量 vim /…

高效的工作团队都在使用什么工具?

、 移动互联网时代&#xff0c;企业需要开源节流&#xff0c;需要提高员工整体工作效率。尤其对于互联网公司来说&#xff0c;要快速发展业务&#xff0c;更需要让团队工作简单、方便、高效。然而大多公司都面临以下低效阻碍&#xff1a;跨公司、跨部门沟通合作困难。不同部门和…

2、Flutter布局和状态管理

一、Flutter布局之Row&Column 1.1 Container的center属性: 让子控件在父控件的中间显示 Container(color: Colors.yellow,//1.Center让子部件在父控件中间child: Center(child: Text(Layout Center)),); 1.2 alignment让子控件相对父控件位置,取值范围在-1&#xff5e;1…

Mysql索引(1):索引概述

1 介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以在这些数据结构上…

【半监督学习】Match系列.1

半监督学习(SSL) 半监督学习(SSL). 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能. 即在少量样本标签的引导下, 能够充分利用大量无标签样本提高学习性能, 避免了数据资源的浪费, 同时解决了有标签样本较少时监督学习方法泛化能力不强和缺少样本标签引导时无监…

YoloV8涨点神器:CFPNet-ECVBlock的小目标检测,即插即用,助力检测涨点

1.Centralized Feature Pyramid for Object Detection 论文地址: https://arxiv.org/abs/2210.02093 1.摘要: CFPNet简介 CFPNet即插即用,助力检测涨点,YOLOX/YOLOv5/YOLOV7均有效 1.3 Centralized Feature Pyramid (CFP) 如图2所示,CFP主要由以下部分组成:输入图像、…

<IBM AIX><ERRPT><No.001>《出现E86653C3、49183216、8003764C告警的处理 20230506》

《出现E86653C3、49183216、8003764C告警的处理 20230506》 1 现象2 分析3 结论4 引申 1 现象 服务器出现errpt告警&#xff0c;告警为E86653C3、49183216、8003764C。 2 分析 1、hdisk1对应的VG&#xff0c;为rootvg。 lspv |grep hdisk12、查看VG状态 lsvg rootvg说明…

聊聊压电材料高温介电温谱仪所知道的那些事(GWJDN-600A)

GWJDN-600A型压电材料高温介电温谱仪 关键词&#xff1a;单通道&#xff0c;双通道&#xff0c;四通道&#xff0c;高低温 GWJDN-600A压电材料高温介电温谱仪本高频介电温谱系统主要用于绝缘材料在不同温度不同频率下的电学性能测试&#xff0c;系统包含高温炉膛&#xff0c;阻…

【云原生】k8s集群部署Rook+Ceph云原生存储

文章目录 一、Rook介绍二、Ceph介绍三、部署Rook和Ceph3.1 前置准备3.2 部署Rook3.3 部署Ceph集群3.4 部署ceph dashboard 四、部署Rook工具箱五、部署RBD StorageClass 一、Rook介绍 Rook 官网地址&#xff1a;https://rook.io 是一个自管理的分布式存储编排系统&#xff0c;…

c++基础学习Num04

目录 基于for循环 一维数组 二维数组理解 c语言的null和c的null 基于for循环 for(ELEMTYPE val:array){}ELEMTYPE:是范围变量的类型。通常使用auto自动转换范围变量类型 val:范围变量的名称。通过迭代依次接收数组中的元素值 array:容器&#xff0c;注意这里的array必须是…

ctfshow 每周大挑战 RCE极限挑战 2

目录 题目解题步骤1.跑一下正则2.变量自增3.最终解题payload 一点多余的思考 题目 解题步骤 1.跑一下正则 本着能懒就懒的原则&#xff0c;就不写Python了&#xff08;提一下这个主要是我一开始想的是写Python呜呜呜&#xff09;&#xff0c;直接写php&#xff0c;还能复制粘…

C生万物 | 指针入门到进阶就看这篇了【十万字吐血整理,收藏学习】

文章篇幅较长&#xff0c;可前往电脑端进行学习&#x1f4bb; 之前很多粉丝私信我说C语言指针怎么这么难&#xff0c;看了很多视频都学不懂&#xff0c;于是我写了一篇有关指针从入门到进阶的教学&#xff0c;帮助那些对指针很困扰的同学有一个好的学习途径&#xff0c;下面是本…

基于JavaWeb实现的学生宿舍管理系统

【简介】 本系统是基于Java实现的学生宿舍管理系统&#xff0c;前端&#xff1a;Vue&#xff1b;后端&#xff1a;SpringBoot Mybatis Redis Mysql&#xff1b;系统环境&#xff1a;jdk1.8 | mysql | redis | nodejs14。有包含登录在内的十大功能模块&#xff0c;三个访问角…

详解事务模式和 Lua 脚本,带你吃透 Redis 事务

先说结论&#xff1a; Redis 的事务模式具备如下特点&#xff1a; 保证隔离性&#xff1b;无法保证持久性&#xff1b;具备了一定的原子性&#xff0c;但不支持回滚&#xff1b;一致性的概念有分歧&#xff0c;假设在一致性的核心是约束的语意下&#xff0c;Redis 的事务可以…

Vuex从了解到实际运用(一)彻底搞懂什么是Vuex

vuex从了解到实际运用——彻底搞懂什么是vuex 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货什么是vuex全局状态管理使用状态管理工具后的好处vuex的实现原理vuex的组件通信1.多级组件通信2.同级组件通信使用vuex进行组件通信 关于vuex的小结 知识…

总结842

学习目标&#xff1a; 5月&#xff08;张宇强化18讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 学习内容&#xff1a; 暴力英语:背200个基础词阅读理解前两段语法 高等数学&#xff1a;强化课第一讲 小…

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的Pow伽马变换算法增强(C#)

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的Pow伽马变换算法增强&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机使用图像算法增加图像的技术背景Baumer工业相机通过BGAPI SDK联合Halcon使用Pow伽马变换增强算法1.引用合适的类文件2.BGAPI SDK在图…

gtest之断言

目录 普通断言EXPECT_THAT 布尔条件断言EXPECT_TRUEEXPECT_FALSE 二进制断言EXPECT_EQEXPECT_NEEXPECT_LTEXPECT_LEEXPECT_GTEXPECT_GE 字符串比较EXPECT_STREQEXPECT_STRNEEXPECT_STRCASEEQEXPECT_STRCASENE 浮点型比较EXPECT_FLOAT_EQEXPECT_DOUBLE_EQEXPECT_NEAR 显式成功与…