我正在尝试将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:+
您能帮我解决这个错误以及为什么会出现这个错误吗,谢谢
我在 kivy Discord 小组成员 Bob 的帮助下解决了这个问题,解决方案是 tflite 模型不应该位于根文件夹中,而应该位于子文件夹中
在Kivy路径中,不要像
model.tflite
那样的模型路径,而是将模型保存在子文件夹liekmodels/model.tflite
中,然后它就可以工作了
问题不在kivy程序加载模型时提到的路径中