我已经在 tensorflow 中使用伪量化 ( https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/quantize ) 在 Cifar-10 上训练了一个简单的 CNN 模型。然后我使用 toco 生成了一个 .tflite 文件。现在我想使用python解释器来测试tflite模型。
因为我在训练期间使用 tf.image.per_image_standardization 来减去均值并除以方差。我需要对测试数据做同样的事情吗?但是,问题是,我的模型已经被 tflite 完全量化了,它只需要 uint8 数据作为输入。要进行图像标准化,我需要将图像转换为 float32。那么如何将其转换回 uint8,或者在这种情况下测试数据是否需要图像标准化?谢谢。
最佳答案
因此,事实证明我需要对测试数据进行标准化以获得良好的准确性。
为此,我直接将 uint8 输入图像提供给 tf.image.per_image_standardization 函数。该函数会将 uint8 数据转换为 float32,然后进行标准化(减去均值,除以 std)。您可以在此处找到该函数的源代码: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 来测试模型。它按预期工作。
关于tensorflow - 完全量化的 tensorflow lite 模型的输入图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53017722/