将我自己的Keras CNN模型转换为TensorFlow Lite。 TensorFlow Lite演示应用程序中的检测结果错误

时间:2018-11-27 15:20:29

标签: tensorflow keras conv-neural-network tensorflow-lite

我正在与Keras CNN合作进行我自己建立的图像分类。目前,我的PC机上的检测结果还不错(正确检测到300张测试图像中的290张)。现在,我需要在Android手机上运行我的模型。我在手机上安装了TFLite Demo App。到目前为止,它可以与预安装的模型以及我在网上找到的一些随机的预训练模型一起使用。可悲的是,如果我将模型转换为TFLite,它将显示错误的检测结果。

现在要将我的Keras(.h5-文件)转换为TFLite(.tflite文件),我使用以下代码遵循了官方Tensorflow网站上的描述:

# Convert to TensorFlow Lite model.
converter = tf.lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

如上所述,我用来转换为TFLite的刚刚创建的keras模型(keras_file)在测试中效果很好,但TFLite模型却没有。确切地说。出于测试目的,目前有4种可能的类别要检测。在4分之3的情况下,该应用会向我显示错误的检测结果,并说100%可以肯定。我以为我创建的标签文件可能有问题。但是没有找到方案(例如文件中字符串的顺序有误或类似)。所以我几乎可以肯定,标签文件还可以。

现在我在Android应用程序上做了什么:

  • (如description中所述)将分类器更改为ImageClassifierFloatInception
  • 为我的4个类别创建包含4个字符串的标签文件
  • 更改图像大小
  • getNumBytesPerChannel()的返回值更改为4,以匹配我的类别计数

规格:

  • Windows 10
  • Tf-nightly-gpu 1.13.0a20181125(TensorFlow-gpu 1.12.0不支持convert方法)
  • Android 7.0上的Galaxy S6

我想念什么吗?如果您需要更多信息,我们很乐意提供。

斯蒂芬

1 个答案:

答案 0 :(得分:0)

您的convertBitmaptoByteBuffer()函数或您的.tflite模型可能有问题。