1. ONNX
1.1 ONNX简介
onnx(Open Neural Network Exchange)是微软和Facebook提出用来表示深度学习模型的开放格式。可以将任意训练框架(e.g. TensorFlow/Pytorch/OneFlow/Paddle)训练的模型统一转换为ONNX这种格式进行存储。
ONNX不仅存储神经网络模型的权重,也存储了模型的结构信息以及网络中每一层的输入输出和一些其他的辅助信息。
ONNX使用的是Protobuf这个序列化数据结构去存储神经网络的权重信息。
1.2 ProtoBuf简介
ONNX使用的是Protobuf这个序列化数据结构去存储神经网络的权重信息。Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API(摘自官方介绍)。
其组织格式核心定义在于onnx.proto,其中定义了Model/Graph/Node/ValueInfo/Tensor/Attribute层面的数据结构。整图通过各节点(Node)的input/output指向关系构建模型图的拓扑结构。
基于ONNX模型,官方提供了一系列相关工具:模型转化/模型优化(simplifier等)/模型部署(Runtime)/模型可视化(Netron等)等。