ONNX

发布时间:2021-11-05  栏目:人工智能, 图像处理, 工程部署, 机器学习, 机器视觉, 深度学习, 软件、框架及系统  评论:0 Comments

开放神经网络交换(Open Neural Network Exchange)简称ONNX是微软和Facebook提出用来表示深度学习模型的开放格式。所谓开放就是ONNX定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性。

换句话说,无论你使用何种训练框架训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),在训练完毕后你都可以将这些框架的模型统一转换为ONNX这种统一的格式进行存储。注意ONNX文件不仅仅存储了神经网络模型的权重,同时也存储了模型的结构信息以及网络中每一层的输入输出和一些其它的辅助信息。

 

通常我们在训练模型时可以使用很多不同的框架,比如有的同学喜欢用 Pytorch,有的同学喜欢使用 TensorFLow,也有的喜欢 MXNet,以及深度学习最开始流行的 Caffe等等,这样不同的训练框架就导致了产生不同的模型结果包,在模型进行部署推理时就需要不同的依赖库,而且同一个框架比如tensorflow 不同的版本之间的差异较大, 为了解决这个混乱问题,LF AI 这个组织联合 Facebook, MicroSoft等公司制定了机器学习模型的标准,这个标准叫做ONNX, Open Neural Network Exchage,所有其他框架产生的模型包 (.pth, .pb) 都可以转换成这个标准格式,转换成这个标准格式后,就可以使用统一的 ONNX Runtime等工具进行统一部署。

这其实可以和 JVM 对比,
A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

JAVA中有 JAVA 语言 + .jar 包 + JVM,同时还有其他的语言比如 Scala等也是建立在 JVM上运行的,因此不同的语言只要都最后将程序转换成 JVM可以统一识别的格式,就可以在统一的跨平台 JVM JAVA 虚拟机上运行。这里JVM使用的 包是二进制包,因此里面的内容是不可知的,人类难以直观理解的。

这里 ONNX 标准采取了谷歌开发 protocal buffers 作为格式标准,这个格式是在 XML, json的基础上发展的,是一个人类易理解的格式。ONNX 官网对ONNX的介绍如下:
ONNX defines a common set of operators – the building blocks of machine learning and deep learning models – and a common file format to enable AI developers to use models with a variety of frameworks, tools, runtimes, and compilers.
ONNX支持的模型来源,基本上囊括了我们日常使用的所有框架。

 

ONNX的文件格式,采用的是谷歌的 protocal buffers,和 caffe采用的一致。

 

对生成的ONNX进行可视化:

onnx的可是支持有两个,一个是 netron, 一个是百度飞桨开发的visualDL
这里介绍 netron的下载安装:https://github.com/lutzroeder/Netron,对于 mac用户可以安装成功直接打开软件进行图形化选取onnx地址就可以打开

ONNXRuntime的安装

https://github.com/microsoft/onnxruntime

留下评论

You must be logged in to post a comment.

相册集

pix pix pix pix pix pix

关于自己

杨文龙,微软Principal Engineering Manager, 曾在各家公司担任影像技术资深总监、数据科学团队资深经理、ADAS算法总监、资深深度学习工程师等职位,热爱创新发明,专注于人工智能、深度学习、图像处理、机器学习、算法、自然语言处理及软件等领域,目前发明有国际专利19篇,中国专利28篇。

联系我

个人技术笔记

welonshen@gmail.com

2015 in Shanghai