【问题标题】:Securing tensorflow-lite model保护 tensorflow-lite 模型
【发布时间】:2019-07-09 12:03:43
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序将包含一个用于离线推理的 tensorflow-lite 模型。

我知道完全避免有人偷我的模型是不可能的,但我想为尝试它的人制造困难。

我想将我的 .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. 还有其他方法可以让我的模型更安全吗?我真的需要在本地进行推断。

【问题讨论】:

    标签: android tensorflow tensorflow-lite


    【解决方案1】:

    如果我们谈论的是 Keras 模型(或 TF 中的任何其他模型),我们可以轻松移除最后一层,然后使用 tf.lite.TFLiteConverter 将其转换为 TF Lite 模型。这应该不是问题。

    现在,在 Python 中,获取最后一层的权重并将其转换为一个不错的 JSON 文件。此 JSON 文件可以托管在云端(例如 Firebase Cloud Storage),并且可以由应用下载。

    权重可以解析为array() 对象。来自 TF Lite 模型的动作可以与从 JSON 解析的权重进行点乘。最后,我们应用激活来提供我们确实需要的预测!

    该模型经过精确训练,很少用于任何其他用例。所以,我认为我们不必担心这一点。

    另外,如果我们使用一些云托管平台会更好,这些平台使用请求和 API,而不是直接加载原始模型。

    【讨论】:

    • 我看不到将 android 中的这些部分再次粘合在一起来进行推理。您能否提供一些可能有帮助的代码或链接?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多