Android运行自定义keras-ocr TFLite模型遇版本兼容错误,求适配版本
问题:自定义Keras-OCR TFLite模型在Android运行报错,适配版本咨询
模型构建环境(Mac OSX M1)
构建模型时使用的TensorFlow相关库版本:
tensorflow-datasets 4.8.3 tensorflow-deps 2.10.0 tensorflow-estimator 2.9.0 tensorflow-macos 2.9.0 tensorflow-metadata 1.12.0 tensorflow-metal 0.5.0
模型输入输出形状
input - [ 1 31 200 1] <class 'numpy.float32'> output - [ 1 48] <class 'numpy.int64'>
Android端运行错误日志
执行interpreter.run(input, modelOutput);时触发崩溃:
E/AndroidRuntime: FATAL EXCEPTION: main Process: games.cloudfeather.mlkitcustom2, PID: 16074 java.lang.IllegalArgumentException: Internal error: Failed to run on the given Interpreter: NodeDef mentions attr 'blank_index' not in Op<name=CTCGreedyDecoder; signature=inputs:T, sequence_length:int32 -> decoded_indices:int64, decoded_values:int64, decoded_shape:int64, log_probability:T; attr=merge_repeated:bool,default=false; attr=T:type,default=DT_FLOAT,allowed=[DT_FLOAT, DT_DOUBLE]>; NodeDef: {{node CTCGreedyDecoder}}. (Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary.). (while executi at org.tensorflow.lite.NativeInterpreterWrapper.run(Native Method) at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:163) at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:360) at org.tensorflow.lite.Interpreter.run(Interpreter.java:319) at games.cloudfeather.mlkitcustom2.MainActivity.predict(MainActivity.java:115) at games.cloudfeather.mlkitcustom2.MainActivity.access$000(MainActivity.java:39) at games.cloudfeather.mlkitcustom2.MainActivity$2$1.onComplete(MainActivity.java:63) at com.google.android.gms.tasks.zzi.run(com.google.android.gms:play-services-tasks@@18.0.2:1) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8751) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
当前Android依赖配置
应用级build.gradle中TensorFlow Lite依赖版本为2.4.0,使用仓库预构建模型时运行正常,但自定义模型报错。请问应该使用哪个版本才能让自定义模型成功运行?
解决方案
错误根源是CTCGreedyDecoder算子的blank_index属性在TensorFlow Lite 2.4.0中未被支持,该属性是在TensorFlow 2.7及后续版本的TFLite中新增的。
你构建模型使用的是TensorFlow-macos 2.9.0,因此Android端的TensorFlow Lite依赖版本需要与模型构建时的TensorFlow大版本保持一致或更高,推荐直接使用2.9.0版本:
implementation 'org.tensorflow:tensorflow-lite:2.9.0'
若需兼容更多设备,也可尝试2.7.0及以上版本,但优先选择与构建环境一致的2.9.0,能最大程度避免算子兼容性问题。
内容的提问来源于stack exchange,提问作者aquaman
相关产品推荐
相关产品推荐

