×

onnx模型

onnx模型(微软与脸书发起的ONNX AI项目有哪些新进展)

admin admin 发表于2023-01-02 22:39:46 浏览73 评论0

抢沙发发表评论

本文目录

微软与脸书发起的ONNX AI项目有哪些新进展

2017 年的时候,微软与 Facebook 合作发起了“开放神经网络交换”(ONNX)格式。

其为人工智能(AI)框架生态系统带来了互操作性、提供了可扩展计算图模型的定义、以及内置运算符和标准数据类型的定义。

据悉,ONNX 使模型能够在一个框架中机型训练,然后转移到另一个框架中进行推理。

(图自:Microsoft,via MSPU)


去年,微软宣布将开源“开放神经网络交换运行时”(ONNX Runtime),这是一种用于 Linux、Windows 和 Mac 上 ONNX 格式的机器学习模型的高性能推理引擎。

今天,微软宣布了项目的最新进展 —— 决定让 ONNX 加入 LF AI 基金会(隶属于 Linux 基金会)。微软 Azure AI 副总裁 Eric Boyd 写到:

我们很高兴 LF AI 将托管 ONNX,并继续实行开放式治理模型,以鼓励社区的参与和贡献。

LF AI 将为 ONNX 提供长期领导,使社区专注于加速机器学习的采用、并促进 ONNX 的下一波创新和采用。

微软希望 ONNX 在 Linux 基金会下获得一个由框架、编译器、运行时、加速器和可视化器组成的丰富生态系统。

LF AI 基金会执行董事 Ibrahim Haddad 博士表示:ONNX 不仅仅是被企业认可的规范,且已经在其产品中得到积极实施。

因为 ONNX 是一种开放格式,并且致力于开发和支持多种框架和平台。

加入 LF AI,意味着 ONNX 将在这条道路上持续进步,有助于加速技术开发、以及全球范围内更广泛的开源 AI 社区的联系。

我们很高兴为 ONNX 提供一个独立的场合、并与社区合作,以提升其作为供应商中立标准的形象。

ONNX 将保留其现有的 OSI 批准的开放源代码许可证、治理结构和已建立的开发实践。

亚马逊和微软整合Alexa以及Cortana电子设备,预示着大公司开始走向合作之路了吗

这些大公司倒是一直有合作,比较极端的例子是之前反对特朗普取消支持网络中立法案的大集会。但是在人工智能领域像这样的合作还是头一次,很令用户们振奋。

其实不止亚马逊和微软有合作,Facebook和微软也有合作。

几乎是Alexa和Cortana合作消息的同时,Facebook 和微软一起发布了一种描述深度学习模型的统一标准——开放式神经网络交换(Open Neural Network Exchange ,ONNX )。

我们知道工程师在设计AI学习模型时,有很多具备不同特性的 AI 架构可以选择。很多时候,研发阶段使用的架构和实际投产时使用的架构并不一致,因此,很多组织不得不做大量的工作,来弥合研发架构和产品架构之间的特性差异。ONNX标准就是为了确保模型能够在架构之间进行迁移。

ONNX 的发布,使得 AI 开发者能在开发过程中,更加自由地选用不同的架构。9 月开始,Caffe2、PyTorch 和 Cognitive Toolkit 都会支持 ONNX 标准,这样,在一个架构下训练好的模型可以直接迁徙到另外一个架构下。Facebook 和微软呼吁业界积极支持 ONNX 生态系统的发展,因为提高不同架构之间的兼容性和减少产品各阶段之间的弥合性工作能显著提高 AI 领域的创新效率。

ONNX 是迈向 AI 开放生态系统的第一步。从此以后,AI 开发者能更容易地对最新的开发工具进行选择和组合,以发挥最佳性能。

微软Vision Skills视觉技能API有哪些特点

外媒报道称,微软刚刚发布了 Windows Vision Skills 的预览版本。作为一个 NuGet 包集合,其旨在帮助开发者通过一组简单的 API,去解决复杂的计算机视觉问题。

目前包含的一组 API,适用于实现特定类型的计算机视觉技能,例如骨骼检测器与情感识别器。

此外,开发者可借助 Windows 中的硬件加速框架,来构建自己的视觉技能(无需为底层 API 伤脑筋)。

(来自:GitHub,via Neowin)

