Twi*_*dox 4 deployment deep-learning keras
我为应用程序制作了自己的模型,并将其作为 .h5 文件保存在 Keras 中。我使用 PyQt5 制作了 GUI 应用程序,这个应用程序使用了这个模型。我正在尝试在没有任何关于深度学习模型的信息的情况下部署此应用程序。我对这种情况有一些疑问。
我期待听到任何建议。谢谢您的回答。
模型加密不是正式的一部分,keras
也不是pytorch
.
如果你想隐藏一些东西,我认为 Python 是一个大问题。AFAIK 使用它来隐藏你的解决方案是不可能的,我将概述我将如何“保护”模型(那些很长,所以确保你真的需要这种保护[或确切的保护级别]) .
存在PySyft它可以同时处理PyTorch和Keras但它用于安全多方计算。由于用户可以访问您的 Python 代码(您提到了 PyQT5)和所有合理的数据(在这种情况下为模型),他们将能够很容易地恢复它。
如果我是你,我会选择简单的受密码保护的存档(AES 或.zip
)。对于第一种情况,我找到了这篇文章和相关的TFSecured 存储库,它通过 Python 对 tensorflow 模型进行 AES 加密,并允许您在 C++ 中加载保存的加密 protobuf 模型文件(这应该是您要走的路,原因如下)。
您是否想认真保护您的模型(而不是某种单纯的混淆),您根本不应该在用户端使用 Python。
没有办法编译 Python 的代码,尤其是那些使用 Keras、Tensorflow 或 PyTorch 等重型 ML 库的代码。尽管有像PyInstaller这样的程序,但众所周知,让它与复杂的依赖项一起工作是非常困难的。即使你这样做了,用户仍然可以访问代码,尽管它可能会有点困难(PyInstaller 只是将 Python、你的依赖项和应用程序捆绑为一个单独的存档,稍后解压缩)。
您可以使用pyarmor或类似方法进一步混淆代码,但如果有人下定决心,这一切都很容易逆转。
无论您是去keras/tensorflow
还是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);
Run Code Online (Sandbox Code Playgroud)
对编译后的 C++ 代码进行逆向工程以获取埋在其中的密钥要困难得多。类似的过程也可以PyTorch
通过一些第三方工具/库来完成。另一方面,您必须使用 Qt5 用 C++ 重写您的 PyQt5 应用程序。
归档时间: |
|
查看次数: |
1991 次 |
最近记录: |