【问题标题】:Conversion of Tensorflow-lite model to F16 and INT8将 Tensorflow-lite 模型转换为 F16 和 INT8
【发布时间】:2022-12-07 04:15:52
【问题描述】:

我需要评估 CNN(卷积神经网络)在边缘设备上的性能。我开始了解什么是量化以及如何使用解释器(模拟器)在 colab 中运行它。完整代码在这里 -> https://github.com/aravindchakravarti/OptimizeNetworks/blob/main/Quantization_Aware_Training.ipynb

我试图将 CNN 转换为 Float-16 (F16) 和 Int-8 (T8) 量化级别,想看看有什么区别

  • 推理时间
  • 模型尺寸

我使用 F16 模型转换

converter_fl16 = tf.lite.TFLiteConverter.from_keras_model(q_aware_model)
converter_fl16.optimizations = [tf.lite.Optimize.DEFAULT]
converter_fl16.target_spec.supported_types = [tf.float16]
quantized_tflite_model_f16 = converter_fl16.convert()

并转换为T8

converter_t8 = tf.lite.TFLiteConverter.from_keras_model(q_aware_model)
converter_t8.optimizations = [tf.lite.Optimize.DEFAULT]

quantized_tflite_model_t8 = converter_t8.convert()

interpreter = tf.lite.Interpreter(model_content=quantized_tflite_model_t8)
interpreter.allocate_tensors()

当我评估推理时间时,
F32(无量化)= 1.3s
F16(带量化)= 0.6s
T8(带量化)= 0.59s

当我评估模型尺寸时,
F32(无量化)= 83KB
F16(带量化)= 25KB
T8(带量化)= 25KB

我的问题是, 为什么 F16 和 T8 的模型大小和推理时间相同?我没有正确量化吗?

【问题讨论】:

    标签: tensorflow tensorflow-lite quantization


    【解决方案1】:

    您正在尝试将 int8 模型转换为 fp16,而转换器只是将所有内容都保留为 int8。这就是为什么这两个模型是相同的。 问题出在转换行中,应该是

    converter_fl16 = tf.lite.TFLiteConverter.from_keras_model(model)
    

    更新后你应该看到
    FP32 83k
    FP16 44k
    I8 25K

    您还可以使用例如 netron 或 tflite 可视化工具检查生成的模型以进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2019-04-14
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多