CoreML 出错:源文件无效,导入 mymodel.mlmodel 时
Posted
技术标签:
【中文标题】CoreML 出错:源文件无效,导入 mymodel.mlmodel 时【英文标题】:error with CoreML: source file is not valid , when importing mymodel.mlmodel 【发布时间】:2019-06-23 17:10:00 【问题描述】:在构建包含 CoreML 模型的 ios 应用程序时遇到问题。 我使用this 示例代码在我的项目中实现coreML。 我可以在使用 repo 中的给定模型从 github 克隆示例代码时运行示例代码,但是当我粘贴到自己的模型中时出现错误:
lexical preprocessor issue
source file is not valid UTF-8
SSD_model.mlmodel
我的模型是用于生成边界框的 SSD 模型(而不仅仅是像 repo 模型那样的对象检测),所以这可能会产生问题。我使用 tensorflow 对象检测 API 对其进行了训练,并使用 this helpful blog post 将其导出到 coreML。我已经通过在为 SSD 模型制作的 another script 中测试它来验证我的模型运行良好。这是我现在如何导入模型的第一个示例的 sn-p:
#import <CoreML/CoreML.h>
#import <Vision/Vision.h>
#import "SSD_model.mlmodel"
- (void)viewDidLoad
[super viewDidLoad];
model = [[[SSD_model alloc] init] model]
m = [VNCoreMLModel modelForMLModel: model error:nil];
我需要对这个目标 C 代码进行更改以使其工作吗?或者我可能忘记的任何项目设置?谢谢!
【问题讨论】:
source file is not valid UTF-8
听起来像是编码问题,不一定与模型本身有关,而是与文件格式有关。您是否从其他平台复制模型?
【参考方案1】:
你得到这个错误是因为这个 => #import "SSD_model.mlmodel"
本质上,编译器会尝试导入一些源代码,但会找到不存在的东西。
您需要先编译此模型才能使用它。您可以通过Xcode 编译它(它会为您自动生成一个界面)或使用APIs 在运行时编译模型(这样您就可以更新您的模型而无需发布新版本的应用程序)。
注意:在您链接的示例中,作者导入了 SomeModel.h
(我认为这是 ObjC 的 autogen 标头)和 不是 SomeModel.mlmodel
。所以我想这也是你可能打算做的。
【讨论】:
感谢您指出这一点。将 SSD_model 导入更改为 .h 后,通过 xcode 自动生成它仍然失败并显示错误消息:clang: error: linker command failed with exit code 1: Undefined symbols for architecture arm64: "_OBJC_CLASS_$_MLModel", referenced from: objc-class-ref in SSD_model.o
对此有何想法?
您是否在目标设置中链接了CoreML
框架?
提示:您可以使用@import CoreML;
而不是#import <CoreML/CoreML.h>
,如果启用了框架自动链接 (CLANG_MODULES_AUTOLINK) 的设置(默认情况下 是),框架将是自动为您链接。
你所说的一切,它奏效了!:) 将 #import <CoreML/CoreML.h>
更改为 @import CoreML;
的最后一步,结合将“启用模块(在 Apple Clang 下)”设置更改为“是”是必要的,因为很有趣。
很高兴能帮到你:)以上是关于CoreML 出错:源文件无效,导入 mymodel.mlmodel 时的主要内容,如果未能解决你的问题,请参考以下文章
CoreML:异常 Espresso 异常:“无效状态”:空输出 blob
准备 CoreML 模型时出错:CoreML 代码生成不支持“<something>”
将 keras 模型转换为 coreml 时出错(“InputLayer”对象不可迭代)
Oracle错误——ORA-39002:操作无效ORA-39070:无法打开日志文件ORA-06512:在“SYS.UTL_FILE”,line