如何在 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)经过训练的模型权重? 的相关文章

  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 将一个文本框的内容复制到另一个文本框

    假设在文本框中输入了一个条目 是否可以在第二个文本框中保留相同的输入文本 如果是这样 这是如何完成的
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • iframe 重新加载按钮

    我浏览了很多网站 但似乎没有一个能正常工作 或者我不明白它们 我想要一个刷新某个 iframe 的简单按钮 该按钮将位于父页面上 并且 iframe 名称为 Right 有很多方法可以做到这一点 假设这个iframe markup 我们可以
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何从顺序键盘导航中删除 Vuetify 附加图标

    在带有 Vuetify 的 Vue js 应用程序中 我有一组用v text field并且其中有一个append icon为了切换文本可见性 如下所示
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 选中复选框时提交表单

    有没有办法在选中复选框时提交表单
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 在javascript中动态生成行?

    我是 javascript 新手 我想在按下 Tab 时动态生成行 并希望获取在动态生成的行中输入的值 以便我可以在 servlet 代码中使用这些值 这是我的html
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