我正在使用Firebase MLKIT在本地应用程序中实现“. tflite”模型。model.tflite文件大小约为132 MB。它显示了错误原因:
onFailure:java.lang.IllegalStateException:内部错误:准备张量分配时意外失败:此解释器不支持常规的张量流操作。确保在推理之前调用Flex委托。节点号17(Flex)准备失败。
和错误消息:
本地模型加载失败,模型选项为:本地模型路径:model.tflite。远程模型名称:未指定。
该模型用于[出于某种目的]将一幅正常图像转换为黑白图像。
我也列出了依赖项,
我也访问了链接,但无法理解如何处理我的案例中的这个问题:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/java/src/test/java/org/tensorflow/lite/InterpreterFlexTest.java
我也附上了代码片段:
“”
FirebaseCustomLocalModel localModel = null;
try {
localModel = new FirebaseCustomLocalModel.Builder()
.setAssetFilePath("model.tflite")
.build();
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "onClick: "+e);
}
FirebaseModelInterpreter interpreter;
FirebaseModelInterpreterOptions options =
new FirebaseModelInterpreterOptions.Builder(localModel).build();
try {
interpreter = FirebaseModelInterpreter.getInstance(options);
FirebaseModelInputOutputOptions inputOutputOptions =
new FirebaseModelInputOutputOptions.Builder()
.setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 256, 256, 3})
.setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{420, 580})
.build();
Bitmap bitmap = getYourInputImage();
bitmap = Bitmap.createScaledBitmap(bitmap, 256, 256, true);
int batchNum = 0;
float[][][][] input = new float[1][256][256][3];
for (int x = 0; x < 256; x++) {
for (int y = 0; y < 256; y++) {
int pixel = bitmap.getPixel(x, y);
// Normalize channel values to [-1.0, 1.0]. This requirement varies by
// model. For example, some models might require values to be normalized
// to the range [0.0, 1.0] instead.
input[batchNum][x][y][0] = (Color.red(pixel) - 127) / 128.0f;
input[batchNum][x][y][1] = (Color.green(pixel) - 127) / 128.0f;
input[batchNum][x][y][2] = (Color.blue(pixel) - 127) / 128.0f;
}
}
FirebaseModelInputs inputs = new FirebaseModelInputs.Builder()
.add(input) // add() as many input arrays as your model requires
.build();
// Log.d(TAG, "onClick: "+inputs.toString()+"\n"+inputOutputOptions.toString());
interpreter.run(inputs, inputOutputOptions)
.addOnSuccessListener(
new OnSuccessListener<FirebaseModelOutputs>() {
@Override
public void onSuccess(FirebaseModelOutputs result) {
// ...
float[][] output = result.getOutput(0);
float[] probabilities = output[0];
Log.d(TAG, "onSuccess: "+result.getOutput(0).toString());
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
Log.d(TAG, "onFailure: "+e.getCause()+"\n\n"+e.getLocalizedMessage()+"\n\n"+e.getMessage());
}
});
} catch (FirebaseMLException e) {
Log.d(TAG, "onClick: "+e);
// ...
}
“”
让我知道需要做什么。
Firebase Model解释器不支持Flex操作。您应该直接使用tflite解释器(org.tensorflow.解释器)。
使用FirebaseModelManager下载tflite文件:
Task<File> fileTask = FirebaseModelManager.getInstance()
.getLatestModelFile(remoteModel);
File modelFile = fileTask.getResult();
将flex的aar依赖项与Firebase依赖项一起添加到您的build.gradle:https://www.tensorflow.org/lite/guide/ops_select#android_aar
从那时起,你可以遵循https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/java/src/test/java/org/tensorflow/lite/InterpreterFlexTest.java要点的一般路径
FlexDelegate delegate = new FlexDelegate();
Interpreter.Options options = new Interpreter.Options().addDelegate(delegate);
Interpreter interpreter = new Interpreter(fileBuffer, options);
interpreter.run(inputs, outputs)
希望那有帮助
我正在使用tflite进行语义分割。我有一个经过训练的模型,可以从背景中分割对象,这个模型是在深度实验室上训练的。 我已经使用下面的代码将这个模型(冻结的推理图)转换为tflite格式: 模型在Android上加载,但是当我尝试运行推理时,它会给我这个错误: 原因:java.lang.IllegalStateException:内部错误:准备张量分配时出现意外失败:third_party/tens
问题内容: 我已经使用python 3.6在Windows机器上安装了opencv,没有任何问题,使用: 但是当我尝试导入cv2时,出现以下错误 我看过这篇文章 它说cv2不适用于python 3我在想这是否已修复或是否有解决方法 问题答案: 您可以从此非官方站点上在Windows 32位或64位计算机上下载最新的适用于Python 3.6的OpenCV 3.2.0,查找以开头的文件。然后键入以下
亲爱的开发人员和NN爱好者,我已经量化了一个模型(8位训练后量化),我正在尝试使用tflite Interpter对得到的模型进行推理。 在某些情况下,解释器运行正常,我可以按预期对量化模型进行推理,输出与原始模型足够接近。因此,我的设置似乎是正确的。然而,根据具体的量化模型,我经常遇到以下运行时错误。 由于误差似乎与偏差的比例有关,我使用偏差正则化器重新训练了原始模型。但是,错误仍然存在。 你对
大家好。有人能帮帮我吗?我只是创建react应用程序,然后我立即启动它。然后我得到了类似这样的错误。我不知道出了什么问题 编译失败。./src/index.js 1:68模块解析失败:使用以下加载程序处理了意外的令牌(1:68)文件: null
问题内容: 节点版本为 崩溃期间的内存使用情况未超出 产生此错误的代码: 要检查是否存在递归堆栈大小问题,我使用–stack-size = 60000参数运行了下一个代码 并得到了 然后,我运行了导致严重错误的代码:CALL_AND_RETRY_LAST分配失败-使用相同的–stack-size = 60000参数处理内存不足,并且没有得到。 因此,我得出结论与递归堆栈大小没有共同之处。 我该如何