Я занимаюсь разработкой приложения для Android, которое будет содержать модель тензорного потока для автономного вывода.
Я знаю, что невозможно полностью избежать того, чтобы кто-то украл мою модель, но я бы хотел, чтобы кто-то попробовал это сделать.
Я думал, что моя модель .tflite будет находиться внутри .apk, но без веса верхнего слоя. Затем во время выполнения я мог загрузить веса последнего слоя и загрузить его в память.
Итак, если кто-то попытается украсть мою модель, он получит бесполезную модель, потому что она не может быть использована из-за недостающих весов последнего слоя.
- Можно создать модель tflite без весов последнего слоя?
- Можно ли загрузить эти веса в уже загруженную модель в память?
Вот как я загружаю свою модель .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);
}
- Существуют ли другие способы сделать мою модель более безопасной? Мне действительно нужно сделать вывод локально.