【发布时间】:2020-09-03 02:42:38
【问题描述】:
我在 PyTorch 中有一个 seq2seq 模型,我想用 CoreML 运行它。将模型导出到 ONNX 时,输入尺寸固定为导出期间使用的张量的形状,并再次从 ONNX 转换为 CoreML。
import torch
from onnx_coreml import convert
x = torch.ones((32, 1, 1000)) # N x C x W
model = Model()
torch.onnx.export(model, x, 'example.onnx')
mlmodel = convert(model='example.onnx', minimum_ios_deployment_target='13')
mlmodel.save('example.mlmodel')
对于 ONNX 导出,您可以导出动态维度 -
torch.onnx.export(
model, x, 'example.onnx',
input_names = ['input'],
output_names = ['output'],
dynamic_axes={
'input' : {0 : 'batch', 2: 'width'},
'output' : {0 : 'batch', 1: 'owidth'},
}
)
但这会在转换为CoreML 时导致RunTimeWarning -
RuntimeWarning:您将无法在此 Core ML 模型上运行 predict()。潜在的异常消息是:错误编译模型:“编译器错误:找到大小为零的 Blob:
对于 CoreML 中的推理,我希望批量 (first) 和宽度 (last) 维度要么是动态的,要么能够静态更改它们。
这可能吗?
【问题讨论】:
标签: python pytorch coreml onnx onnx-coreml