如何转换PyTorch模型并使用OpenVINO™工具包运行它

2023-05-16

注意:本文是使用 OpenVINO 2022.1创建的。如果您想知道如何使用OpenVINO 2021.4的旧API,请查看此notebook

尽管PyTorchAI训练的绝佳框架,可用于推理,但 OpenVINO™工具包可以在推理性能方面提供额外的好处,因为它针对此任务进行了大量优化。要使用它,您只需3个简单的步骤:安装OpenVINO、转换和优化模型并运行推理。为了向您展示整个过程,我们决定使用FastSeg模型,这是一个用于语义分割的网络,在Cityscapes数据集上进行了预训练。

OpenVINO能够以中间表示IR)格式为网络运行推理。因此,您必须使用模型优化器(开发包中的命令行工具)转换网络。最简单的安装方法是使用PyPi

pip install openvino-dev[pytorch,onnx]

第一步是将模型导出为ONNX格式。您需要使用Opset版本11,因为OpenVINO支持该版本。此外,对于此特定型号,不允许恒定折叠。

from fastseg import MobileV3Large

model = MobileV3Large.from_pretrained().cpu().eval()
dummy_input = torch.randn(1, 3, 512, 1024)

torch.onnx.export(model, dummy_input, "fastseg1024.onnx", opset_version=11, do_constant_folding=False)

OpenVINO直接支持ONNX,因此您可以将导出的模型加载到运行时并开始处理。但是,为了获得更好的性能,需要将模型转换并优化为IR。在终端中使用以下命令:

mo --input_model fastseg1024.onnx --input_shape "[1,3,512,1024]"

这意味着您正在转换输入大小等于1024x512x3W x H x C)的model.onnx。当然,您可以提供其他参数,例如预处理或模型精度(FP32FP16):

mo --input_model fastseg1024.onnx --input_shape "[1,3,512,1024]" --mean_values="[123.675,116.28,103.53]" --scale_values="[58.395,57.12,57.375]" --data_type FP16

均值的减法和除以标准差将直接内置到处理图中,推理将使用FP16运行。执行后,您应该看到如下所示的内容,其中包含所有显式和隐式参数,例如模型路径、输入形状、精度、平均值和小数位数值、转换参数等等:

Model Optimizer arguments:
Common parameters:
    - Path to the Input Model: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.onnx
    - Path for generated IR: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/
    - IR output name: fastseg
    - Log level: ERROR
    - Batch: Not specified, inherited from the model
    - Input layers: Not specified, inherited from the model
    - Output layers: Not specified, inherited from the model
    - Input shapes: [1,3,512,1024]
    - Source layout: Not specified
    - Target layout: Not specified
    - Layout: Not specified
    - Mean values: [123.675,116.28,103.53]
    - Scale values: [58.395,57.12,57.375]
    - Scale factor: Not specified
    - Precision of IR: FP16
    - Enable fusing: True
    - User transformations: Not specified
    - Reverse input channels: False
    - Enable IR generation for fixed input shape: False
    - Use the transformations config file: None
Advanced parameters:
    - Force the usage of legacy Frontend of Model Optimizer for model conversion into IR: False
    - Force the usage of new Frontend of Model Optimizer for model conversion into IR: False
OpenVINO runtime found in:  /home/adrian/repos/openvino_notebooks/venv/lib/python3.9/site-packages/openvino
OpenVINO runtime version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
Model Optimizer version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
[ SUCCESS ] Generated IR version 11 model.
[ SUCCESS ] XML file: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.xml
[ SUCCESS ] BIN file: /home/adrian/repos/openvino_notebooks/notebooks/102-pytorch-onnx-to-openvino/fastseg.bin
[ SUCCESS ] Total execution time: 0.55 seconds. 
[ SUCCESS ] Memory consumed: 112 MB. 
[ INFO ] The model was converted to IR v11, the latest model format that corresponds to the source DL framework input/output format. While IR v11 is backwards compatible with OpenVINO Inference Engine API v1.0, please use API v2.0 (as of 2022.1) to take advantage of the latest improvements in IR v11.
Find more information about API v2.0 and IR v11 at https://docs.openvino.ai

几乎在最后的成功一词表示一切都已成功转换。您获得了IR,它包含两个文件:.xml.bin。您现在可以将此网络放入OpenVINO™运行时并执行推理。

import cv2 
import numpy as np 
from openvino.runtime import Coreimage_filename = "data/street.jpg"

