完全量化的 tensorflow lite 模型的输入图像

Input image of a fully quantized tensorflow lite model

我已经在 Cifar-10 上用假量化训练了一个简单的 CNN 模型(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize)。然后我使用 toco 生成了一个 .tflite 文件。现在我想使用 python 解释器来测试 tflite 模型。

因为我在训练期间使用 tf.image.per_image_standardization 减去均值并除以方差。我需要对测试数据做同样的事情吗?但是,问题是,我的模型已经被 tflite 完全量化,它只需要 uint8 数据作为输入。要进行图像标准化,我需要将我的图像转换为 float32。那么我如何将它转换回 uint8,或者在这种情况下测试数据是否需要图像标准化?谢谢

所以,事实证明我需要对测试数据进行标准化以获得良好的准确性。 为此,我直接将 uint8 输入图像提供给 tf.image.per_image_standardization 函数。该函数会将 uint8 数据转换为 float32,然后进行标准化(减去均值,除以标准差)。您可以在此处找到函数的源代码:https://github.com/tensorflow/tensorflow/blob/r1.11/tensorflow/python/ops/image_ops_impl.py

现在,我有了标准化的 float32 输入图像。我所做的是编写一个量化函数来将 float32 图像量化回 uint8。数学来自这篇论文:https://arxiv.org/abs/1803.08607

现在,我有了 标准化的 uint8 输入图像,然后我使用 tflite 解释器 python API 来测试模型。它按预期工作。