【问题标题】:Unsupported TensorFlow op: Dequantize不支持的 TensorFlow 操作:去量化
【发布时间】:2018-11-11 23:41:13
【问题描述】:

使用 TensorFlow 1.6.0

将mobilenet量化模型的retrained_graph.pb转换为tf-lite

toco --input_format=TENSORFLOW_GRAPHDEF   --input_file=/home/sudheer_sure/r_mobil
enet/tf_files/retrained_graph.pb   --output_format=TFLITE   --output_file=/home/sudheer_sure/r_mobilenet/tf_files/mobilenet_v1_1.0_224_quantized.lite   --inference_type=QUANTI
ZED_UINT8   --inference_input_type=QUANTIZED_UINT8   --input_arrays=input   --output_arrays=final_result   --input_shapes=1,224,224,3  --mean_values=128   --std_values=128 --d
efault_ranges_min=0 --default_ranges_max=6

收到以下错误:

未实现:此图包含类型的运算符(不支持 TensorFlow op: Dequantize) 尚未量化的形式 实施的。抱歉,欢迎打补丁(这是一个比较有趣的补丁 写,主要是提供实际量化的算术代码 这个操作)。

谁能帮帮我

【问题讨论】:

  • 您能明确说明您的问题吗?报错信息比较全面,不清楚是哪里误会

标签: python tensorflow deep-learning


【解决方案1】:

在尝试使用 toco 工具将 protobuf(pb) 文件(在使用 graph_transforms 工具优化/量化之后)转换为 tflite 时,我也遇到了同样的问题。

重新训练 >> 使用 graph_transforms 量化/舍入 >> toco [不工作]

但是当我使用原始的再训练 pb 文件作为 toco 的输入时,它对我有用。

再培训 >> toco [工作]

以下命令有效:

bazel-bin/tensorflow/contrib/lite/toco/toco --input_file=~/tf_files/retrained_graph_mobileNet_v2_100_224_card.pb --output_file=~/tf_files/retrained_graph_mobileNet_v2_100_224_q_card.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --inference_type=QUANTIZED_UINT8 --input_shape=1,224,224,3 --input_array='Placeholder' --output_array='final_result' --mean_value=128 --std_value=128 --default_ranges_min=0 --default_ranges_max=6

您使用的是哪种型号的 Inception/mobilener? 确保 input_array 和 output_array 与 pb 图中使用的相同。

【讨论】:

    【解决方案2】:

    量化 .tflite 的目的是将所有内容保持为 8 位。如果我们使用 tfliteConverter / TOCO 将 fp32 pb 转换为 tflite 8bit,则不会引入 Dequantize 层(与动态范围捕获可用的 Graph Transform 工具相反)。

    此外,8 位 tflite 模型必须保持每层的最小/最大范围以进行激活(未来支持每个通道的权重)。

    1. 这些范围用于将 int32 从卷积转换回 8 位。
    2. 这些范围应通过在重新训练/微调时必须在图中引入的 fakeQuant 层来捕获。
    3. 如果这些范围不可用,您可以使用虚拟量化,但精度会下降,因为为每一层设置了相同的范围。

    这是生成完全量化的 8 位 tflite 的官方方法。当然 tflite 工具正在开发中,不支持某些操作。

    使用 8bit 的旧路径(图形转换工具),我们可以选择在图形中引入打印操作,使用校准数据集捕获范围并冻结 8bit.pb 模型中的范围(最小值/最大值)。不需要再培训。

    不幸的是,tflite 不支持这种“训练后量化”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2016-11-20
      • 2020-10-21
      • 2019-04-17
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多