感兴趣的朋友,可以尝试微软提供了一些 Windows Vision Skills 示例,或者参考教程来打造自己的视觉技能。

(图自:Windows Blog)

据悉,Windows Vision Skills 是一套开放式框架,能够扩展与其它机器学习框架(如 OpenCV)一起使用。

(图自:Microsoft)

另外它借助 WinML 进行本地推理,扩展了 Windows 对 ONNX 模型推理的支持。

机器学习应用有哪些方面

一、关于机器学习

所谓机器学习,最简单明了的说法就是让机器像人那样学习(不过,由于人工智能技术,机器可能自己涌现出超人类的智能),所谓的机器就是指计算机一类的机器(包括电子计算机、中子计算机、光子计算机和神经计算机等)

在上个世纪60年代,机器学习就被定义为一门人工智能的科学,今天它更是一门多领域交叉学科涉及到概率论、统计学、逼近论等复杂科学。

如果再用最简单直白的话说,机器学习就是让机器自己通过学习大量的资料,然后自己总结规则,归纳出自己学习的成果。

其应用场景其实相当广泛。网上的一些回答,倾向于把它的应用场景约束在一些非常科学或者仅仅数理研究上的东西上。而实际上,包括人脸识别、阿尔法狗等,都是机器学习的应用场景。

二、场景:人脸识别、下棋、开车等

对于人脸等图片的识别,需要大量输入相关资料,好让机器自己通过深度学习,从这些资料中归纳出机器能够识别的规律。

至于像阿尔法狗那样的计算机围棋高手,可谓是深入学习的楷模。在其第一代的时候,阿尔法狗可以输入各种棋谱提升自己的能力,从而远超人类同行。

而在第二位的时候机器甚至可以自己和自己下棋,因此除了更多人类都没有见识过的新棋谱。

随着人工智能的普及,机器学习将会被用到越来越广泛的领域里。毕竟整个世界有无穷无尽的信息和资料,而光靠人是无法全面接收的。让特斯拉那样的智能电动车,拥有高超的机器学习能力,持续学习每天瞬息万变的交通情况,那么使时间长反而性能就会越好,

这也正是深度学习的强项,在算法一定的情况之下,唯有更大数量,更全面的数据才能够更好地展现算法的优势,甚至改良计算机的算法。

2019年十大最佳深度学习框架


作者 | Python语音识别

来源 | 涛哥聊Python

虽然我们大多数人都惊叹为什么DL这么好?在使用大量数据进行训练时,它在准确性方面非常出色。近几年随着深度学习算法的发展,出现了很多深度学习的框架,这些框架各有所长,各具特色。下面将为大家介绍2019年最受欢迎的十大深度学习框架。

TensorFlow

谷歌的Tensorflow可以说是当今最受欢迎的深度学习框架。Gmail,Uber,Airbnb,Nvidia以及其他许多知名品牌都在使用。TF是目前深度学习的主流框架,Tensorflow主要特性:

TensorFlow支持python、JavaScript、C ++、Java和Go,C#和Julia等多种编程语言。 TF不仅拥有强大的计算集群,还可以在iOS和Android等移动平台上运行模型。 TF编程入门难度较大。初学者需要仔细考虑神经网络的架构,正确评估输入和输出数据的维度和数量。 TF使用静态计算图进行操作 。也就是说我们需要先定义图形,然后运行计算,如果我们需要对架构进行更改,我们会重新训练模型。选择这样的方法是为了提高效率,但是许多现代神经网络工具能够在学习过程中考虑改进而不会显着降低学习速度。在这方面,TensorFlow的主要竞争对手是PyTorch 。

TensorFlow优点:

它非常适合创建和试验深度学习架构,便于数据集成,如输入图形,SQL表和图像。 它得到谷歌的支持,这就说明该模型短期内不会被抛弃,因此值得投入时间来学习它。 PyTorch

Tensorflow之后用于深度学习的主要框架是PyTorch。PyTorch框架是Facebook开发的,已被Twitter和Salesforce等公司使用。

PyTorch基本特性:

与TensorFlow不同,PyTorch库使用动态更新的图形进行操作 。这意味着它可以在流程中更改体系结构。 在PyTorch中,您可以使用标准调试器 ,例如pdb或PyCharm。

