一些TFlite模型model.process()似乎需要TensorBuffer,而其他模型则需要TensorImage。我不知道为什么?
首先,我采用了一个常规的TensorFlow / Keras模型,它是使用以下命令保存的:
model.save(keras_model_path,
include_optimizer=True,
save_format='tf')
然后,我使用以下命令将这个Keras模型(300 MB)压缩并量化为TFlite格式:
converter = tf.lite.TFLiteConverter.from_keras_model(keras_model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = tf.keras.utils.image_dataset_from_directory(dir_val,
batch_size=batch_size,
image_size=(150,150))
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
tflite_model = converter.convert()
with open(tflite_model_path, 'wb') as file:
file.write(tflite_model)
我有一个更小的TFlite模型(40 Mo),<input_data>在调用model.process()时需要TensorBuffer*<input_data>*
其次,我已经使用TensorFlow Lite Model Maker训练并保存为TFLite模型,现在我有一个TFLite模型,<input_data>在调用model.process()时需要TensorImage**<input_data>。
是否有两种不同的TFlite模型取决于您如何构建和训练它?
也许这与Keras模型基于Inception而TensorFlow Lite Model Maker使用EfficientNet的事实有关。如何从一个TFlite模型转换到另一个?如何更改图像的输入以便能够处理相同的图像,例如TensorImage或位图数据输入?
2条答案
按热度按时间sqxo8psd1#
在@Farmaker的宝贵帮助下,我解决了我的问题。我只是想将
Keras
模型转换为更紧凑的TFlite
模型,以便将其安装在移动的应用程序中。我意识到生成的TFlite
模型不兼容,@Farmaker非常正确地向我指出缺少元数据。1.您应该使用
TensorFlow
2.6.0或更低版本,因为与Flatbuffer
不兼容。1.将Keras模型转换为TFlite
1.添加元数据,如« TensorFlow Lite元数据编写器API » tutorial中所示
例如,要创建这样一个文件,
大家都到齐了!
vmdwslir2#
您可以使用tdfs、dataset、dataset_image、tf.constants和其他数据格式。
您也可以使用tf.常量在您输入所需的参数或您可以输入权重算法。(卷积层也可以)
我确定输入和目标响应分类。
[序列到序列Map]:
[ TDFS ]:
Sample