语音识别的不同模型
Different model on speech recognition
我已经尝试了很多时间 运行 这个示例项目 https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/ml and finally produced this tflite model https://imgur.com/bVpesdd using convert_keras_lite.py inside export direcory.However, i checked the tflite model inside assets directory in this android project https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/android. I found that the tflite model is different with the first one. https://imgur.com/7Cn69qx。
我尝试将 assets android 目录中的 tflite 模型替换为第一个 tflite 模型,但应用程序突然在 Android Studio logcat 中崩溃并显示此错误代码:
2019-12-22 16:45:22.262 795-795/org.tensorflow.lite.examples.speech E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.tensorflow.lite.examples.speech, PID: 795
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.tensorflow.lite.examples.speech/org.tensorflow.lite.examples.speech.SpeechActivity}: java.lang.IllegalArgumentException: Input error: Can not resize 1-th input for a model having 1 inputs.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3139)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
Caused by: java.lang.IllegalArgumentException: Input error: Can not resize 1-th input for a model having 1 inputs.
at org.tensorflow.lite.NativeInterpreterWrapper.resizeInput(Native Method)
at org.tensorflow.lite.NativeInterpreterWrapper.resizeInput(NativeInterpreterWrapper.java:194)
at org.tensorflow.lite.Interpreter.resizeInput(Interpreter.java:285)
at org.tensorflow.lite.examples.speech.SpeechActivity.onCreate(SpeechActivity.java:190)
at android.app.Activity.performCreate(Activity.java:7335)
at android.app.Activity.performCreate(Activity.java:7326)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)**
感谢任何帮助。
好吧,我还没有解决问题,但我想我发现了一些可能有帮助的东西:
首先,在 TensorFlow 存储库本身(不是专门的示例存储库)中还有其他用于语音命令示例的代码:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/speech_commands
它不像您正在使用的那样使用 keras,也没有关于 tflite 转换的信息,所以我猜该示例是在 tflite 出现之前创建的。
查看那里使用的 architecture of the (conv) model 后,我发现它与 android 项目中预打包的 tflite 模型的架构相同,并且它与您发布的第二个 imgur link 匹配。
所以看起来 android 项目中的 tflite 模型是旧示例中模型的转换。 https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/ml 生成的模型与 android 代码完全不兼容,因为输入不同。
这并不奇怪,因为 android 代码几乎是 old examples android code 的复制粘贴,并针对 tflite 的使用做了一些调整。
所以我想最好的办法是处理旧的 ml 代码并将生成的冻结 pb 图转换为 tflite。
更新
我做到了!!!
它是这样工作的:
- 从here下载冻结图。
- 运行下面在python
import tensorflow as tf
converter = tf.compat.v1.lite.TFLiteConverter.from_frozen_graph("./conv_actions_frozen.pb", input_arrays=['decoded_sample_data', 'decoded_sample_data:1'], output_arrays=['labels_softmax'])
converter.allow_custom_ops=True
tflite_model = converter.convert()
open("model.tflite", "wb").write(model)
如果您使用 netron 查看模型,您会发现它与 android 示例附带的模型相同。
我已经尝试了很多时间 运行 这个示例项目 https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/ml and finally produced this tflite model https://imgur.com/bVpesdd using convert_keras_lite.py inside export direcory.However, i checked the tflite model inside assets directory in this android project https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/android. I found that the tflite model is different with the first one. https://imgur.com/7Cn69qx。
我尝试将 assets android 目录中的 tflite 模型替换为第一个 tflite 模型,但应用程序突然在 Android Studio logcat 中崩溃并显示此错误代码:
2019-12-22 16:45:22.262 795-795/org.tensorflow.lite.examples.speech E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.tensorflow.lite.examples.speech, PID: 795
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.tensorflow.lite.examples.speech/org.tensorflow.lite.examples.speech.SpeechActivity}: java.lang.IllegalArgumentException: Input error: Can not resize 1-th input for a model having 1 inputs.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3139)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3282)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1970)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
Caused by: java.lang.IllegalArgumentException: Input error: Can not resize 1-th input for a model having 1 inputs.
at org.tensorflow.lite.NativeInterpreterWrapper.resizeInput(Native Method)
at org.tensorflow.lite.NativeInterpreterWrapper.resizeInput(NativeInterpreterWrapper.java:194)
at org.tensorflow.lite.Interpreter.resizeInput(Interpreter.java:285)
at org.tensorflow.lite.examples.speech.SpeechActivity.onCreate(SpeechActivity.java:190)
at android.app.Activity.performCreate(Activity.java:7335)
at android.app.Activity.performCreate(Activity.java:7326)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3119)**
感谢任何帮助。
好吧,我还没有解决问题,但我想我发现了一些可能有帮助的东西:
首先,在 TensorFlow 存储库本身(不是专门的示例存储库)中还有其他用于语音命令示例的代码:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/speech_commands
它不像您正在使用的那样使用 keras,也没有关于 tflite 转换的信息,所以我猜该示例是在 tflite 出现之前创建的。 查看那里使用的 architecture of the (conv) model 后,我发现它与 android 项目中预打包的 tflite 模型的架构相同,并且它与您发布的第二个 imgur link 匹配。
所以看起来 android 项目中的 tflite 模型是旧示例中模型的转换。 https://github.com/tensorflow/examples/tree/master/lite/examples/speech_commands/ml 生成的模型与 android 代码完全不兼容,因为输入不同。
这并不奇怪,因为 android 代码几乎是 old examples android code 的复制粘贴,并针对 tflite 的使用做了一些调整。
所以我想最好的办法是处理旧的 ml 代码并将生成的冻结 pb 图转换为 tflite。
更新
我做到了!!! 它是这样工作的:
- 从here下载冻结图。
- 运行下面在python
import tensorflow as tf
converter = tf.compat.v1.lite.TFLiteConverter.from_frozen_graph("./conv_actions_frozen.pb", input_arrays=['decoded_sample_data', 'decoded_sample_data:1'], output_arrays=['labels_softmax'])
converter.allow_custom_ops=True
tflite_model = converter.convert()
open("model.tflite", "wb").write(model)
如果您使用 netron 查看模型,您会发现它与 android 示例附带的模型相同。