视觉学习笔记13——既是模型,又是模型中转站的onnx

news2024/11/15 15:33:18

系列文章目录

入门级深度学习环境搭建

文章目录

  • 系列文章目录
  • 前言
  • 一、ONNX是什么?
  • 二、环境安装
    • 1、在 Anaconda 环境中安装 onnx
    • 2、在 Anaconda 环境中卸载 onnx
    • 3、anaconda 安装onnxruntime
  • 未完待续。。。


前言

假设一个场景:现在某组织因为主要开发用TensorFlow为基础的框架,现在有一个深度算法,需要将其部署在移动设备上,以观测变现。传统地我们需要用caffe2重新将模型写好,然后再训练参数;试想下这将是一个多么耗时耗力的过程。

此时,ONNX便应运而生,Caffe2,PyTorch,Microsoft Cognitive Toolkit,Apache MXNet等主流框架都对ONNX有着不同程度的支持。这就便于了我们的算法及模型在不同的框架之间的迁移。无论你使用什么样的训练框架来训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),你都可以在训练后将这些框架的模型统一转为ONNX存储。 ONNX文件不仅存储了神经网络模型的权重,还存储了模型的结构信息、网络中各层的输入输出等一些信息。 然后将转换后的ONNX模型,转换成我们需要使用不同框架部署的类型,通俗来说ONNX 相当于一个翻译,一个框架与框架之间的标准中转站。

一、ONNX是什么?

Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。
它是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型并进行推理的深度学习框架有:Caffe2, PyTorch, MXNet,ML.NET,TensorRT和Microsoft CNTK,并且TensorFlow也非官方的支持ONNX。

开放式神经网络交换(ONNX)是迈向开放式生态系统的第一步,它使AI开发人员能够随着项目的发展选择合适的工具。ONNX为AI模型提供开源格式。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义。最初的ONNX专注于推理(评估)所需的功能。ONNX解释计算图的可移植,它使用graph的序列化格式。它不一定是框架选择在内部使用和操作计算的形式。例如,如果在优化过程中操作更有效,则实现可以在存储器中以不同方式表示模型。

ONNX是一个开放式规范,由以下组件组成:
可扩展计算图模型的定义。
标准数据类型的定义。
内置运算符的定义。

深度学习算法大多通过计算数据流图来完成神经网络的深度学习过程。一些框架(例如CNTK,Caffe2,Theano和TensorFlow)使用静态图形,而其他框架(例如PyTorch和Chainer)使用动态图形。但是这些框架都提供了接口,使开发人员可以轻松构建计算图和运行时,以优化的方式处理图。这些图用作中间表示(IR),捕获开发人员源代码的特定意图,有助于优化和转换在特定设备(CPU,GPU,FPGA, npu等)上运行。

在这里插入图片描述

二、环境安装

onnx官方代码

以下工作需要在深度学习环境搭建之后才能继续。

1、在 Anaconda 环境中安装 onnx

使用以下命令激活:

source activate myenv

安装必要的依赖库。可以使用以下命令安装:

conda install -c conda-forge protobuf=3.19

在这里插入图片描述

安装 onnx。可以使用以下命令安装最新版本的 onnx:

conda install -c conda-forge onnx

如果要安装特定版本的 onnx,可以使用以下命令:

conda install -c conda-forge onnx=1.12.0

在这里插入图片描述

安装完成后,可以使用以下命令验证是否安装成功:

import onnx
print(onnx.__version__)

在这里插入图片描述

如果输出了 onnx 的版本号,则说明安装成功。

2、在 Anaconda 环境中卸载 onnx

使用以下命令激活:

source activate myenv

卸载 onnx。可以使用以下命令卸载:

conda remove onnx

如果在安装 onnx 时,安装了依赖库 protobuf,也可以一并卸载:

conda remove protobuf

卸载完成后,可以使用以下命令验证是否卸载成功:

import onnx

如果此时再运行程序,应该会出现 ImportError 或 ModuleNotFoundError 的错误,表明 onnx 已经被卸载。

3、anaconda 安装onnxruntime

使用以下命令:

conda install -c conda-forge onnxruntime

这将会安装最新版本的ONNX Runtime。如果需要安装特定版本的ONNX Runtime,可以使用以下命令:

conda install -c conda-forge onnxruntime=1.6

或者conda安装不了时也可以使用pip安装:

pip install onnx onnxruntime==1.6

在这里插入图片描述

其中,1.6指定所需的ONNX Runtime的版本号。
需要注意的是,anaconda环境中安装的ONNX Runtime要求Python版本在3.5至3.8之间。如果你的Python版本不在这个范围内,可能会导致安装失败或不兼容。如果需要使用其他版本的Python或者其他操作系统,请查看官方文档中的安装要求。

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1339550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷 一:fdisk磁盘分区并挂载1.查看磁盘分区信息2.分区3.强制系统重新读取分区(避免重启系统)4.格式化分区5.创建挂载目录6.设置开机自动挂载:7.验证并自动挂载(执行了该命令不需要重启系统)8.查看挂载007.异常情况处…

Feature Prediction Diffusion Model for Video Anomaly Detection 论文阅读

Feature Prediction Diffusion Model for Video Anomaly Detection论文阅读 Abstract1. Introduction2. Related work3. Method3.1. Problem Formulation3.2. Feature prediction diffusion module 3.3. Feature refinement diffusion module4. Experiments and discussions4.1…

