边缘TPU编译器:错误:quantized_dimension必须在[0,1)范围内。是3

Pau*_*iro 8 quantization tensorflow tpu google-coral

我正在尝试使Mobilenetv2模型(将最后一层重新训练到我的数据中)在Google Edge TPU珊瑚上运行。

我已经按照这个教程https://www.tensorflow.org/lite/performance/post_training_quantization?hl=zh-CN进行了训练后量化。相关代码为:

...
train = tf.convert_to_tensor(np.array(train, dtype='float32'))
my_ds = tf.data.Dataset.from_tensor_slices(train).batch(1)


# POST TRAINING QUANTIZATION
def representative_dataset_gen():
    for input_value in my_ds.take(30):
        yield [input_value]

converter = tf.lite.TFLiteConverter.from_keras_model_file(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
converter.target_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
tflite_quant_model = converter.convert()
Run Code Online (Sandbox Code Playgroud)

我已经成功生成了tflite量化模型,但是当我运行edgetpu_compiler时(此页面为https://coral.withgoogle.com/docs/edgetpu/compiler/#usage),我得到以下输出:

edgetpu_compiler  Notebooks/MobileNetv2_3class_visit_split_best-val- 
acc.h5.quant.tflite

Edge TPU Compiler version 2.0.258810407
INFO: Initialized TensorFlow Lite runtime.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
ERROR: quantized_dimension must be in range [0, 1). Was 3.
Invalid model: Notebooks/MobileNetv2_3class_visit_split_best-val-        
acc.h5.quant.tflite
Model could not be parsed
Run Code Online (Sandbox Code Playgroud)

模型的输入形状是3通道RGB图像。可以对3个通道的图像进行全整数量化吗?我找不到任何内容说明您无法在TensorFlow和Google Coral文档中找到任何内容。

MMH*_*MMH 1

我遇到了类似的错误,使用 tf-nightly build 1.15 进行后期训练全整数量化并使用 .tflite 文件,使用边缘 TPU 编译器进行编译,它应该可以工作。我的错误通过这种方法解决了。

github 中提出了同样的问题,你可以在这里看到它