ONNX格式解析之google protobuf解析

ONNX模型是按照google protobuf格式保存的,模型训练的目的就是为了得到变量的权值,只不过是纯数字罢了,但是我们也不能就这样把这些数字一个一个地写入文件,因为在要保存的模型文件里,不光要保存权值,也要告诉之后用这个模型的人,模型结构是怎么样的,所以需要合理地设计保存文件的格式。不同的机器学习框架都有自己的模型保存格式,例如 Keras 的模型格式是 h5,而 Tensorflow 和 onnx 的保存格式就是 protobuf。

其实 protobuf 使用起来非常简单方便,就是自己先定义一个数据保存格式,然后用 protoc 自动生成各个语言的解析代码,现在支持 C, C++, C#, Java, Javascript, Objective-C, PHP, Python, Ruby。

举个例子,我们创建这么个文件 amessage.proto

syntax = "proto3";

message AMessage {
  int32 a=1; 
  int32 b=2;
}

那么我们就定义了一种二进制的数据存储格式,里面包含 2 个数字,其中 a = 1,代表 id 为 1 的数据是个 int32 类型,它的名字是 a,并不是代表 a 这个变量数值是 1,同样的道理,id 为 2 的数据是个 int32 类型,它的名字是 b。这里 id 是不能重复的。

所以使用 protobuf 需要先定义一个数据格式,然后自动生成 编码 和 解码 的代码,供不同语言使用,因为能自动生成代码,所以 protobuf 简单好用,非常受欢迎,建议大家使用 protov3。

为了帮助我们更加直观的看到模型结构,这里推荐一个工具 protobuf editor,可以很方便地解析 protobuf 文件,它的下载地址是

ProtoBufEditor download | SourceForge.netONNX格式解析之google protobuf解析https://sourceforge.net/projects/protobufeditor/软件下载下来后,按照下面的流程就可以解析之前我们生产的 mnist.onnx 文件了, onnx.proto3格式的定义可以在这里下载:

onnx/onnx.proto3 at master · onnx/onnx · GitHub

protobuf安装环境需要事先安装jre环境,安装成功的界面如下所示:

ONNX格式解析之google protobuf解析

解析mnist模型:

将模型文件和模型protobuf描述所在位置设置给proto buffer editor工具,开始解析:

ONNX格式解析之google protobuf解析


结束!

上一篇:2021-10-19


下一篇:uniapp使用echart