1

我正在使用 MobilenetV2 对个人数据集进行迁移学习的量化。我尝试过两种方法:

i.) 仅训练后量化:它工作正常,并且在 224,224 维上推理 60 幅图像的平均时间为 0.04 秒。

ii.) 量化感知训练 + 训练后量化:它比仅训练后量化产生更高的准确性,但对于相同的 60 张图像产生 0.55 秒的更高推理时间。

1.) 只有训练后量化模型(.tflite)可以通过以下方式推断:

        images_ = cv2.resize(cv2.cvtColor(cv2.imread(imagepath), cv2.COLOR_BGR2RGB), (224, 224))
        images = preprocess_input(images_)
        interpreter.set_tensor(
                    interpreter.get_input_details()[0]['index'], [x])
        interpreter.invoke()
        classes = interpreter.get_tensor(
            interpreter.get_output_details()[0]['index'])

2.) 量化感知训练+训练后量化可以通过以下代码推断。不同之处在于它在这里要求 float32 输入。

        images_ = cv2.resize(cv2.cvtColor(cv2.imread(imagepath), cv2.COLOR_BGR2RGB), (224, 224))
        images = preprocess_input(images_)
        x = np.expand_dims(images, axis=0).astype(np.float32)
        interpreter.set_tensor(
                    interpreter.get_input_details()[0]['index'], x)
        interpreter.invoke()
        classes = interpreter.get_tensor(
            interpreter.get_output_details()[0]['index'])

我进行了很多搜索,但没有得到任何关于此查询的回复。如果可能的话,请帮助解释为什么在量化感知训练+训练后量化的情况下,与仅训练后量化相比,我的推理时间会变高?

4

1 回答 1

0

我认为您不应该一起进行量化意识训练+训练后量化。

根据https://www.tensorflow.org/model_optimization/guide/quantization/training_example,如果您使用量化感知训练,转换将为您提供一个具有 int8 权重的模型。因此,这里没有必要进行训练后量化。

于 2020-09-10T04:39:41.543 回答