我正在尝试运行一个自定义的Tflie模型,以便在Android中进行分割。它在CPU上运行良好,但在使用GPU委托时,它崩溃时出现以下错误:
E/AndroidRuntime(30867): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(30867): Process: com.apptec.scansdk, PID: 30867
E/AndroidRuntime(30867): java.lang.RuntimeException: An error occurred while executing doInBackground()
E/AndroidRuntime(30867): at android.os.AsyncTask$3.done(AsyncTask.java:309)
E/AndroidRuntime(30867): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
E/AndroidRuntime(30867): at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
E/AndroidRuntime(30867): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime(30867): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
E/AndroidRuntime(30867): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
E/AndroidRuntime(30867): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
E/AndroidRuntime(30867): at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime(30867): Caused by: java.lang.IllegalArgumentException: Internal error: Failed to run on the given Interpreter: TensorDescriptor don't have selector with name - Slice
E/AndroidRuntime(30867): Falling back to OpenGL
E/AndroidRuntime(30867): TfLiteGpuDelegate Invoke: GpuDelegate must run on the same thread where it was initialized.
E/AndroidRuntime(30867): Node number 105 (TfLiteGpuDelegateV2) failed to invoke.
E/AndroidRuntime(30867):
E/AndroidRuntime(30867): at org.tensorflow.lite.NativeInterpreterWrapper.run(Native Method)
E/AndroidRuntime(30867): at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:158)
E/AndroidRuntime(30867): at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:343)
E/AndroidRuntime(30867): at org.tensorflow.lite.Interpreter.run(Interpreter.java:304)
E/AndroidRuntime(30867): at com.apptec.scansdk.MainActivity$RunSegmentationOnBinary.runTflite(MainActivity.java:237)
E/AndroidRuntime(30867): at com.apptec.scansdk.MainActivity$TfliteTask.doInBackground(MainActivity.java:310)
E/AndroidRuntime(30867): at com.apptec.scansdk.MainActivity$TfliteTask.doInBackground(MainActivity.java:284)
E/AndroidRuntime(30867): at android.os.AsyncTask$2.call(AsyncTask.java:295)
E/AndroidRuntime(30867): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(30867): ... 4 more
下面是加载模型的代码
MappedByteBuffer buffer = null;
buffer = FileUtil.loadMappedFile(context, "docScan.tflite");
int numThreads = 4;
boolean useGpuDelegate = true;
final Interpreter.Options tfliteOptions = new Interpreter.Options();
tfliteOptions.setNumThreads(numThreads);
if (useGpuDelegate){
GpuDelegate delegate = new GpuDelegate();
tfliteOptions.addDelegate(delegate);
}
tfLite = new Interpreter(buffer, tfliteOptions);
奇怪的是,它在MI/Redmi/OPPO等手机上工作,只在三星上崩溃。请帮帮我!
发布于 2022-07-15 21:09:44
向AndroidManifest.xml添加以下行:
AndroidManifestGpu.xml:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/java/AndroidManifestGpu.xml链接
<application
<uses-native-library
android:name="libOpenCL.so"
android:required="false" />
<uses-native-library
android:name="libOpenCL-car.so"
android:required="false" />
<uses-native-library
android:name="libOpenCL-pixel.so"
android:required="false" />
</application>
将这些依赖项添加到build.gradle中:
implementation 'org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2'
implementation 'org.tensorflow:tensorflow-lite-gpu:2.8.0'
implementation 'org.tensorflow:tensorflow-lite-support:0.1.0'
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.1.0'
implementation 'org.tensorflow:tensorflow-lite-task-text:0.1.0'
https://stackoverflow.com/questions/62727313
复制相似问题