如何在 Tensorflow.js 中保护(混淆/DRM)经过训练的模型权重?

2024-04-13

我正在开发一个基于 React 的 Web 应用程序,该应用程序使用 Tensorflow.js 在客户端的浏览器中实时运行 AI 模型。我从头开始训练了这个人工智能模型,我想保护它不被拦截并在其他项目中使用。是否有任何保护措施可以做到这一点(混淆、DRM 等)?

从商业角度来说,我会only就像在我的网络应用程序上工作的模型一样,在其他地方都没有。

讨论(1 https://www.reddit.com/r/MachineLearning/comments/7k6int/d_how_do_you_obfuscate_your_model_before_sending/ 2 https://stackoverflow.com/questions/45321123/tensorflow-model-protection-on-mobile 3 https://github.com/tensorflow/tensorflow/issues/9501)我发现这更适合本机应用程序,而不是网络应用程序。

Here https://github.com/justadudewhohacks/face-api.js/tree/master/weights是一个使用 Tensorflow.js 的开源 Web 应用程序示例。这些权重是我希望在我的应用程序中保护的内容的示例。


客户端代码混淆永远无法完全阻止它。请改用服务器。

混淆

如果您的客户端应用程序包含模型,那么用户将能够以某种方式提取它。你可以让用户变得更难,但这总是有可能的。一些让它变得更难的技术是:

  • 混淆 https://stackoverflow.com/q/194397/5627599你的代码:这样用户将无法轻松阅读您的代码和注释。根据您的构建工具,当您生成“生产就绪”构建时,这可能已经为您完成。
  • 混淆库及其公共 API:即使您的代码被混淆,用户仍然可以通过查看库的公共 API 调用来猜测发生了什么。示例:在以下位置设置断点相当容易model.predict函数并从那里调试您的代码。通过混淆库及其 API,这将变得更加困难。
  • 在您的代码中添加“特殊检查”:您还可以检查代码运行的页面是否是您的页面(例如,域是否匹配)等。您还想混淆此代码。

即使您的代码被完全混淆并受到良好保护,您的客户端代码仍然在某处包含您的模型。通过这些方法,总是可以以某种方式提取您的模型。

服务器端方法

为了使您无法获得模型,您需要采用不同的方法。只把你的“愚蠢逻辑”放在客户端上。排除您想要保护的代码部分。相反,您在服务器上提供一个 API 来执行代码的“受保护部分”。

这样,而不是运行model.predict在客户端,您可以向后端发出 AJAX 请求(带有参数),然后返回结果。这样用户只能看到输入和输出,而无法提取模型本身。

请记住,这意味着需要做更多的工作,因为您不仅需要为客户端应用程序编写代码,还需要为服务器端应用程序(包括 API)编写代码。根据您的应用程序的外观(例如:它是否有登录?),这可能需要更多代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tensorflow.js 中保护(混淆/DRM)经过训练的模型权重? 的相关文章

随机推荐