将 keras 模型转换为 TensorFlow lite 以在 Kivy 应用程序中使用

问题描述 投票:0回答:1

我正在尝试将keras模型转换为tensorflow lite,并使用kivy在android应用程序开发中使用它

型号-

model_v3 = tf.keras.applications.MobileNet(
  weights='imagenet', include_top=False, input_shape=(224, 224, 3)
  )

for layer in model_v3.layers[:]:
    layer.trainable = True

model = tf.keras.Sequential()

for layer in model_v3.layers:
  model.add(layer)

model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(8, activation='softmax'))
model.summary()

按照文档转换代码

model.save('model.keras')
model = keras.models.load_model('/content/model.keras')

converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open('mobilenet_224.tflite', 'wb') as f:
  f.write(tflite_model)

我在kivy应用程序中使用了这个模型,构建成功,并且应用程序安装在android上,但是当应用程序开始运行时,我得到了这个错误

11-12 10:12:50.932 6678 10552 我 python :文件“jnius/jnius_export_class.pxi”,第 269 行,在 jnius.jnius.JavaClass 中。init

11-12 10:12:50.933 6678 10552 我 python :文件“jnius/jnius_export_class.pxi”,第 383 行,在 jnius.jnius.JavaClass.call_constructor

11-12 10:12:50.933 6678 10552 我 python :文件“jnius/jnius_utils.pxi”,第 79 行,在 jnius.jnius.check_exception

11-12 10:12:50.934 6678 10552 我 python :jnius.jnius.JavaException:发生 JVM 异常:/mobilenet_224.tflite 的内容未编码有效的 TensorFlow Lite 型号:无法打开“/mobilenet_224.tflite”。

11-12 10:12:50.934 6678 10552 I python:模型分配为空/空 java.lang.IllegalArgumentException

11-12 10:12:50.934 6678 10552 我 python : Python for android 结束了。

我使用此存储库作为创建 kivy 应用程序的参考 - https://github.com/macrodrigues/butterfly_detector/blob/master/app/model.py

我使用了 buildozer.spec 中的依赖项

android.gradle_dependencies = org.tensorflow:tensorflow-lite:+,org.tensorflow:tensorflow-lite-support:+,org.tensorflow:tensorflow-lite-gpu:+

您能帮我解决这个错误以及为什么会出现这个错误吗,谢谢

python android tensorflow keras kivy
1个回答
0
投票

我在 kivy Discord 小组成员 Bob 的帮助下解决了这个问题,解决方案是 tflite 模型不应该位于根文件夹中,而应该位于子文件夹中

在Kivy路径中,不要像

model.tflite
那样的模型路径,而是将模型保存在子文件夹liek
models/model.tflite
中,然后它就可以工作了

问题不在kivy程序加载模型时提到的路径中

© www.soinside.com 2019 - 2024. All rights reserved.