我有这个模型: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 转换函数。
我建议有办法用可以转换的方法重写这个模块,对吗?但我不知道如何找到这个模块的来源。
所以我的问题是: 如果我以正确的方式思考,我如何找到模块的来源? 如果我错了,请告诉我正确的方法。
有点晚了,但似乎您遇到了 CoreML 转换的常见障碍。不支持某些 PyTorch 操作,例如 pythonop。下一步最好是跟踪模型的前向传播并确定可能出现问题的地方。从那里开始,TorchScript 等工具可以帮助使转换更加顺利。
我在将 Wav2Lip 模型转换为 CoreML 时遇到了类似的挑战,并发布了一份指南,其中包含可能有帮助的提示和步骤:
https://github.com/Ialzouby/Wav2Lip-PyTorch-To-CoreML/
希望有帮助,祝你好运!
代码首先将模型加载到 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')