首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ONNX.js加载onnx模型

如何使用ONNX.js加载onnx模型
EN

Stack Overflow用户
提问于 2022-02-25 00:23:34
回答 1查看 599关注 0票数 1

我试图使用onnxjs导入ONNX模型,但我得到了以下错误:

代码语言:javascript
复制
Uncaught (in promise) TypeError: cannot resolve operator 'Cast' with opsets: ai.onnx v11

下面显示了我的html文件中的代码片段。

代码语言:javascript
复制
<html>
  <head> </head>
  <body>
    <!-- Load ONNX.js -->
    <script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"></script>
    <!-- Code that consume ONNX.js -->
    <script>
        async function test(){
            const sess = new onnx.InferenceSession()
            await sess.loadModel('./onnx_model.onnx')
            }
        test()
    </script>
  </body>
</html>

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-25 09:25:07

这将加载Resnet 50模型

代码语言:javascript
复制
const sess = new onnx.InferenceSession()
async function test(){
  console.time("loading model")
  await sess.loadModel('https://microsoft.github.io/onnxjs-demo/resnet50v2.onnx')
  console.timeEnd("loading model")

  console.log("model loaded");
}
document.querySelector('#load').addEventListener('click', test);
代码语言:javascript
复制
<script src="https://cdn.jsdelivr.net/npm/onnxjs/dist/onnx.min.js"></script>

<button id="load">load model</button>

这条消息暗示了铸造操作者不受opset 11支持的原因,也许您想使用Cast-9。也许你得创造一个新的模型。

编辑

您的模型使用using运行时python加载

代码语言:javascript
复制
sess = onnxruntime.InferenceSession('../../Downloads/onnx_model.onnx');
{i.name: i.shape for i in sess.get_inputs()}
{o.name: o.shape for o in sess.get_outputs()}
代码语言:javascript
复制
{'input_ids': ['batch', 'sequence'],
 'attention_mask': ['batch', 'sequence'],
 'token_type_ids': ['batch', 'sequence']}

{'output_0': ['batch', 2]}

一个想法

您可能需要自己调试它,希望唯一的问题是cast操作符。

您开始查看这里操作符对onnxjs的支持,并重写操作符出现的部分模型。

例如,强制转换操作符只出现一次,您可以按以下方式找到它

代码语言:javascript
复制
import onnx
model = onnx.load('../../Downloads/onnx_model.onnx')
for node in model.graph.node:
    if 'cast' in node.op_type.lower():
        print(node.name, node.op_type)

会打印出来

代码语言:javascript
复制
Cast_2 Cast

使用https://netron.app/ (或桌面版本),您可以看到

因此,您应该简单地重写您的注意力掩码在模型中的处理方式,一个可能的解决方案是让unsqueezecast操作在模型之外。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71259717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档