onnx模型存储规范使用profobuf协议定义,由onnx-ml.proto(3), onnx-data.proto(3), onnx-operators-ml.proto(3)等3个协议文件组成。
为了兼容protobuf2和protobuf3标准,每个协议文件都有2个版本,后缀为.proto和.proto3。
onnx-ml.proto(3)文件定义了Model.ModelProto是onnx模型文件的顶级容器。
message ModelProto {
ir_version
opset_import
GraphProto graph
…
}
message GraphProto {
repeated NodeProto node 图中的所有计算结点
repeated TesnorProto initializer 所有constant输入数据(模型参数,)
repeated ValueInfoProto input 输入变量的信息
repeated ValueInfoProto output 输出变量的信息
repeated ValueInfoProto value_info 图中其余变量的信息
}
TensorProto用于描述一个tensor的信息,如维度,数据类型,如何存储,具体的值是多少
message TensorProto {
repeated int64 dims 维度
int32 data_type 数据类型:1FLOAT, 6INT32, 7INT64, 10FLOAT16, 11DOUBLE …
根据情况数据可能存放在以下字段中
bytes raw_data
repeated double double_data
repeated float float_data
…
其它描述tensor的字段
}