microsoft / onnxjs

ONNX.js: run ONNX models using JavaScript
Other
1.77k stars 129 forks source link

attribute.ts:122 Uncaught (in promise) Error: graph attribute is not supported yet #302

Open dewball345 opened 3 years ago

dewball345 commented 3 years ago

Hello There,

I recently did transfer-learning on efficientdet and I wanted to convert it into javascript using onnx.js. It worked wonderfully in python, but it failed to work in javascript.

I got the error, attribute.ts:122 Uncaught (in promise) Error: graph attribute is not supported yet, and I'm really not sure what that means and how to fix it.

This was my process:

HERE is the notebook I used to train the model and export both the saved model and tensorflowjs.

I then used the saved model and converted it into onnx format by using THIS tutorial. My model worked in python.

After this I ran my model in javascript. My load_model function was:

async function runExample() {
    // Create an ONNX inference session with WebGL backend.
    const session = new onnx.InferenceSession({ backendHint: "webgl" });

    // Load an ONNX model. This model is Resnet50 that takes a 1*3*224*224 image and classifies it.
    await session.loadModel("./model.onnx");

}

When i used their default efficientDet(which used d2), I got TypeError: cannot resolve operator 'Cast' with opsets: ai.onnx v12, and when I used my transfer-learned efficientDet(which used d0), I got Uncaught (in promise) Error: graph attribute is not supported yet

Why is this happening?

Thanks

elaith9 commented 3 years ago

Any update on this?

fs-eire commented 3 years ago

This looks like some operators are not supported by ONNX.js WebGL backend. The first error indicates that 'Cast' operator is not implemented, and the second error indicates that one of the "subgraph" operators ( If, Loop, Scan ) is used, which is not supported yet.

we are working on migrating ONNX.js to ONNX Runtime Web which offers enhanced user experience and improved performance. Please visit ONNX Runtime Web to get more details. Please try 'wasm' backend for capabilities of all operators.