PyTorch优点:

训练神经网络的过程简单明了。同时,PyTorch支持数据并行和分布式学习模型,并且还包含许多预先训练的模型。 PyTorch更适合小型项目和原型设计。 Sonnet

Sonnet深度学习框架是建立在TensorFlow的基础之上。它是DeepMind用于创建具有复杂架构的神经网络。

Sonnet基本特性:

面向对象的库,在开发神经网络(NN)或其他机器学习(ML)算法时更加抽象。 Sonnet的想法是构造对应于神经网络的特定部分的主要Python对象。此外,这些对象独立地连接到计算TensorFlow图。分离创建对象并将其与图形相关联的过程简化了高级体系结构的设计。

Sonnet优点:

Sonnet的主要优点是可以使用它来重现DeepMind论文中展示的研究,比Keras更容易,因为DeepMind论文模型就是使用Sonnet搭建的。 Keras

Keras是一个机器学习框架,如果您拥有大量数据和/或你想快速入门深度学习,那么Keras将非常适合学习。Keras是TensorFlow高级集成APi,可以非常方便的和TensorFlow进行融合。这是我强烈推荐学习的一个库。

Keras基本特性:

除了Tensorflow之外,Keras还是其他流行的库(如Theano和CNTK)的高级API。 在Keras中更容易创建大规模的深度学习模型,但Keras框架环境配置比其他底层框架要复杂一些。

Keras优点:

对于刚刚入门的人来说,Keras是最好的深度学习框架。它是学习和原型化简单概念的理想选择,可以理解各种模型和学习过程的本质。 Keras是一个简洁的API。 可以快速帮助您创建应用程序。 Keras中代码更加可读和简洁。 Keras模型序列化/反序列化API,回调和使用Python生成器的数据流非常成熟。

顺便说一下TensorFlow和Keras的对比:

PS:Tensorflow处于底层框架:这和MXNet,Theano和PyTorch等框架一样。包括实现诸如广义矩阵 - 矩阵乘法和诸如卷积运算的神经网络原语之类的数学运算。

Keras处于高度集成框架。虽然更容易创建模型,但是面对复杂的网络结构时可能不如TensorFlow。

MXNet

MXNet是一种高度可扩展的深度学习工具,可用于各种设备。虽然与TensorFlow相比,它似乎没有被广泛使用,但MXNet的增长可能会因为成为一个Apache项目而得到提升。

MXNet基本特性:

该框架支持多种语言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多个GPU和许多机器上非常有效地并行计算。

MXNet优点:

支持多个GPU(具有优化的计算和快速上下文切换) 清晰且易于维护的代码(Python,R,Scala和其他API) 快速解决问题的能力(对于像我这样的深度学习新手至关重要)

虽然它不像TF那么受欢迎,但MXNet具有详细的文档并且易于使用,能够在命令式和符号式编程风格之间进行选择,使其成为初学者和经验丰富的工程师的理想选择。

GLUON

Gluon是一个更好的深度学习框架,可以用来创建复杂的模型。GLUON基本特性:

Gluon的特殊性是具有一个灵活的界面,简化了原型设计,构建和培训深度学习模型,而不会牺牲学习速度。 Gluon基于MXNet,提供简单的API,简化深度学习模型的创建。 与PyTorch类似,Gluon框架支持使用动态图表 ,将其与高性能MXNet相结合。从这个角度来看,Gluon看起来像是分布式计算的Keras非常有趣的替代品。

GLUON优点:

在Gluon中,您可以使用简单,清晰和简洁的代码定义神经网络。 它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的情况下提供开发过程的灵活性。 Gluon可以定义动态的神经网络模型,这意味着它们可以动态构建,使用任何结构,并使用Python的任何本机控制流。 SWIFT

当你听到Swift时,您可能会考虑iOS或MacOS的应用程序开发。但是如果你正在学习深度学习,那么你一定听说过Swens for Tensorflow。通过直接与通用编程语言集成,Swift for TensorFlow可以以前所未有的方式表达更强大的算法。SWIFT基本特性:

可以轻松获得可微分的自定义数据结构。 下一代API 。通过实践和研究获得的新API更易于使用且更强大。 在TensorFlow的基础上 ,Swift API为您提供对所有底层TensorFlow运算符的直接调用。 基于Jupyter、LLDB或者Swift in Colab的编程工具提高了您的工作效率。

