将 PyTorch 转换为 CoreML

问题描述 投票:0回答:2

我有这个模型:https://github.com/williamyang1991/DualStyleGAN并尝试将其转换为CoreML。到目前为止,我创建了原始 Colab 笔记本的副本,并在末尾附加了两个块:

!pip install coremltools
import coremltools as ct

#@title Convert inverted image.
inverted_latent = torch.Tensor(result_latents[0][4]).cuda().unsqueeze(0).unsqueeze(1)

with torch.no_grad():
    net.eval()

    [sampled_src, sampled_dst] = net(inverted_latent, input_is_latent=True)[0]

    traced_model = torch.jit.trace(net, inverted_latent)
    mlmodel = ct.convert(traced_model, inputs=[ct.ImageType(name="input", shape=inverted_latent.shape,bias=[-1,-1,-1],scale=2.0/255.0)])
    mlmodel.save("modelsaved.mlmodel")

要运行它,您应该将任何带有面的图像放入 /content 并放入 /usr/local/lib/python3.7/dist-packages/torchvision/transforms/featured.py 将第 545、546 行处的 round 方法替换为 np.round

但是随后失败了

mlmodel = ct.convert(...

与:

运行时错误:未实现操作“pythonop”的 PyTorch 转换函数。

我建议有办法用可以转换的方法重写这个模块,对吗?但我不知道如何找到这个模块的来源。

所以我的问题是: 如果我以正确的方式思考,我如何找到模块的来源? 如果我错了,请告诉我正确的方法。

python pytorch coremltools
2个回答
0
投票

有点晚了,但似乎您遇到了 CoreML 转换的常见障碍。不支持某些 PyTorch 操作,例如 pythonop。下一步最好是跟踪模型的前向传播并确定可能出现问题的地方。从那里开始,TorchScript 等工具可以帮助使转换更加顺利。

我在将 Wav2Lip 模型转换为 CoreML 时遇到了类似的挑战,并发布了一份指南,其中包含可能有帮助的提示和步骤:

https://github.com/Ialzouby/Wav2Lip-PyTorch-To-CoreML/

希望有帮助,祝你好运!


-1
投票

代码首先将模型加载到 PyTorch 中。 然后,代码将模型转换为 CoreML 格式并将其保存到 .mlmodel 文件中。下面的代码将采用现有的 PyTorch 模型并将其转换为具有输入和输出功能的 CoreML 模型。 输出保存在文件 example.mlmodel 中,该文件可以在 Xcode 或支持 CoreML 模型的任何其他开发环境中打开。

 import torch
 import coremltools


  model = torch.load('MyPyTorchModel.pt')


 coreml_model = coremltools.converters.pytorch.from_pytorch(model,
                                                           input_features= 
 ['input'],
                                                           output_features= 
 ['output'])


 coreml_model.save('MyCoreMLModel.mlmodel')
© www.soinside.com 2019 - 2024. All rights reserved.