问题标签 [onnx-coreml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pytorch - 通过 ONNX 从 PyTorch 转换为 CoreML 时缺少权重向量
我正在尝试通过 ONNX 将 PyTorch 模型转换为 CoreML,但是 ONNX-->CoreML 转换缺少权重向量?
我正在关注这里的教程,它做出了这样的声明:
第 3 步:将模型转换为 CoreML
就像运行
convert
函数一样简单。生成的对象是一个 coremltools MLModel 对象,您可以将其保存到文件中并稍后在 XCode 中导入。
cml = onnx_coreml.convert(model)
不幸的是,当我尝试这样做时,它失败了。
这是我的代码:
这是该print(graph)
行给出的内容。
这是错误消息:
据我所知,它说重量张量%1[FLOAT, 64x3x5x5]
丢失了。这就是我保存模型的方式:
ONNX 加载它很好 - 这只是我从 ONNX 转换到 CoreML 的步骤。
任何帮助弄清楚这一点将不胜感激。我确定我做错了很多其他事情,但我现在只需要导出这个东西。
谢谢,
pytorch - 通过 onnx 将 PyTorch Unet(“提拉米苏”)转换为 coreml 时出错
我正在尝试通过 onnx 将 pytorch“tiramisu”UNet(来自:https ://github.com/bfortuner/pytorch_tiramisu )转换为 coreml,我在 onnx-coreml 中遇到了这个错误_operators.py
:
TypeError: Error while converting op of type: Concat. Error message: Unsupported axis 1 in input of shape
关于我如何解决这个问题的任何想法?图层文件在这里,供参考:https ://github.com/bfortuner/pytorch_tiramisu/blob/master/models/layers.py
更新 1:因此,进一步深入研究,我注意到我的一些 graph.shape_dicts 包含没有值/形状的键:例如,'422': (1, 324, 2, 4), '423': (1, 324, 2, 4), '424': (1, 12, 2, 4), '425': (1, 48, 2, 4), '426': (), '427': (), '428': (), '429': (), '430': () [...]
我真的不确定这是怎么发生的,或者它是否是我的原始模型、onnx 或 onnx-coreml 问题。if node.inputs[0] in graph.shape_dict:
但考虑到这一点,我if len(graph.shape_dict[node.inputs[0]]) != 0:
在_operators.py
. 这允许转换完成,但在我尝试模型是否实际转换正确之前我不会知道......
更新 2:好的,所以生成的 mlmodel 在 Xcode 中验证失败,validator error: Layer '427' of type 320 has 1 inputs but expects at least 2.
我猜这是(简单地)忽略我在上面的“更新 1”中找到的空 shape_dict 值的结果。但显然模型是不正确的。错误可能源于onnx吗?
ios - 为 coremlmodel 塑造输入
我有一个 coremlmodel 输入形状MultiArray (Float32 67 x 256 x 320)
我很难塑造这个模型的输入。目前,我正在尝试像这样实现它,
稍后我将不得不用这种大小的矩阵替换 rand。我首先将其用于测试目的。
任何关于如何塑造输入以适应体积的指针将不胜感激。
[斯维克斯]
python - pytorch 模型的 Coreml 模型浮点输入
我有一个 pytorch 模型,它将3 x width x height
图像作为输入,像素值在0-1
例如,在 pytorch 中输入
我将此模型转换为 coreml 并导出了一个 mlmodel,它采用正确尺寸的输入
但是,我的预测是不正确的,因为模型期望两者之间有一个浮点值,0-1
而 cvpixelbuffer 是一个 int bwetween0-255
我试图像这样规范化模型内部的值,
但是,当此操作在 coreml 级别的模型内部完成时, int * float
被转换为int
并且所有值本质上都是0
Cast op 不支持导出,例如,x = x.float()
我如何确保我的输入正确地进行预测?本质上,我想将其pixel rgb and float divide 255.0
传递给模型进行推理?
pytorch - CoreML:为 ONNX RandomNormal 创建自定义层
我已经在 PyTorch 中训练了一个需要转换为 CoreML 的 VAE。从这个线程PyTorch VAE 无法转换为 onnx我能够导出 ONNX 模型,但是,这只是将问题进一步推到了 ONNX-CoreML 阶段。
包含torch.randn()
调用的原始函数是 reparametrize func:
解决方案当然是创建一个自定义层,但我在创建一个没有输入的层时遇到了问题(即,它只是一个randn()
调用)。
我可以通过以下定义完成 CoreML 转换:
我使用以下方法进行转换:
我还应该注意,在mlmodel
导出完成时,会打印以下内容:
带入.mlmodel
Xcode 抱怨Layer '62' of type 500 has 0 inputs but expects at least 1.
所以我想知道如何为层指定一种“虚拟”输入,因为它实际上没有输入——它只是一个包装器torch.randn()
(或者,更具体地说,onnx RandonNormal
操作) . 我应该澄清一下,我确实需要整个 VAE,而不仅仅是解码器,因为我实际上是在使用整个过程来“纠正”我的输入(即编码器z
根据输入估计我的向量,然后解码器生成输入的最接近的可推广预测)。
非常感谢任何帮助。
更新:好的,我终于在 Xcode 中加载了一个版本(感谢@MattijsHollemans 和他的书!)。这originalConversion.mlmodel
是将我的模型从 ONNX 转换为 CoreML 的初始输出。为此,我必须手动插入RandomNormal
图层的输入。我无缘无故地做到了 (64, 28, 28) - 我知道我的批量大小是 64,我的输入是 28 x 28(但大概它也可能是 (1, 1, 1),因为它是一个“虚拟"):
这在 Xcode 中加载,但我还没有在我的应用程序中测试模型的功能。由于附加层很简单,并且输入实际上是虚假的,非功能输入(只是为了让 Xcode 开心),我不认为这会是一个问题,但如果它不运行,我会再次发布适当地。
更新 2:不幸的是,模型不会在运行时加载。它失败了[espresso] [Espresso::handle_ex_plan] exception=Failed in 2nd reshape after missing custom layer info.
我觉得非常奇怪和令人困惑的是,检查model.espresso.shape
时,我发现几乎每个节点的形状都像:
我有两个问题/疑虑:1)最明显的是,为什么所有值都为零(除了输入节点之外的所有值都是这种情况),以及 2)为什么它看起来是一个顺序模型,而它只是一个相当传统的模型VAE?在同一个应用程序中打开model.espresso.shape
一个功能齐全的 GAN,我看到节点的格式为:
也就是说,它们包含合理的形状信息,并且它们没有字段seq
。
非常非常迷茫……
更新3:我也刚刚注意到编译器报告了错误:IMPORTANT: new sequence length computation failed, falling back to old path. Your compilation was sucessful, but please file a radar on Core ML | Neural Networks and attach the model that generated this message.
这是原始的 PyTorch 模型:
python - ONNX 何时决定包含 Gather 操作?
我想这个问题很模糊,但我有一个刚刚构建的 PyTorch 模型,它无法转换为 CoreML,因为 ONNX 添加了Gather
操作。完整的模型实际上是两个独立模型的合并,旨在通过尽可能长时间地在 GPU/Metal 上进行处理来提高性能。
构建这个“复合”模型需要我创建几个切片,形式为x = y[:, 0]
,我想知道这些是否可能是Gather
操作的原因?
我确实意识到我可以创建一个自定义层,但是我刚刚经历了 CoreML 中自定义层的可怕惨败,这浪费了很多很多时间,而且让我无处可去,所以我试图找到另一种解决问题的方法.
如果找到绕过这些切片的方法会阻止 ONNX 添加Gather
,我愿意寻找解决方案。
任何想法表示赞赏。
pytorch - 将 pytorch 模型转换为 core-ml 时出错
张量的形状:
期望值C
为(1, 129, 128, 256)
此代码在 pytorch 上运行,但在转换为 core-ml 时,它给了我以下错误:
machine-learning - 使用 ONNX 将 YOLOV3 Pytorch 模型转换为 coreml 以在 IOS 应用程序中时面临问题
我要转换的模型:https ://github.com/ultralytics/yolov3
我正在尝试将此 pytorch yolov3 模型转换为 coreML,为此我使用了 ONNX,它用于将模型从一个平台转换为另一个平台。它正在转换模型,当我在 xcode 中运行它时,我可以看到它的输入和输出不同,它没有检测到任何对象,也没有在屏幕上显示任何矩形。
我已经尝试过本教程并遵循了类似的步骤,但这次是针对 YOLOV3。谷歌文档:https ://drive.google.com/drive/folders/1uxgUBemJVw9wZsdpboYbzUN4bcRhsuAI
我还检查了 Yolov3 自己也提供了“onnx”文件,所以我什至尝试使用该文件并将其转换为 coreML,但它仍然没有检测到对象并提供错误的输入/输出值。
将 Pytroch 转换为 ONNX
名为“yoloToOnnx.py”的文件内容:
命令:
将 ONNX 模型转换为 CoreML 模型:
文件 onnx_to_coreml.py 内容:
命令:
我期待转换后我应该能够在我的 IOS 应用程序中使用这个模型,它将检测带有矩形及其名称的不同对象。
奇怪的是,在转换它时没有抛出任何错误,它给出了编译成功的消息,但在 IOS App 中使用时没有给出预期的输出。
machine-learning - 将 Pytorch 图像分类器转换为 mlmodel 时出现问题:无论 img 如何,都返回相同的 softmax 输出
我使用 pytorch 训练和测试了一个图像分类器(Resnet34、Fast.ai、3 类),并按learn.predict()
预期工作。当我转换 pytorch -> onnx -> mlmodel 时,无论我提交的图像如何,它都会预测相同的 softmax 值。
这是我的 pytorch 模型:
要将其转换为 .onnx,我需要先对图像数据进行归一化并将其展平。我找到了这个教程,它适用于 fastai/onnx-coreml 的早期版本。我用以下课程做到这一点:
为了构建整个模型,我将 ImageScale 层、模型和 softmax 函数连接起来,如下所示:
最终看起来像这样:
我像这样转换为 .onnx:
我像这样从 .onnx 转换为 .mlmodel :
当我使用 coremltools 调用 predict 时,无论我输入什么图像,我都会得到相同的输出:
可能的问题: 1. 在转换之前我没有正确设置 Sequential 2. Coreml 或 onnx 无法处理非方形图像
我尝试了一堆不同的输入,但一直得到相同的,所以任何帮助将不胜感激!
这是netron的我的头部和尾部的屏幕截图:
头:
尾巴:
python - 使用 onnx_coreml 转换节点类型切片时出错
我已将我的暗网 YOLOv3-SPP 模型转换为 PyTorch .pt 模型。然后我将.pt 转换为.onnx。我的最终目标是建立一个 CoreML 模型。我尝试使用这个GitHub 存储库。但是,在转换我的模型时,我遇到了这样的错误......
我正在使用的脚本是这个......
这个简单的 python 脚本应该可以工作,但我不知道为什么会出现这个错误。我对机器学习很陌生,所以我什至不明白如何开始尝试解决这个问题。我应该怎么做才能成功地将我的 .onnx 模型转换为 CoreML?