Как скрыть или зашифровать мой собственный файл модели keras (например, h5) при развертывании? - PullRequest
2 голосов
/ 16 апреля 2020

Я сделал свою собственную модель для приложения и сохранил ее в Keras как файл .h5. и я сделал GUI Приложение, использующее PyQt5, и это приложение использует эту модель. Я пытаюсь развернуть это приложение без какой-либо информации о модели глубокого обучения. У меня есть несколько вопросов об этой ситуации.

  1. Могу ли я спрятать или зашифровать мою модель, чтобы предотвратить ее архитектуру и увеличение веса?
  2. Если Keras не поддерживает модель шифрования, есть ли какие-либо другие библиотеки (например, PyTorch), которые поддерживают эту функцию?

Я с нетерпением жду каких-либо советов. Спасибо за ваш ответ.

1 Ответ

1 голос
/ 16 апреля 2020

Модель шифрования официально не является частью keras или pytorch.

Я думаю, Python большая проблема, если вы хотите что-то скрыть. AFAIK, на самом деле не возможно спрятать ваше решение достаточно хорошо, используя его, я обрисую, что бы я сделал, чтобы «защитить» модель (они довольно длинные, поэтому убедитесь, что вам действительно нужна эта защита [или какой именно уровень защиты]) .

Предоставлено Python решений

Существует PySyft , который обрабатывает как PyTorch, так и Keras, но используется для безопасного многопартийного вычисления. Поскольку пользователи имеют доступ к вашему Python коду (вы упомянули PyQT5) и ко всем разумным данным (в данном случае к модели), они смогут довольно легко восстановить их.

Возможное решение

На вашем месте я бы go для простого архива, защищенного паролем (AES или .zip). Для первого случая я нашел этот пост и связанный TFSecured репозиторий , который выполняет шифрование AES модели тензорного потока через Python и позволяет загружать сохраненный зашифрованный файл модели protobuf в C ++ (это должен быть ваш путь к go, причины ниже).

Оставьте Python в покое

Хотите ли вы серьезно обезопасить свою модель (не какое-то простое запутывание), которое вам следует Не используйте Python на стороне пользователя.

Невозможно скомпилировать код Python, особенно тот, который использует тяжелые библиотеки ML, такие как Keras, Tensorflow или PyTorch. Хотя есть такие программы, как PyInstaller , очень сложно заставить его работать со сложными зависимостями. Даже если вы это сделаете, пользователи все равно смогут получить доступ к коду, хотя он может быть немного сложнее (PyInstaller просто объединяет Python, ваши зависимости и приложение в один архив, который позже распаковывается).

Вы также можете запутать код, используя pyarmor или подобный ему, но все это довольно легко изменить, если кто-то определится.

C ++

Являетесь ли вы go для keras/tensorflow или pytorch вы можете go нижнего уровня и использовать 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 также с помощью некоторых сторонних инструментов / библиотек. С другой стороны, вам придется переписать ваше приложение PyQt5 на C ++ с помощью Qt5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...