SWIFT优点:

如果动态语言不适合您的任务,那么这将是一个很好的选择。当你训练运行了几个小时,然后你的程序遇到类型错误,那么使用Swift,一种静态类型语言。您将看到代码错误的地方。 Chainer

直到CMU的DyNet和Facebook的PyTorch出现之前,Chainer是动态计算图或网络的领先神经网络框架,它允许输入数据长度不一致。chainer基本特性:

Chainer代码是在Numpy和CuPy库的基础之上用纯Python编写的, Chainer是第一个使用动态架构模型的框架。

Chainer优点:

通过自己的基准测试,Chainer明显比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的测试组中最慢的。 比TensorFlow更好的GPU和GPU数据中心性能。最近Chainer成为GPU数据中心性能的全球冠军。 DL4J

那些使用Java或Scala的人应该注意DL4J(Deep Learning for Java的简称)。DL4J的基本特性:

DL4J中的神经网络训练通过簇的迭代并行计算。 该过程由Hadoop和Spark架构支持。 使用Java允许您在Android设备的程序开发周期中使用。

DL4J优点:

如果您正在寻找一个良好的Java深度学习框架,这会是一个非常好的平台。 ONNX

ONNX项目诞生于微软和Facebook,旨在寻找深度学习模型呈现的开放格式。ONNX简化了在人工智能的不同工作方式之间传递模型的过程。因此ONNX具有各种深度学习框架的优点。

ONNX基本特性:

ONNX使模型能够在一个框架中进行训练并转移到另一个框架中进行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,并且还有许多其他常见框架和库的连接器。

ONNX优点:

对于PyTorch开发人员来说,ONNX是一个好的选择。但是对于那些喜欢TensorFlow的人来说,Keras等可能好一点。 总结

那么您应该使用哪种深度学习框架?下面是几点建议:

如果你刚刚开始学习,那么最好的选择是Keras 。 出于研究目的,请选择PyTorch 。 对于生产,您需要关注环境。因此对于Google Cloud,最好的选择是TensorFlow ,适用于AWS - MXNet和Gluon 。 Android开发人员应该关注D4LJ ,对于iOS来说, Core ML会破坏类似的任务范围。 最后, ONNX将帮助解决不同框架之间的交互问题。

cornernet转tensorrt


cornernet转成tensorrt时需要利用中间件onnx,所以第一步需要将pytorch模型转成onnx格式
ONNX:
2.1ONNXOverview
开放式神经网络交换(ONNX)是迈向开放式生态系统的第一步,它使AI开发人员能够随着项目的发展选择合适的工具。ONNX为AI模型提供开源格式。它定义了可扩展的计算图模型,以及内置运算符和标准数据类型的定义。最初的ONNX专注于推理(评估)所需的功能。ONNX解释计算图的可移植,它使用graph的序列化格式。它不一定是框架选择在内部使用和操作计算的形式。例如,如果在优化过程中操作更有效,则实现可以在存储器中以不同方式表示模型。
2.2ONNXmodel:
模型结构的主要目的是将元数据(metadata)与图形(graph)相关联,图形包含所有可执行元素。首先,读取模型文件时使用元数据,为实现提供所需的信息,以确定它是否能够:执行模型,生成日志消息,错误报告等功能。此外元数据对工具很有用,例如IDE和模型库,它需要它来告知用户给定模型的目的和特征。
2.2.1ONNXOperatorSets:
每个模型必须明确命名它依赖于其功能的运算符集。操作员集定义可用的操作符,其版本和状态。每个模型按其域定义导入的运算符集。所有模型都隐式导入默认的ONNX运算符集。
2.2.2ONNXOperator
图(graph)中使用的每个运算符必须由模型(model)导入的一个运算符集明确声明。
2.3.1ONNXGraph
序列化图由一组元数据字段(metadata),模型参数列表(alistofmodelparameters,)和计算节点列表组成(alistofcomputationnodes)。
每个计算数据流图被构造为拓扑排序的节点列表,这些节点形成图形,其必须没有周期。每个节点代表对运营商的呼叫。每个节点具有零个或多个输入以及一个或多个输出。

如何在后台部署深度学习模型


搭建深度学习后台服务器

