pytorch - 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 输出会生成一个可加载的模型,但这是不正确的。
到底是怎么回事?有没有前进的道路,或者我基本上被卡住了?