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

告别乱码!ESP32-S3+LVGL 9.2.2驱动ILI9488显示中文的保姆级教程(附完整代码)

ESP32-S3LVGL 9.2.2中文显示实战&#xff1a;从乱码到完美呈现的终极指南 当你在ESP32-S3上成功驱动了ILI9488显示屏&#xff0c;LVGL的基础例程也跑起来了&#xff0c;却发现中文显示全是方块或乱码时&#xff0c;这种挫败感我深有体会。中文显示问题一直是嵌入式GUI开发中的…...

【Django 实验三】个人主页开发实战

【Django 实验三】个人主页开发实战 作者&#xff1a;刘静怡 | 学号&#xff1a;F23016208 | 完成日期&#xff1a;2026年3月29日 目录 环境准备项目创建数据模型设计视图函数编写模板系统Admin 后台配置页面美化功能完善总结 一、环境准备 1.1 环境要求 Python: 3.10Django…...

手把手教你搭建He-Ne激光空间滤波实验(附完整光路图)

从零搭建He-Ne激光空间滤波实验&#xff1a;光路设计与调试实战指南 在光学实验室里&#xff0c;空间滤波技术就像给图像装上"智能滤镜"&#xff0c;能够选择性地增强或抑制特定空间频率成分。想象一下&#xff0c;当你透过不同形状的"光学窗口"观察世界时…...

Onnxruntime模型量化实战:从PTQ到精度调优

1. Onnxruntime模型量化入门指南 第一次接触模型量化时&#xff0c;我也被各种术语搞得晕头转向。简单来说&#xff0c;量化就是把模型参数从32位浮点数转换为8位整数&#xff0c;就像把高清图片压缩成更小的文件。Onnxruntime作为业界领先的推理引擎&#xff0c;提供了完整的量…...

Python自动化运维实战:用Paramiko库5分钟搞定SSH批量管理(附完整代码)

Python自动化运维实战&#xff1a;用Paramiko库5分钟搞定SSH批量管理&#xff08;附完整代码&#xff09; 运维工程师的日常工作中&#xff0c;服务器管理往往占据大量时间。想象一下&#xff0c;当你需要同时更新50台服务器的安全补丁&#xff0c;或者批量收集100台设备的日志…...

Emby Premiere完全免费解锁终极教程:简单三步享受高级媒体服务器功能

Emby Premiere完全免费解锁终极教程&#xff1a;简单三步享受高级媒体服务器功能 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 你是否曾经为Emby Premiere的高级…...

如何通过League-Toolkit智能工具提升英雄联盟操作效率

如何通过League-Toolkit智能工具提升英雄联盟操作效率 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾因错过对局确认而被…...

Youtu-Parsing镜像免配置:预置outputs目录权限+日志轮转自动配置

Youtu-Parsing镜像免配置&#xff1a;预置outputs目录权限日志轮转自动配置 1. 引言&#xff1a;告别繁琐配置&#xff0c;专注文档解析 如果你用过一些AI模型&#xff0c;肯定遇到过这样的麻烦&#xff1a;好不容易把服务跑起来了&#xff0c;结果发现生成的图片没地方保存&…...

评一个典型的“数学可视化 + 计算机图形学入门”的优秀案例(C++精灵库3D案例)

这份代码和视频展示了一个非常典型的“数学可视化 计算机图形学入门”的优秀案例。它不仅仅是一段能运行的代码&#xff0c;更是一个将抽象数学公式转化为直观视觉艺术的教学演示。 以下是对该程序及视频的多维度评论&#xff1a; 1. 技术实现与图形学原理 这段代码虽然简短…...

媒体服务器功能解锁:打造专业级家庭媒体中心的完整方案

媒体服务器功能解锁&#xff1a;打造专业级家庭媒体中心的完整方案 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 在数字化娱乐时代&#xff0c;一个功能完善的媒…...