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

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

CppCon 2015 学习:REFLECTION TECHNIQUES IN C++

关于 Reflection&#xff08;反射&#xff09; 这个概念&#xff0c;总结一下&#xff1a; Reflection&#xff08;反射&#xff09;是什么&#xff1f; 反射是对类型的自我检查能力&#xff08;Introspection&#xff09; 可以查看类的成员变量、成员函数等信息。反射允许枚…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...