Objective-C 插件和 CoreML 模型在电子邮件或 Box 传输后失败

Posted

技术标签:

【中文标题】Objective-C 插件和 CoreML 模型在电子邮件或 Box 传输后失败【英文标题】:Objective-C plugin and CoreML model failing after email or Box transfer 【发布时间】:2020-12-01 11:14:57 【问题描述】:

我有一个用 Objective-C 编写的插件,它包含一个 CoreML 模型。插件和 ML 模型在本地编译和运行良好。如果我通过 Box 通过电子邮件发送或传输插件模型和 coreml 模型,我的插件会崩溃并引发损坏的错误。我可以通过删除终端中的扩展属性来使插件正常工作:xattr -cr me/myplugin.plugin 但代码的 ML 部分仍然失败。

如果我在 XCode 中进行监控,我会在 coreml 模型失败时注意到以下内容:

[coreml] Input feature input_layer required but not passed to neural network.
[coreml] Failure verifying inputs.

通过电子邮件/邮箱传输时,是否有一些签名或附加属性会导致此问题?

【问题讨论】:

你找出问题所在了吗? 【参考方案1】:

是否有一些签名或附加属性会导致这种情况 通过电子邮件/邮箱转移时出现问题?

因为您可以访问每个文件的两个版本(通过邮箱发送/传输之前,以及传输之后)。

转到每个文件的两个版本并执行以下操作:

ls -la

如果它具有扩展属性,则会有一个 @ 符号。例如:

drwxr-xr-x@ 254 hoakley staff 8636 24 Jul 18:39 miscDocs

如果传输后的版本没有@符号,则它们没有扩展属性。

然后为每个文件(两个版本)做:

xattr -l filepath

这将显示每个文件的扩展属性。 您应该比较每个文件的两个版本的属性并查看差异。这应该回答你的问题。如果没有差异,则没有添加或删除扩展属性。

阅读:https://eclecticlight.co/2017/08/14/show-me-your-metadata-extended-attributes-in-macos-sierra/

【讨论】:

xattr -l 肯定会显示添加的属性,但在 xattr -cr 之后,原始模型和转移模型是相同的。转移的那个仍然会导致崩溃,尽管原来的工作正常......还有什么我可能会丢失的吗? @user3470496 在执行 -cr 之前您是否检查过属性的值是否相同? -cr 前不同,-cr 后相同 @user3470496 原版是否有任何扩展属性?如果是这样,您不应该删除它们 - 只需确保两个文件中的值相同。

以上是关于Objective-C 插件和 CoreML 模型在电子邮件或 Box 传输后失败的主要内容,如果未能解决你的问题,请参考以下文章

CoreML 模型在 coremltools 和 Xcode 之间产生不同的结果

CoreML 和 YOLOv3 性能问题

我们可以在 Server 上编译 CoreML 模型吗?

继续训练 CoreML 模型

图像识别的 CoreML 模型预测仅适用于 iPhone 11 和 12 模型

将 Caffe 模型转换为 CoreML