Skip to content

How to get ONNX input/output class from signature file? #29

@zydjohnHotmail

Description

@zydjohnHotmail

Hello:
I have installed Lobe Application in my Windows 10 PC, from this URL: https://www.lobe.ai/
I used a small dataset to train and get an ONNX model. This model is an image converter, it is not a classifier.

The following is the signature JSON file:
{
"doc_id": "2cc072ae-dbda-43c5-8db7-4c2515e0548d",
"doc_name": "model",
"doc_version": "9c8be1ab541b4591f46bb01fc60116cf",
"format": "onnx",
"version": 5,
"inputs": {
"Image": {
"dtype": "float32",
"shape": [null, 224, 224, 3],
"name": "Image:0"
}
},
"outputs": {
"Confidences": {
"dtype": "float32",
"shape": [null, 2],
"name": "2cc072ae-dbda-43c5-8db7-4c2515e0548d.9554adfa-5d26-484f-88d3-dea9f2f46f01/dense_2/Softmax:0"
}
},
"tags": [],
"classes": {
"Label": ["test_A", "test_B"]
},
"filename": "model.onnx",
"export_model_version": 1
}

I also use mlgen for Visual Studio 2019 from this URL, to generate some C# wrapper class, like this:
public sealed class ModelInput
{
public TensorFloat Image00; // shape(-1,224,224,3)
}

public sealed class ModelOutput
{
    public TensorFloat output2cc072ae0dbda043c508db704c2515e0548d09554adfa05d260484f088d30dea9f2f46f010dense_20Softmax00; // shape(-1,2)
}

public sealed class ModelModel
{
    private LearningModel model;
    private LearningModelSession session;
    private LearningModelBinding binding;
    public static async Task<ModelModel> CreateFromStreamAsync(IRandomAccessStreamReference stream)
    {
        ModelModel learningModel = new ModelModel();
        learningModel.model = await LearningModel.LoadFromStreamAsync(stream);
        learningModel.session = new LearningModelSession(learningModel.model);
        learningModel.binding = new LearningModelBinding(learningModel.session);
        return learningModel;
    }
    public async Task<ModelOutput> EvaluateAsync(ModelInput input)
    {
        binding.Bind("Image:0", input.Image00);
        var result = await session.EvaluateAsync(binding, "0");
        var output = new ModelOutput();
        output.output2cc072ae0dbda043c508db704c2515e0548d09554adfa05d260484f088d30dea9f2f46f010dense_20Softmax00 = result.Outputs["2cc072ae-dbda-43c5-8db7-4c2515e0548d.9554adfa-5d26-484f-88d3-dea9f2f46f01/dense_2/Softmax:0"] as TensorFloat;
        return output;
    }

But I don’t quite understand the meaning of the above class.
If I want to use an input image and generate an output image from the ONNX model.
How I can write an OnnxInput and OnnxOutputClass?
I have no idea about the input shape [null, …] means what and output shape [null, 2] means what?

By the way, the input/output name seems to be very long and meaningless.
Can I use python code to change the ONNX model, so it will show some meaningful names for input/output? For example, if I want to use output name like: Iamge2Sketch, not like this one:
"name": "2cc072ae-dbda-43c5-8db7-4c2515e0548d.9554adfa-5d26-484f-88d3-dea9f2f46f01/dense_2/Softmax:0"

I am using Visual Studio 2022 and 2019 on Windows 10, I also installed Python 3.9.
Please advise,
Thanks,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions