[深度学习主流框架解析一] Onnx
1、模型文件协议解析
Onnx同样也是采用了Protobuf协议进行模型文件的整体构建,与Caffe相比,Onnx使用了多proto文件描述模型。因此,解析Onnx模型文件需要了解多个proto文件之间的关联。
总共的proto文件如下所示:
- onnx-data.proto
- onnx-ml.proto
- onnx-operators.proto
- onnx-operators-ml.proto
- onnx.proto
proto文件之间的依赖关系如下所示:
1.1、onnx.proto说明
整体的模型文件可见下图。
相关的特性如下所示:
- ModelProto是模型的最顶端的定义结构
- 没有定义具体的特定类型的网络层结构,使用NodeProto中的attribute统一定义了各类网络层
1.2、onnx-operators.proto说明
主要定义了OperatorProto和OperatorSetProto这两种消息类型,用于传递特定版本的和具体类型的网络层算子参数
1.3、onnx-ml.proto和onnx-operators-ml.proto说明
onnx-ml.proto等同于onnx.proto
onnx-operators-ml.proto等同于onnx-operators.proto
内部内容基本一致
1.4、onnx-data.proto说明
- 增加了SequenceProto、MapProto等基础的数据类型
- 增加了OptionalProto去包含所有的特殊的数据类型