当前位置: 首页 > 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;会与…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...