没有先验层和 softmax 层的 YOLACT onnx 的 xrunc coreml 模型错误

Posted

技术标签:

【中文标题】没有先验层和 softmax 层的 YOLACT onnx 的 xrunc coreml 模型错误【英文标题】:xrunc coreml model error for YOLACT onnx with no priors layer and softmax layer 【发布时间】:2020-09-30 17:20:02 【问题描述】:

我已将 YOLACT pytorch 模型转换为没有 softmax 和先验层的 onnx。 然后我尝试将 onnx 转换为 coreml。终端显示它没有错误地完成。 它还显示模型编译完成,并且没有错误如下。

210/211: Converting Node Type Concat 211/211: Converting Node Type Concat Translation to CoreML spec completed. Now compiling the CoreML model. Model Compilation done.

但是当我在macos上编译coreml模型时,错误显示:

xcrun coremlc compile yolact_test_nosoftmax_simplify.mlmodel

coremlc: Error: compiler error: Espresso exception: Invalid blob shape generic_elementwise_kernel: cannot broadcast [18, 18, 128, 1, 399] and [35, 35, 128, 1, 399]

我现在不知道如何调试。任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

您的模型中有一个操作尝试将操作应用于大小为 (18, 18, 128, 1, 399) 的张量和大小为 (35, 35, 128, 1, 399) 的张量。这两个张量形状不兼容,因此出现错误消息。

要解决此问题,您需要找出模型中发生这种情况的位置,然后解决问题。可能是 PyTorch -> ONNX 转换出现问题,或者 ONNX -> Core ML 转换出现问题。

【讨论】:

ONNX 模型没问题,因为我可以运行模型来获得正确的分割掩码。此外,从ONNX模型转换的mnn模型也没有问题,也可以得到正确的预测。 那么肯定是ONNX -> Core ML转换出错了。 应该是。感谢您的回复。 新的 PyTorch-Converter 应该支持这一点。你能试试 PyTorch 转换器(coremltools.readme.io/docs/pytorch-conversion)吗?由于改进了类型推断和优化支持,PyTorch 转换器得到了很好的优化并且比 ONNX-CoreML 转换器更健壮。

以上是关于没有先验层和 softmax 层的 YOLACT onnx 的 xrunc coreml 模型错误的主要内容,如果未能解决你的问题,请参考以下文章

聊聊池化层和步长为2的卷积层

聊聊池化层和步长为2的卷积层

如果可以激活多个输出,softmax 层的替换是啥?

输出层的 softmax 和 sigmoid 函数

Atitit 会话层和表示层的异同

用numpy实现CNN卷积神经网络