首页 > 解决方案 > onnxjs opset 版本和 MaxPool

问题描述

我正在尝试使用以下代码从 torchvision 导出 FCN:

model= models.segmentation.fcn_resnet101(pretrained=True, progress=True, num_classes=21, aux_loss=None)
model.eval()
x = torch.randn(1,3,512,512)
torch_out = model(x)
torch.onnx.export(model, x, "seg_rn.onnx", 
                    export_params=True, 
                    opset_version=11, 
                    do_constant_folding=True, 
                    verbose=True
                    )

导出模型时,我需要最小 opset 11 来支持 pytorch 的插值工作方式,并且在 python onnx 运行时运行时,onnx 模型的输出证实了这一点。

在 python onnx 运行时运行很好,但是当我在 onnxjs 中加载模型时,像这样:

var session = new InferenceSession();
const modelURL = "./models/seg_rn.onnx";
await session.loadModel(modelURL);

我明白了Uncaught (in promise) TypeError: cannot resolve operator 'Shape' with opsets: ai.onnx v11

如果我去创建我自己的位副本torchvision.models.segmentation,我可以摆脱关于 Shape 的错误(通过为输入指定一个静态形状并告诉插值调整大小应该是什么),但是我得到了基本相同的错误:Uncaught (in promise) TypeError: cannot resolve operator 'MaxPool' with opsets: ai.onnx v11但这次是参考 MaxPool。忽略测试并使用 opset v10 输出会生成一个可加载的模型,但这是不正确的。

到底是怎么回事?有没有前进的道路,或者我基本上被卡住了?

标签: pytorchonnx

解决方案


推荐阅读