Защита модели tenorflow-lite - PullRequest
0 голосов
/ 09 июля 2019

Я занимаюсь разработкой приложения для Android, которое будет содержать модель тензорного потока для автономного вывода.

Я знаю, что невозможно полностью избежать того, чтобы кто-то украл мою модель, но я бы хотел, чтобы кто-то попробовал это сделать.

Я думал, что моя модель .tflite будет находиться внутри .apk, но без веса верхнего слоя. Затем во время выполнения я мог загрузить веса последнего слоя и загрузить его в память.

Итак, если кто-то попытается украсть мою модель, он получит бесполезную модель, потому что она не может быть использована из-за недостающих весов последнего слоя.

  1. Можно создать модель tflite без весов последнего слоя?
  2. Можно ли загрузить эти веса в уже загруженную модель в память?

Вот как я загружаю свою модель .tflite:

    tflite = new Interpreter(loadModelFile(), tfliteOptions);

    // loads tflite grapg from file
    private MappedByteBuffer loadModelFile() throws IOException {
        AssetFileDescriptor fileDescriptor = mAssetManager.openFd(chosen);
        FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
        FileChannel fileChannel = inputStream.getChannel();
        long startOffset = fileDescriptor.getStartOffset();
        long declaredLength = fileDescriptor.getDeclaredLength();
        return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
    }
  1. Существуют ли другие способы сделать мою модель более безопасной? Мне действительно нужно сделать вывод локально.

1 Ответ

0 голосов
/ 09 июля 2019

Если мы говорим о моделях Keras (или любой другой модели в TF), мы можем легко удалить последний слой и затем преобразовать его в модель TF Lite с помощью tf.lite.TFLiteConverter. Это не должно быть проблемой.

Теперь в Python получите вес последнего слоя и преобразуйте его в хороший файл JSON. Этот файл JSON может быть размещен в облаке (например, в облачном хранилище Firebase) и может быть загружен приложением.

Веса могут быть проанализированы как array() объект. Действия из модели TF Lite могут быть умножены на точки с весами, проанализированными из JSON. Наконец, мы применяем активацию для предоставления прогнозов, которые нам действительно нужны!

Модель обучена настолько точно, что ее редко можно использовать для любого другого случая использования. Поэтому я думаю, что нам не нужно беспокоиться об этом.

Кроме того, будет лучше, если мы будем использовать некоторые облачные хостинговые платформы, которые используют запросы и API вместо прямой загрузки необработанной модели.

...