如何在部署时隐藏或加密我自己的keras模型文件(如h5)?

2023-11-27

我为应用程序制作了自己的模型,并将其保存在 Keras 中作为 .h5 文件。我使用 PyQt5 制作了 GUI 应用程序,该应用程序使用此模型。我正在尝试在没有任何有关深度学习模型的信息的情况下部署此应用程序。 我对这种情况有一些疑问。

  1. 我可以隐藏或加密我的模型以防止其架构和重量暴露吗?
  2. 如果Keras不支持加密模型,是否有其他库(如PyTorch)支持此功能?

我期待听到任何建议。谢谢您的回答。


模型加密都不是官方的一部分keras nor pytorch.

我认为如果你想隐藏某些东西,Python 是一个大问题。据我所知,使用它来隐藏您的解决方案是不太可能的,我将概述我将如何“保护”模型(这些内容相当冗长,因此请确保您确实需要这种保护[或确切的保护级别]) 。

提供Python解决方案

那里存在PySyft它可以处理 PyTorch 和 Keras,但它用于安全多方计算。由于用户可以访问您的 Python 代码(您提到了 PyQT5)和所有敏感数据(本例中的模型),他们将能够非常轻松地恢复它。

可能的解决方案

如果我是你,我会选择简单的密码保护存档(AES 或.zip)。对于我发现的第一个案例这个帖子以及相关的TFSecured 存储库,它通过 Python 对张量流模型进行 AES 加密,并允许您加载 C++ 中保存的加密 protobuf 模型文件(这应该是您的选择,原因如下)。

留下Python吧

如果你想认真保护你的模型(而不是某种简单的混淆),你根本不应该在用户端使用 Python。

无法编译 Python 代码,尤其是使用 Keras、Tensorflow 或 PyTorch 等重型 ML 库的代码。虽然有类似的程序py安装程序众所周知,让它与复杂的依赖关系一起工作是非常困难的。即使您这样做,用户仍然能够获取代码,尽管可能会有点困难(PyInstaller 只是将 Python、您的依赖项和应用程序捆绑为一个存档,稍后再解压缩)。

您可以使用进一步混淆代码pyarmor或类似的事情,但如果有人下定决心,这一切都很容易逆转。

C++

无论你是为了keras/tensorflow or pytorch您可以进入较低级别并使用 C++ 来加载您的网络。

由于它是一种编译语言,您所要做的就是提供一个二进制文件(如果静态链接)或带有共享库的二进制文件。在 C++ 源代码中,您保留 AES/zip 密钥,如博客文章所示TFSecured:

#include <GraphDefDecryptor.hpp>

    ........


    tensorflow::GraphDef graph;
    // Decryption: 
    const std::string key = "JHEW8F7FE6F8E76W8F687WE6F8W8EF5";
    auto status = tfsecured::GraphDefDecryptAES(path,         // path to *.pb file (encrypted graph)
                                                graph,
                                                key);         // your key
    if (!status.ok()) {
        std::cout << status.error_message() << std::endl;
        return;
    }

    // Create session :
    std::unique_ptr<Session> session(NewSession(options));
    status = session->Create(graph);

对编译的 C++ 代码进行逆向工程以获取隐藏在其中的密钥会困难得多。可以执行类似的程序PyTorch以及通过一些第三方工具/库。另一方面,您必须使用 Qt5 用 C++ 重写 PyQt5 应用程序。

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

如何在部署时隐藏或加密我自己的keras模型文件(如h5)? 的相关文章

随机推荐