当前位置: 首页 > news >正文

OpenVINO部署

OpenVINO部署

  • 什么是 OpenVINO?
  • OpenVINO 的优势
  • 安装指南
    • 系统要求:
    • 安装步骤
  • 环境设置
  • 部署示例代码
  • 优化和部署步骤
  • 详细部署示例

什么是 OpenVINO?

OpenVINO(Open Visual Inference and Neural Network Optimization)是由英特尔开发的工具包,旨在优化和加速在各种英特尔架构(如CPU、GPU和FPGA)上的深度学习推理,特别侧重于计算机视觉任务。该工具包支持来自流行框架(如TensorFlow和PyTorch)的模型,将它们转换为适合在英特尔硬件上部署的中间表示。

OpenVINO 的优势

OpenVINO的一个显著优势是能够显著减少推理时间。例如,一位在Kaggle比赛中获得第二名的参赛者指出,将PyTorch模型转换为OpenVINO模型可以减少约40%的推理时间。这在比赛条件要求只使用CPU且运行时间必须在120分钟以内时尤为重要。

安装指南

系统要求:

  • 支持的操作系统:Windows、Linux、macOS、Raspbian OS
  • 支持的硬件:英特尔CPU、集成GPU、英特尔神经计算棒2和带有Movidius VPU的英特尔视觉加速设计

安装步骤

Windows:

  • 使用安装程序:
    • 从 OpenVINO工具包页面下载安装程序。
    • 运行安装程序并按照屏幕上的说明进行操作。
    • 通过运行 setupvars.bat 设置环境变量。
  • 使用PyPI:
 pip install openvino

