【发布时间】:2019-12-05 15:22:59
【问题描述】:
我正在尝试让 Mobilenetv2 模型(对我的数据重新训练最后一层)在 Google 边缘 TPU Coral 上运行。
我已按照此教程 https://www.tensorflow.org/lite/performance/post_training_quantization?hl=en 进行训练后量化。相关代码为:
...
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()
我已经成功生成了 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
模型的输入形状是 3 通道 RGB 图像。可以对 3 通道图像进行全整数量化吗?我在 TensorFlow 和 Google Coral 文档中找不到任何说明您不能这样做的内容。
【问题讨论】:
-
我认为这不是 3 个频道的问题。我有一个使用 3 个通道的模型,它在边缘 tpu 上没有问题(当我使用设置了手动最小/最大标志的 toco 转换器转换它时)。但是,当我使用训练后量化时,我得到了同样的错误。所以似乎还有另一个问题,我也无法弄清楚。
-
你知道 qunatized_dimension 是什么意思吗?然后我们也许可以找出错误来自哪里
-
根据tensorflow.org/lite/performance/quantization_spec,quantization_dimension 表示为张量指定 scale 和 zero_point 参数的轴。所以很奇怪,显然只有 [0, 1) 被允许这样做,因为我认为它是 [0, maxTensorDimension] 之间的值。这看起来真的是编译器的一个奇怪错误,而不是转换后的模型本身。
-
@Marcel_marcel1991 你能解释一下如何在 toco 中找到 std_dev 和平均值吗?对于 MobileNetV2
标签: tensorflow quantization tpu google-coral