我正在尝试运行一个自定义的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等手机,只在三星上崩溃。救命啊!
2条答案
按热度按时间vnjpjtjt1#
抛出的错误就是您的解决方案
你必须运行你的分类器和它的初始化在同一线程其他明智的它给予你这个错误
我得到了相同的错误,解决了
inKotlin:->
线程{
//你的分类器初始化和代码
}.start()
xxslljrj2#
在AndroidManifest.xml中添加以下行:
将这些依赖项添加到您的build.gradle: