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

7qhs6swi  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(217)

我制作了自己的应用程序模型并将其保存在Keras中作为.h5文件。我使用PyQt5制作了GUI应用程序,此应用程序使用了此模型。我尝试在没有任何关于深度学习模型的信息的情况下部署此应用程序。我对这种情况有一些疑问。
1.我可以隐藏或加密我的模型以防止其架构和重量暴露吗?
1.如果Keras不支持加密模型,是否有其他库(如PyTorch)支持此功能?
我期待着听到任何建议。谢谢你的回答。

ttcibm8c

ttcibm8c1#

模型加密不是keraspytorch的正式组成部分。
我认为如果你想隐藏一些东西,Python是一个大问题。AFAIK,使用它来隐藏你的解决方案是不可能的,我将概述我将做什么来“保护”模型(这些都是相当长的,所以请确保你真的需要这种保护[或者确切的保护级别])。

提供Python解决方案

PySyft可以处理PyTorch和Keras,但它是用于安全多方计算的。因为用户可以访问你的Python代码(你提到的PyQT 5)和所有敏感数据(在这个例子中是模型),他们可以很容易地恢复它。

可能的解决方案

如果我是你,我会选择简单的密码保护的存档(AES或.zip)。对于第一种情况,我找到了this post和相关的TFSecured repository,它通过Python对tensorflow模型进行AES加密,并允许你在C中加载保存的加密protobuf模型文件(这应该是你的选择,原因如下)。
别碰Python
如果你想严格保护你的模型(而不是某种简单的混淆),你就根本不应该在用户端使用Python。
没有办法编译Python的代码,尤其是那些使用了Keras、Tensorflow或PyTorch等大量ML库的代码。虽然有一些像PyInstaller这样的程序,但众所周知,要让它处理复杂的依赖关系是很难的。即使你这样做了,用户仍然可以获得代码,尽管可能会有点困难(PyInstaller只是将Python、依赖项和应用程序捆绑为一个单独的归档文件,稍后会将其解压缩)。
您可以使用pyarmor或a-like进一步混淆代码,但如果有人下定决心,这一切都很容易逆转。
C
语言
无论您选择keras/tensorflow还是pytorch,您都可以选择较低级别,并使用C加载网络。
由于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上完成。另一方面,你必须用Qt 5在C中重写你的PyQt 5应用程序。

9fkzdhlc

9fkzdhlc2#

我只是觉得你需要一个编译好的模型文件,你的客户不应该知道模型的架构。
这样的话你可以看看这个
它支持所有的框架,也有使用python的特权
看一看here

相关问题