我试图使用onnxjs导入ONNX模型,但我得到了以下错误:
Uncaught (in promise) TypeError: cannot resolve operator 'Cast' with opsets: ai.onnx v11下面显示了我的html文件中的代码片段。
<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>如何解决这个问题?
发布于 2022-02-25 09:25:07
这将加载Resnet 50模型
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);<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加载
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()}{'input_ids': ['batch', 'sequence'],
'attention_mask': ['batch', 'sequence'],
'token_type_ids': ['batch', 'sequence']}
{'output_0': ['batch', 2]}一个想法
您可能需要自己调试它,希望唯一的问题是cast操作符。
您开始查看这里操作符对onnxjs的支持,并重写操作符出现的部分模型。
例如,强制转换操作符只出现一次,您可以按以下方式找到它
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)会打印出来
Cast_2 Cast使用https://netron.app/ (或桌面版本),您可以看到

因此,您应该简单地重写您的注意力掩码在模型中的处理方式,一个可能的解决方案是让unsqueeze和cast操作在模型之外。
https://stackoverflow.com/questions/71259717
复制相似问题