image = cv2.cvtColor(cv2.imread(image_filename), cv2.COLOR_BGR2RGB)resized_image = cv2.resize(image, (1024, 512))

# Convert the resized images to network input shape
input_image = np.expand_dims(np.transpose(resized_image, (2, 0, 1)), 0)

# Load the network in Inference Engine
core = Core()
model_ir = core.read_model(model="fastseg.xml")
compiled_model_ir = core.compile_model(model=model_ir, device_name="CPU")

# Get output layer
output_layer_ir = compiled_model_ir.output(0)

# Run inference on the input image
res_ir = compiled_model_ir([input_image])[output_layer_ir]
result_mask_ir = np.squeeze(np.argmax(res_ir, axis=1)).astype(np.uint8)

它有效!下面的街道是分段的。您可以通过此演示自己尝试。

或者,您可以使用此工具找到下载和安装有关您的环境的OpenVINO™工具包的最佳方式。

资源

  • 下载最新版本的OpenVINO工具包
  • 通过英特尔® DevCloud:边缘工作负载访问最新的英特尔硬件
  • 使用包含预配置软件的参考实施实现快速跟踪开发

本文最初发表于https://medium.com/openvino-toolkit/how-to-convert-pytorch-model-and-run-it-with-openvino-toolkit-c73cebcc01f5

