Why do I get error: problem decoding CoreML document?

Why do I get error: problem decoding CoreML document?

我在 Xcode 9 Beta 上使用带有 Swift 4.0 的 CoreML。

如果您在项目导航器中 select 一个文件 VGG16.mlmodel,我会得到一个错误:There was an problem decoding this document CoreML

另外,在代码中我得到了错误 Use of unresolved identifier 'VGG16'Use of undeclared type 'VGG16'

VGG16.mlmodel 从这里下载 https://developer.apple.com/machine-learning/

可能是什么问题?

PS 对于模型 Places205-GoogLeNet、ResNet50 和 Inception v3 一切正常。

  1. 请 运行 ./setup.sh
  2. select VGG16.mlmodel 的目标,请参阅此 screenshot

根据要求,我会将我的评论充实为一个答案。

其他人也提到过这一点,但您很可能下载的文件已损坏,或者模型本身存在问题。首先,我强烈建议不要在移动设备上使用 VGG16 模型或相关模型,因为它们的大小非常大(VGG16 为 500 MB)。您将在 iPhone 6 上耗尽内存,只是加载模型,您的应用程序大小将是巨大的,并且在加载这些权重时您将有很长的初始化时间。

我建议使用像 SqueezeNet 变体这样的东西,它很小 (~5 MB),在 ImageNet 上训练时可以更准确,并且不像 Inception 系列那样计算量大。 Apple 在 Core ML WWDC 会议之一中提到使用其中之一。

当您将模型添加到您的 Xcode 项目时,请确保它确实已在您的目标中注册。 Xcode 的当前测试版有时会忘记将其添加到您的目标中,因此请突出显示模型并检查文件检查器以确保它是您的应用程序目标的一部分。如果模型不在您的目标中,Xcode 将不会 auto-generate Swift header 它。

对于具有 Dropout 的模型,我得到了同样的结果。尝试通过将权重复制到没有它们的新模型来删除这些层。