多个按需动态加载的 CoreML 模型

Posted

技术标签:

【中文标题】多个按需动态加载的 CoreML 模型【英文标题】:Multiple and dynamically loaded CoreML models on demand 【发布时间】:2017-12-29 13:41:32 【问题描述】:

我正在开发一个 ios 11 应用程序以利用新的 CoreML 框架。我们的想法是使用不同的.mlmodel 文件来处理视频输入,并为用户提供选择所需模型对其进行分类的能力。

我有两个问题:

无法为每个 xcode 项目添加多个模型。 xcode 停止 生成强类型模型,我无法实例化它们 无法动态加载.mlmodel(假设我是按需下载的)。有没有办法动态加载.mlmodel

【问题讨论】:

1) 我的应用中有两个 sklearn 机器学习模型,一切正常。你有什么样的模型? 2)没有动态加载模型的好方法,但是有一个hacky的解决方法:***.com/a/45217508/2291058 当我添加两个以上的模型(只有两个 mlmodel 文件)作为我的项目的一部分时,它会停止为它们创建类。关于如何添加两个以上的 mlmodel 有什么技巧吗? 【参考方案1】:

Xcode 中存在一个错误,当存在多个模型时,有时会阻止代码生成。作为一种解决方法,您可以在项目设置中明确设置“CoreML 代码生成语言”(而不是 Automatic)。

至于动态加载模型:他们只是在 iOS 11 Beta 4 中添加了一个新 API,允许现在通过无线方式加载模型并在设备上编译它们,请参阅 here。

您不需要生成的类来执行模型,您可以initialize them from the compiled model file自己,但有一些小不便。只需检查生成的类,看看它是如何完成的。

【讨论】:

你也可以两者都做——在你的应用程序中提供一个“虚拟”模型,这样你就可以得到生成的漂亮包装类,然后使用新的 API 下载一个经过训练的具有相同接口的模型。生成的类有一个 init(contentsOf:) 初始化器,因此您可以将该类与从其他地方加载的 MLModel 文件一起使用。 @rickster 你真的不必那样做。只需检查为您生成的代码并构建您自己的包装类(您甚至可以完全复制它)。无需为此提供虚拟模型。

以上是关于多个按需动态加载的 CoreML 模型的主要内容,如果未能解决你的问题,请参考以下文章

项目复盘:通过动态脚本,实现按需加载语言包

Java类加载 - 双亲委派模型

动态加载 mlmodel

AngularJS项目中如何实现按需加载js文件?

Vue按需加载提升用户体验

无法使用 MLModel.compileModel 加载 CoreML 模型