隐藏 CoreML 模型 (.mlmodel) 文件

Posted

技术标签:

【中文标题】隐藏 CoreML 模型 (.mlmodel) 文件【英文标题】:Hiding CoreML model (.mlmodel) files 【发布时间】:2019-06-19 13:19:27 【问题描述】:

我正在开展一个项目,该项目涉及将 AI 对象检测功能添加到现有 ios APP。我能够训练自己的 DNN 模型并转换为 CoreML 的 .mlmodel 格式。

现在我需要将包含 .mlmodel 文件的工作转移给另一个开发人员进行集成。但是,我不希望他们在这个项目之外使用我训练有素的 .mlmodel 文件(根据合同)。有什么方法可以“隐藏” .mlmodel 文件,使它们只能用于这个特定的应用程序,而不能简单地复制和保存以供其他用途?

我对 iOS 库和框架进行了一些快速研究,但我仍然不确定这是否是我正在寻找的解决方案。

【问题讨论】:

【参考方案1】:

不。一旦有人可以访问您的 mlmodel 文件或编译版本 mlmodelc,他们就可以在其他地方使用它。

例如,您可以从 App Store 下载一个应用,查看 IPA 文件,将其 mlmodelc 文件夹复制到您自己的应用中,然后立即开始使用该模型。

为防止外人窃取您的模型,您可以对模型进行加密(就像加密任何其他文件一样),但这只有在您可以隐藏解密密钥的情况下才有效。您还可以在模型中添加自定义层,这样如果没有此自定义层的代码,它就会变得无用。

但是,如果您雇用外部开发人员来开发您的应用程序,这些解决方案将不起作用,因为他们将 - 出于必要 - 需要访问这些解密密钥和源代码文件。

我不确定您到底希望其他开发人员做什么,但如果您不信任他们,那么:

    找一个您信任的新开发者, 准备好执行合同,或 给他们一个版本的 mlmodel 文件,权重被随机数替换。该模型仍然有效,但会给出无意义的预测。开发人员完成工作后,将模型替换为真实模型。显然,如果他们需要将模型用于他们需要做的任何工作,这不是一个好的解决方案。

【讨论】:

感谢您的回复,Matthijs。我注意到当我在 Xcode 项目目录中打开它们时,我通过 cocoapod 添加到我以前的 iOS 项目中的框架只包含头文件。所以我猜如果内置框架(或库)可以隐藏实现?不确定是否可以以相同的方式隐藏 .mlmodel... 框架是代码和资源的集合。应该可以将 mlmodel 添加到框架中,但是如果您随后查看框架文件(带有显示包内容),那么 mlmodelc 文件夹将清晰可见。因此,只有当您的开发人员不知道如何查看框架内部时,这才是安全的。 ;-) 但实际上,这听起来不像是健康的工作关系。 同样的问题,我认为这不能回答问题,我们真的想在我们的 SDK 中隐藏 .mlmodel 文件。

以上是关于隐藏 CoreML 模型 (.mlmodel) 文件的主要内容,如果未能解决你的问题,请参考以下文章

CoreML 出错:源文件无效,导入 mymodel.mlmodel 时

CoreML:我可以在一个项目中使用两个机器学习模型(mlmodel 文件)吗? [复制]

CoreML MLModel 预测进度

预热 CoreML MLModel

如何将 CoreML 模型转换为 TensorFlow 模型?

如何在 TensorFlow、Keras 或 PyTorch 中部署 CoreML 模型?