`

Linux

  • 使用APT:
wget -qO- https://apt.repos.intel.com/openvino/2023.0/setup.sh | sudo bash
sudo apt install openvino-runtime-ubuntu22
  • 使用Docker:
docker pull openvino/ubuntu20_runtime:2023.0
docker run -it openvino/ubuntu20_runtime:2023.0

macOS:

  • 使用Homebrew:
brew install openvino

Raspbian OS:

  • 请参阅具体的 Raspbian安装指南。

环境设置

  1. 配置环境变量:
    • 对于Windows:
"C:\Program Files (x86)\Intel\openvino\bin\setupvars.bat"
    • 对于Linux/macOS:
source /opt/intel/openvino/bin/setupvars.sh
  1. 验证安装:
    运行以下命令以检查安装:
python -c "import openvino; print(openvino.__version__)"

部署示例代码

PyTorch 模型部署:

import openvino as ov
import torch# 加载PyTorch模型
model = torch.hub.load("pytorch/vision", "shufflenet_v2_x1_0", weights="DEFAULT")
example = torch.randn(1, 3, 224, 224)# 转换为OpenVINO模型
ov_model = ov.convert_model(model, example_input=(example,))# 编译并运行推理
core = ov.Core()
compiled_model = core.compile_model(ov_model, 'CPU')
output = compiled_model({0: example.numpy()})
print(output)

TensorFlow 模型部署:

import openvino as ov
import tensorflow as tf
import numpy as np# 加载TensorFlow模型
model = tf.keras.applications.MobileNetV2(weights='imagenet')# 转换为OpenVINO模型
ov_model = ov.convert_model(model)# 编译并运行推理
core = ov.Core()
compiled_model = core.compile_model(ov_model, 'CPU')
data = np.random.rand(1, 224, 224, 3)
output = compiled_model({0: data})
print(output)

优化和部署步骤

OpenVINO 提供了各种工具来优化模型:

  • 模型优化器:转换和优化模型。
  • 训练后优化工具:调整模型以获得更好的性能。
  • 基准测试工具:测量推理性能。
  • 有关详细步骤和高级配置,请参阅官方的 OpenVINO文档 和 GitHub 仓库。

详细部署示例

  1. 准备环境
    • 安装必要的软件包:
!pip install openvino-dev[onnx]
  1. 创建并保存模型
import torch
import timm
from torch.onnx import export# 从timm加载预训练模型
model = timm.create_model('resnet50', pretrained=True)
model.eval()# 为模型设置虚拟输入;这应该与模型的输入大小匹配
input_tensor = torch.randn(1, 3, 224, 224)# 导出模型
output_onnx = 'model.onnx'
export(model, input_tensor, output_onnx, opset_version=11, input_names=['input'], output_names=['output'])
  1. 将模型转换为OpenVINO格式
!mo --input_model /kaggle/working/model.onnx --output_dir /kaggle/working --input_shape [1,3,224,224]
  1. 定义OpenVINO对象并执行推理
from openvino.runtime import Core# 初始化推理引擎
ie = Core()# 从IR文件读取网络和相应的权重
model_path = '/kaggle/working/model.xml'  # .xml文件的路径
model = ie.read_model(model=model_path)# 为特定设备编译模型
compiled_model = ie.compile_model(model=model_path, device_name='CPU')
infer_request = compiled_model.create_infer_request()# 获取输入和输出层
input_layer = compiled_model.input(0)
output_layer = compiled_model.output(0)# 准备输入数据(例如,处理成张量的图像)
input_sample = torch.randn(1, 3, 224, 224)
# 检索第一个输入层的名称并创建字典
inputs = {input_layer.any_name: input_sample}# 执行推理
result = infer_request.infer(inputs=inputs)# 访问结果
output = result[output_layer]
# 1000类分类
print(len(output[0]))
print(output)

时间测量(可选)

测量推理时间:

import time
import numpy as nptimes = []
loop = 10  # 时间测量的循环次数
for i in range(loop):t1 = time.time()infer_request.infer(inputs)t2 = time.time()times.append(t2 - t1)print("平均推理时间:", np.mean(times))

相关文章:

OpenVINO部署

OpenVINO部署 什么是 OpenVINO?OpenVINO 的优势安装指南系统要求:安装步骤 环境设置部署示例代码优化和部署步骤详细部署示例 什么是 OpenVINO? OpenVINO(Open Visual Inference and Neural Network Optimization)是由…...

面试题:MySQL优化,项目中举例

目录 一、SQL优化分两部分,如何发现慢SQL和如何优化慢SQL 二、项目举例 一、SQL优化分两部分,如何发现慢SQL和如何优化慢SQL 发现慢SQL有两种方案:第一种是开启我们的慢日志, 第二种就是使用skywalling发现慢的接口,进…...

Spring Boot中的事件驱动编程

Spring Boot中的事件驱动编程 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Spring Boot应用中如何利用事件驱动编程模式,实现…...

代码随想录算法训练营第五十天| 1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列

LeetCode 1143.最长公共子序列 题目链接:https://leetcode.cn/problems/longest-common-subsequence/description/ 文章链接:https://programmercarl.com/1143.%E6%9C%80%E9%95%BF%E5%85%AC%E5%85%B1%E5%AD%90%E5%BA%8F%E5%88%97.html 思路 * dp[i][j]…...

【Redis】数据持久化

https://www.bilibili.com/video/BV1cr4y1671t?p96 https://blog.csdn.net/weixin_54232666/article/details/128821360 单点redis问题: 数据丢失问题:实现Redis数据持久化并发能力问题:搭建主从集群,实现读写分离故障恢复问题&…...

基于Python+Flask+MySQL+HTML的B站数据可视化分析系统

FlaskMySQLVue 基于PythonFlaskMySQLHTML的B站数据可视化分析系统 项目采用前后端分离技术,项目包含完整的前端HTML,以及Flask构成完整的前后端分离系统 爬虫文件基于selenium,需要配合登录账号 简介 主页 登录页面,用户打开浏…...

桥接模式

对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题&…...

docker中mysql突然无法远程连接设置

docker登陆到docker.hub docker login -u 用户名 回车密码 将容器打包成自己的镜像 docker commit -a "用户名" -m "redis" 533d6f1402ca 用户名/myredis:v1.2 将镜像发布到平台上 docker push用户名/myredis:v1.2 删除本地镜像 docker rm image …...

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数(二) date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要:本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数,包括app:redirected(SSR环境下重定向前触发…...

用英文介绍孟买:Mumbai India‘s Transforming MEGACITY

Mumbai: India’s Transforming MEGACITY Link: https://www.youtube.com/watch?vtWD_-Rzrn8o Summary First Paragraph: Mumbai, India’s financial and entertainment capital, is undergoing a major transformation. With its contiguous urban population nearing 25…...

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送...

vscode + CMake编译(opencv显示图片工程)

1.opencv 1.1Mat容器: 在OpenCV中,cv::Mat是一个重要的类,用于表示和操作矩阵或多维数组,通常用于图像处理和计算机视觉任务。 cv::Mat类具有以下特点和功能: 多维数据存储:cv::Mat可以存储多维数据&…...

JavaScript的学习之强制类型转换

目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一:调用被转化数据类型的toString()方法 方式二:调用String函数,并将我们要转换的数据添加进去为参数 三、其他类型转化为Number类型 方式一:使用Number()函数…...

天润融通:AI赋能客户体验,推动企业收入和业绩增长

“客户体验已经成为全球企业差异化的关键。人工智能与数据分析等创新技术正在加速推动企业在客户体验计划中取得成功,以保持领先地位”。Customer Insights & Analysis 研究经理Craig Simpson说道。 客户体验 (CX,Customer Experience) 是客户在与企…...

Android与服务器交互的方式中的对称加密和非对称加密(kotlin)

Android与服务器交互中的对称加密和非对称加密(kotlin) 引言 在 Android 与服务器交互时,我们常常需要进行数据传输,为了保证数据的安全性,我们可以使用加密算法来保护数据。在本文中,我们将介绍如何在 K…...

epoch和batch的区别

在机器学习和深度学习中,“epoch”(批次)和"batch"(批量)是两个重要的概念,它们分别表示训练过程中的不同阶段和数据处理方式。 Epoch(批次) 定义:Epoch&…...

非递归创建二叉查找树

非递归创建二叉查找树代码。 #include <stdio.h> #include <stdlib.h>typedef int KeyType; typedef struct BSTNode{KeyType key;struct BSTNode *lchild,*rchild; }BSTNode,*BiTree;//王道书上的递归写法&#xff0c;代码简单&#xff0c;但是理解有难度 //int …...

摄影师危!AI绘画即将降维打击摄影行业

你还以为AI绘画影响的只是插画师行业吗&#xff1f;错了&#xff0c;摄影行业也即将面临技术洗牌 话不多说&#xff0c;先看一下这几张图 你能一眼看出这是AI画的迪丽热巴吗&#xff1f; 你是不是还以为AI绘画只能画点动漫艺术风格&#xff1f;那你就低估了AI的发展速度&…...

ts 中class

class obj{name:stringage:numberconstructor(name:string,age:number){this.name namethis.age age}setname(){this.name 111 } } //新建实例 //构造方法中的this指向调用者&#xff0c;谁new就指向谁 //这个this 指向 o&#xff0c;打印this&#xff0c;可以获取到o身上的…...

深度解析RocketMq源码-高可用存储组件(四)Dledger框架日志同步流程

1.绪论 在深度解析RocketMq源码-高可用存储组件&#xff08;一&#xff09; raft协议详解-CSDN博客 中讲过&#xff0c;raft协议中&#xff0c;日志同步主要有两个地方&#xff0c;一个是leader会跟follower同步数据&#xff0c;另一个是在新leader诞生的时候&#xff0c;会与…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...