如何实现相互转换: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之间的主要内容,如果未能解决你的问题,请参考以下文章

json和string 之间的相互转换

JSON对象和字符串之间的相互转换

XML编程总结——使用JAXB进行java对象和xml格式之间的相互转换

Json对象和字符串之间的相互转换

JAVA里面json和java对象之间的相互转换

JSON对象和字符串之间的相互转换 – JSON.parse() 和 JSON.stringify()