我们的Keras深度学习REST API将能够批量处理图像,扩展到多台机器(包括多台web服务器和Redis实例),并在负载均衡器之后进行循环调度。

为此,我们将使用:

  • KerasRedis(内存数据结构存储)

  • Flask (Python的微web框架)

  • 消息队列和消息代理编程范例

  • 本篇文章的整体思路如下:

    我们将首先简要讨论Redis数据存储,以及如何使用它促进消息队列和消息代理。然后,我们将通过安装所需的Python包来配置Python开发环境,以构建我们的Keras深度学习REST API。一旦配置了开发环境,就可以使用Flask web框架实现实际的Keras深度学习REST API。在实现之后,我们将启动Redis和Flask服务器,然后使用cURL和Python向我们的深度学习API端点提交推理请求。最后,我们将以对构建自己的深度学习REST API时应该牢记的注意事项的简短讨论结束。

    第一部分:简要介绍Redis如何作为REST API消息代理/消息队列

    图片1:Redis可以用作我们深度学习REST API的消息代理/消息队列

    Redis是内存中的数据存储。它不同于简单的键/值存储(比如memcached),因为它可以存储实际的数据结构。今天我们将使用Redis作为消息代理/消息队列。这包括:

  • 在我们的机器上运行Redis

  • 将数据(图像)按照队列的方式用Redis存储,并依次由我们的REST API处理

  • 为新批输入图像循环访问Redis

  • 对图像进行分类并将结果返回给客户端

  • 文章中对Redis官网有一个超链接(


什么叫做深度学习框架,其作用是什么


深度学习框架是一种为了深度学习开发而生的工具,库和预训练模型等资源的总和。有了这种框架,看似复杂神秘的深度学习模型开发被大大简化,成为AI开发者的必用利器。

目前,TensorFlow和PyTorch明显领先,其他框架势微。如下图所示,基于TensorFlow和PyTorch的开源项目,明显领先其它框架。注:Keras不算完整的AI框架,另外KerasAPI已经成为TF2.0的高层API。

TensorFlow 是市场需求最多,也是增长最快的框架,它的领先地位不会在短期内被颠覆。 PyTorch 也在迅速发展,尤其在学术界,越来越多的论文代码基于PyTorch。它在工作列表中的大量增加证明了其使用和需求的增加。

TensorFlow和PyTorch两种框架未来相当时间内会趋同共存。现在PyTorch的在学术界广泛采用;而TensorFlow依赖强大的部署能力,是应用首选。未来TensorFlow2.0大大提高易用性(集成Keras,支持动态库EagerExecution等); PyTorch也在利用ONNX提高部署能力。TensorFlow和PyTorch会越来越趋同。

TensorFlow和PyTorch已是未来几年最主流的深度学习框架。围绕这两种框架的软,硬件,和开发者生态将会迅猛发展,新框架越来越难以成长,其他框架差距越来越大。


Matlab能导出onnx格式吗


Matlab能导出onnx格式。

首先打开电脑上的“matlab”软件,此处以下图中的代码为例,绘制出一个三维图像。meshgrid函数用于生成网格点。可以使用自己喜欢的例子来制作动画。

在matlab工作输入:% 11是你保存时的文件名,需要加单引号,否则打不开。特别注意最好将这个文件复制到matlab工作文件夹。

如果你不知道是哪个文件夹,可以看看matlab左边的窗口,或者按下组合键Ctrl+O,或者打开菜单栏上面的Home-》open。

优势特点:

(1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来。

(2) 具有完备的图形处理功能,实现计算结果和编程的可视化。

(3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握。

(4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。


X模型的X模型解释


X模型的左边描述的是针对单独程序片段所进行的相互分离的编码和测试,此后将进行频繁的交接,通过集成最终成为可执行的程序,然后再对这些可执行程序进行测试。己通过集成测试的成品可以进行封装并提交给用户,也可以作为更大规模和范围内集成的一部分。多根并行的曲线表示变更可以在各个部分发生。由图中可见,X模型还定位了探索性测试,这是不进行事先计划的特殊类型的测试,这一方式往往能帮助有经验的测试人员在测试计划之外发现更多的软件错误。但这样可能对测试造成人力、物力和财力的浪费,对测试员的熟练程度要求比较高。