https://www.codeproject.com/Articles/5335242/How-to-convert-PyTorch-model-and-run-it-with-OpenV

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何转换PyTorch模型并使用OpenVINO™工具包运行它 的相关文章

  • 【Python】Tkinter教程

    什么是Tkinter xff1f Tkinter 是 Python 的标准 GUI 库 Python 使用 Tkinter 可以快速的创建 GUI 应用程序 由于 Tkinter 是内置到 python 的安装包中 只要安装好 Python
  • 【C语言】解决error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead...

    几天编译文件的时候报错 xff0c 编译出错信息 xff1a 错误 1 error C4996 39 fopen 39 This function or variable may be unsafe Consider using fopen
  • 【C语言】数据结构C语言版 实验7 二叉树

    编写算法函数void preorder1 bintree t 实现二叉树t的非递归前序遍历 include 34 bintree h 34 char a 61 34 ABC D E F 34 扩充二叉树序树t的前序序列 函数preorder
  • 让input标签的range属性显示数值

    lt input type 61 34 range 34 name 61 34 salary 34 max 61 34 20 34 min 61 34 15 34 onchange 61 34 document getElementById
  • 【Linux】安装x11vnc和xrdp,使用windows远程deepin

    一 环境准备 1 已安装deepin 虚拟机或物理机 xff0c 安装教程自行查询 xff0c 很简单 xff0c 此处用的开源版deepin20 1做测试 目前已更新到20 2 2 启用root账号 xff0c 终端执行 xff1a su
  • 吐血整理,Ubuntu必备应用推荐,满满的干货!

    吐血整理 xff0c Ubuntu必备应用推荐 xff0c 满满的干货 xff01 哈喽 xff0c 大家好 xff0c 欢迎收看欢哥TV 我是欢哥 无论你是刚接触Ubuntu xff0c 还是最近从Windows改用Ubuntu xff0
  • Proxmox VE(PVE)添加硬盘做存储

    PVE安装后会默认将系统盘分出local和local lvm xff0c 但有时还需要别的硬盘作为虚拟主机的数据盘 xff0c 所以就需要添加硬盘进行扩充 一 硬盘分区 格式化 首先需要先先看下需添加硬盘的设备名称 xff0c 如下图的 d
  • 差分约束 解决区间选点问题

    题意 xff1a 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 input 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的 n 行 xff0c 每一行两
  • 【已解决】Microsoft Visual C++ Redistributable is not installed

    Error 导入torch xff0c 提示报错 xff1a Microsoft Visual C 43 43 Redistributable is not installed this may lead to the DLL load f
  • 设置让Windows每天在指定时间自动关机

    其实我们的电脑是可以设置每天在指定的时间点自动关机的 xff0c 具体操作方法 xff1a 1 开打电脑 xff0c 点击电脑系统左下角windows图标 xff0c 选择 控制面板 并进入 xff1b 如图 2 在控制面板界面找到 管理工
  • 在 AlmaLinux 9安装Docker Compose

    首先先安装Docker 如何在 AlmaLinux 8 上安装和使用 Docker 检查Docker版本 docker version 安装Docker Compose sudo curl L 34 https github com doc
  • 使用python搭建一个简单的FTP服务器

    从配置文件获取访问FTP服务器目录的用户名 密码 span class token keyword from span pyftpdlib span class token punctuation span authorizers span
  • 更改win10系统C:\Users\中文用户名为英文用户名

    文章目录 前言一 打开注册表二 查找路径三 重启电脑四 将用中文名与英文名进行链接五 测试是否成功 前言 注意 xff1a 做之前请先浏览一遍 xff0c 做任何操作之前都建议不要直接就做 xff0c 先看一看文档中有哪些操作点是需要小心的
  • Cityscapes数据集的深度完整解析

    cityscapes数据集是分割模型训练时比较常用的一个数据集 xff0c 他还可以用来训练GAN网络生成街景图片 数据集下载和文件夹组成 xff1a 整个数据集包含50个欧洲城市 xff0c 5000张精细标注图像 标注位于gtFine文
  • 使用分支——处理Git merge 冲突

    使用分支 处理Git merge 冲突 版本控制系统就是负责管理来自于多个提交者 xff08 通常是开发者 xff09 之间的提交的 有时候多个开发者可能会编辑同一部分内容 一旦开发者A编辑了开发者B正在编辑的内容 xff0c 冲突就会产生
  • 纯手工解密几大在线js加密网站(1)

    0x0 开头 最近闲来无事 xff0c 来看一下目前网络上哪家加密工具的强度最高的 本人技术有限 xff0c 最终结果不能代表什么 xff0c 大家有遇到什么其他的js加密技术破解难题的 xff0c 也可以一起互相讨论 xff0c 也可以问
  • 纯手工解密几大在线js加密网站(3)

    0x0 开头 续接上章 xff0c 心血来潮想挨个破解一下各大js加密的网站 xff0c 了解一下现有的js加密的逻辑 0x1 介绍 Sojson支持js的不可逆混淆加密 xff0c 和很多高级的加密配置 xff0c 还增加了小白专用的一键
  • 如何在局域网内设置多个网段

    连接状态中的 属性 按钮 xff0c 选择 TCP IPv4 协议 xff0c 点击下面的 属性 按钮 xff0c 点击 高级 按钮 在高级TCP IP设置里面点击 添加 按钮 输入新网段的ip地址 xff08 以192网段为例 xff09
  • B-猫猫向前冲(拓扑排序

    题意 xff1a input 输入有若干组 xff0c 每组中的第一行为二个数N xff08 1 lt 61 N lt 61 500 xff09 xff0c M xff1b 其中N表示猫猫的个数 xff0c M表示接着有M行的输入数据 接下
  • 配置wsl2的图形界面

    1 更新源 span class token function sudo span span class token function apt get span update span class token function sudo s

随机推荐

  • 关于yyyyMMdd的正则表达式的使用

    String pattern 61 34 0 9 3 1 9 0 9 2 1 9 0 9 1 0 9 1 1 9 0 9 2 1 9 0 9 3 34 43 34 0 13578 1 02 0 1 9 12 0 9 3 01 0 469 1
  • qt下使用opencascade源代码

    c 43 43 基础太弱 xff0c 纠正一下 xff0c 在PRO中使用包含目录就可以使用 lt gt xff0c 将下载的opencascade文件通过make编译和安装 xff0c 添加引用就可以了 如果你依然对以下没用的操作感兴趣
  • Linux系统下CPU频率的调整

    省电 or 流畅 root 64 android sys devices system cpu cpu0 cpufreq cat scaling available governors hotplug conservative ondema
  • 禁止显示Apache目录列表-Indexes FollowSymLinks

    第一种方法 禁止显示Apache目录列表 Indexes FollowSymLinks 如何修改目录的配置以禁止显示 Apache 目录列表 缺省情况下如果你在浏览器输入地址 xff1a http localhost 8080 如果你的文件
  • 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP

    维护网络服务器最简单的方式不是跑去实体服务器前面登入 xff0c 而是透过远程联机服务器联机功能来登入主机 xff0c 然后再来进行其他有的没的维护就是了 Linux 主机几乎都会提供 sshd 这个联机服务 xff0c 而且这个服务还是主
  • 如何查看电脑jdk/jre版本以及安装路径

    一 按快捷键win 43 r打开运行窗口 二 输入cmd 回车 xff0c 打开命令框 三 输入 java version 查看jdk版本 注意 xff1a java后面需要有空格 xff0c 不然会报错 java span class t
  • AndroidID、IMEI、OAID获取

    前言 因为项目中经常会遇到要上传一系列设备信息的功能 xff0c 为了方便使用 xff0c 所以就拆分成以下系列文章来单独介绍如何获取各类设备信息 手机运营商获取 AndroidID IMEI OAID获取 地理位置信息经纬度获取 公网IP
  • (二)裸机汇编--点亮LED

    目标 xff1a 点亮LED 1 查数据手册 硬件图中 xff0c 找到LED灯对应的GPIO 从二极管方向看出 xff0c 端口输出低电平时 xff0c 电流经过 xff0c LED点亮 再到数据手册查找对应的寄存器 GPBCON xff
  • Excel中将十六进制字符串转换为汉字的方法

    比如十六进制字符串 D0C2BDAE 转换方法是 在公式里面输入 61 CHAR HEX2DEC LEFT C6 4 amp CHAR HEX2DEC MID C6 5 4 其中C6 是十六进制所在的单元格 xff0c 原理很简单 xff0
  • C - 班长竞选(Kosaraju算法

    题意 xff1a input 本题有多组数据 第一行 T 表示数据组数 每组数据开始有两个整数 N 和 M 2 lt 61 n lt 61 5000 0 lt m lt 61 30000 xff0c 接下来有 M 行包含两个整数 A 和 B
  • debian 11安装pip

    安装curl sudo apt get install curl下载文件get pip py curl https bootstrap pypa io get pip py o get pip py安装依赖python3 distutils
  • Linux运行jar包报错:Error:Invalid or corrupt jarfile xxx.jar

    各种查找 xff0c 没有对症的 xff0c 最后仔细查看信息提示发现是自己大意造成的 xff0c 原因是服务器空间不足导致保存传递过来的jar包不完整导致的 巨坑 xff01 怪自己不够仔细
  • [HPM] Error occurred while trying to proxy request /login/account from localhost:8000 to localhost:8

    HPM Error occurred while trying to proxy request login account from localhost 8000 to localhost 8888 api ENOTFOUND https
  • Unable to perform this action because the process is running.

    总感觉会有小伙伴和我一样纠结吧 我在使用vs code的时候想用调试控制台输入输出 xff0c 结果在输入的时候遇到了这个问题 xff0c 为什么呢 xff0c 我也不知道 xff0c 但是有一个是明确的 xff0c 就是调试控制台不可以作
  • VS Code 翻译插件

    translate var 使用翻译api将其他语言到英文 转换成常见的变量命名形式 Automatically translate words into English variable name Keybindings win 34 A
  • 从ASP.NET Core 3.1中的当前URL获取主机信息

    目录 介绍 问题陈述 解决方案 介绍 在处理 Web 应用程序时 xff0c 很自然 xff0c 我们需要在产品生命周期的各个阶段在各种环境 xff08 即开发 xff0c 测试 xff0c 生产等 xff09 之间切换 换句话说 xff0
  • ONNX系列六 --- 在Java中使用可移植的ONNX AI模型

    目录 安装和导入ONNX运行时 载入ONNX模型 使用ONNX运行时进行预测 摘要和后续步骤 参考文献 下载源547 1 KB 系列文章列表如下 xff1a ONNX系列一 带有ONNX的便携式神经网络 ONNX系列二 使用ONNX使Ker
  • 绒毛动物探测器:通过TensorFlow.js中的迁移学习识别浏览器中的自定义对象

    目录 起点 MobileNet v1体系结构上的迁移学习 修改模型 训练新模式 运行物体识别 终点线 下一步是什么 xff1f 我们可以检测到脸部吗 xff1f 下载TensorFlowJS Examples master zip 6 1
  • YOLOv7 在 ML.NET 中使用 ONNX 检测对象

    目录 什么是 YOLO ONNX 模型 执行预测 示例和参考 References 什么是 YOLO YOLO xff08 You Only Look Once xff09 是一种先进的实时目标检测系统 它是一个在COCO数据集上预训练的物
  • 如何转换PyTorch模型并使用OpenVINO™工具包运行它

    注意 xff1a 本文是使用 OpenVINO 2022 1 创建的 如果您想知道如何使用 OpenVINO 2021 4 的旧 API xff0c 请查看 此notebook 尽管 PyTorch 是 AI 训练的绝佳框架 xff0c 可