Flink1.17实战教程(第六篇:容错机制)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

如何在无公网IP环境使用Windows远程桌面Ubuntu

文章目录 一、 同个局域网内远程桌面Ubuntu二、使用Windows远程桌面连接三、公网环境系统远程桌面Ubuntu1. 注册cpolar账号并安装2. 创建隧道,映射3389端口3. Windows远程桌面Ubuntu 四、 配置固定公网地址远程Ubuntu1. 保留固定TCP地址2. 配置固定的TCP地址3. 使用…

使用Visual Studio 2022 winform项目打包成安装程序.exe

winform项目打包 1.安装扩展插件 Microsoft Visual Studio Installer Projects 20222.在解决方案上新建一个setup project 项目3.新建成功如下图,之后添加你的winform程序生成之后的debug下的文件4.在Application Folder上点击右键->Add->项目输出->主输出…

从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry() 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警,当时…

黄向墨创立的玉湖冷链参加首届中欧班列(成渝)全球合作伙伴大会签订

玉湖集团是总部设于香港的有二十多年历史的跨国实业投资集团,由祖籍广东的香港企业家、著名爱国侨领黄向墨先生创立。黄向墨先生现任中国和平统一促进会常务理事、中华海外联谊会常务理事、香港选委会委员及香港全国人大代表选举会议成员。 12月7日,玉湖冷链参加首届中欧班列(…

鸿蒙Harmony(八)ArkUI--状态管理器之@State

状态管理 在声明式UI中,是以状态驱动视图更新 状态:指驱动视图更新的数据(被装饰器标记的变量) StateProp 和 LinkProvide和 Consume State State装饰器标记的变量必须初始化,不能为空值State支持Object 、class、…

Linux操作系统(Crontab计划任务+NTP时间同步服务器)

如何修改linux系统时间 与时间相关的命令,查看当前的时间 运行 date 即可 cal 查看当前月份的日历 运行 timedatectl 查看时间详细参数 ( NTP: network time protocol 网络时间协议 ) ( local time : 本地时间 &#x…

WeNet语音识别分词制作词云图

在线体验 ,点击识别语音需要等待一会,文件太大缓存会报错 — 介绍 本篇博客将介绍如何使用 Streamlit、jieba、wenet 和其他 Python 库,结合语音识别(WeNet)和词云生成,构建一个功能丰富的应用程序。我们将深入了解代…

电路设计(8)——计时器的multism仿真

1.功能设计 这是一个计时电路,在秒脉冲的驱动下,计时器开始累加,6个数码管分别显示计时的 时:分:秒。 仿真图如下所示: 左边的运放构成了振荡电路,可以产生脉冲波。这个脉冲波给计时电路提供基准…

scikit-learn文档中的数据生成器

目录 1. make_classification: 2. make_regression: 3. make_blobs: 4. make_moons: 5.make_circles 6. make_sparse_coded_signal: 1. make_classification: 这是一个用于生成复杂二维数据的函数,通常用于可视化分类器的学习过程或者测试机器学习算法的性能…

<JavaEE> TCP 的通信机制(四) -- 流量控制 和 拥塞控制

目录 TCP的通信机制的核心特性 五、流量控制 1)什么是“流量控制”? 2)如何做到“流量控制”? 3)“流量控制”的作用 六、拥塞控制 1)什么是“拥塞控制”? 2)如何做到“拥塞…

http——https实现指南

第一部分:HTTPS安全证书简介 什么是HTTPS安全证书? 在网络通信中,HTTPS安全证书是一种由可信任的证书颁发机构(CA)签发的数字证书,用于保障网站与用户之间的数据传输安全。通过加密和身份验证&#xff0c…

Elasticsearch 查询命令执行时,如何通过词项索引、词项字典、倒排表定位文档逻辑介绍

这里不涉及到源码,只是根据网上的一些文章总结一下,目前不需要细究,只需要知道大概就好,除非你的工作是二次开发ES 一、​Term Index(词项索引)1、FSM(Finite State Machine)有限状态机2、FSA(F…

【智慧门店】东胜物联蓝牙网关助力解决方案商,推动汽车后市场企业智能化升级

截至2023年9月底,我国汽车保有量达3.3亿辆,后市场前景广阔。 随着人工智能、5G、物联网等新技术的普及,汽车后市场企业希望向智能化迈进,借助新兴科技的力量提升汽车维修、车辆保养等服务质量,满足消费者日益增长的需…

python使用openpyxl操作excel

文章目录 前题读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种:.active 方法第二种:通过工作表名获取指定工作表​​​​​​第三种:.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…

在人工智能和机器学习的影响下,代理服务器正在不断演变

代理服务器是充当客户端(例如用户的智能手机)和目标服务器(例如网站或应用程序)之间的网关的中介。在互联网的早期,代理服务器主要用于缓存网络内容。然而,随着互联网的扩展,他们的角色也随之扩…

网络舆论传播分析:自然语言处理与图分析相融合

源自:《信息安全与通信保密》 作者:徐明 魏国富 殷钱安 优化识别能力和溯源能力 在网络信息技术快速发展的当下,做好网络舆论分析是确保网络舆论信息健康稳定传播的基本前提。 介 绍 图 1 自然语言处理与图分析相结合的模型思路 方 法…

Postman使用

Postman使用 Pre-request Script 参考: Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script,在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据,也可以使用Pre-request Script来调试代码&#xff0…