如何实现相互转换:ONNX和JSON之间
Posted 吴建明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现相互转换:ONNX和JSON之间相关的知识,希望对你有一定的参考价值。
如何实现相互转换:ONNX和JSON之间
ONNX模型的修改可以通过转成JSON文件再将JSON文件转回ONNX。
以一个Conv算子构成的模型为例:
ONNX转JSON
使用MessageToJson进行转换,如下将一个conv算子构成的ONNX模型转成JSON
import onnx
from google.protobuf.json_format import MessageToJson, Parse
onnx_model = onnx.load("Conv.onnx")
message = MessageToJson(onnx_model)
with open("conv.json", "w") as fo:
fo.write(message)
转换之后模型由JSON表示:
"irVersion": "7",
"producerName": "onnx-example",
"graph":
"node": [
"input": [
"X",
"W",
"B"
],
"output": [
"Y"
],
"opType": "Conv",
"attribute": [
"name": "strides",
"ints": [
"2",
"2"
],
"type": "INTS"
]
],
"name": "test_conv_mode",
"initializer": [
"dims": [
"2",
"2",
"3",
"3"
],
"dataType": 1,
"floatData": [
-0.6021352410316467,
...
],
"name": "W"
,
"dims": [
"2"
],
"dataType": 1,
"floatData": [
1.0,
2.0
],
"name": "B"
],
"input": [
"name": "X",
"type":
"tensorType":
"elemType": 1,
"shape":
"dim": [
"dimValue": "1"
,
"dimValue": "2"
,
"dimValue": "4"
,
"dimValue": "4"
]
],
"output": [
"name": "Y",
"type":
"tensorType":
"elemType": 1,
"shape":
"dim": [
"dimValue": "1"
,
"dimValue": "2"
,
"dimValue": "2"
,
"dimValue": "2"
]
]
,
"opsetImport": [
"version": "12"
]
JSON转ONNX
在上述json中增加padding属性:
使用Parse模块解析成ONNX:
with open("conv.json", "r") as fi:
onnx_json = json.loads(fi.read())
onnx_str = json.dumps(onnx_json)
convert_model = Parse(onnx_str, onnx.ModelProto())
onnx.save(convert_model, "Conv_1.onnx")
存储为onnx格式之后再可视化可以看到Conv算子增加了padding属性。
参考文献链接:
https://blog.csdn.net/u010580016/article/details/119791691
JAVA里面json和java对象之间的相互转换
1. 把java 对象列表转换为json对象数组,并转为字符串
JSONArray array = JSONArray.fromObject(list);
String jsonstr = array.toString();
2. 把java对象转换成json对象,并转化为字符串
JSONObject object = JSONObject.fromObject(user);
Log4jInit.ysulogger.debug(object.toString());
3.把JSON字符串转换为JAVA 对象数组
JSONArray json = JSONArray.fromObject(userStr);//userStr是json字符串
List<User> users= (List<User>)JSONArray.toCollection(json, User.class);
4.把JSON字符串转换为JAVA 对象
JSONObject jsonobject = JSONObject.fromObject(jsonStr);
User user= (User)JSONObject.toBean(object,User.class);
以上是关于如何实现相互转换:ONNX和JSON之间的主要内容,如果未能解决你的问题,请参考以下文章