tflite uint8 量化模型输入和输出浮点转换



我已经成功地转换了一个量化的8位tflite模型用于对象检测。我的模型最初是在通过除以 255 进行归一化的图像上进行训练的,因此原始输入范围为 [0, 1]。由于我的量化 tflite 模型要求输入为 uint8,因此如何将我的图像(最初 [0, 255](转换为适合我的网络?另外,如何将输出转换为浮点数以将结果与浮点模型进行比较?

下面的代码没有给我正确的结果。

'''python
im = cv2.imread(image_path)
im = im.astype(np.float32, copy=False)
input_image = im
input_image = np.array(input_image, dtype=np.uint8)
input_image = np.expand_dims(input_image, axis=0)
interpreter.set_tensor(input_details[0]['index'], input_image)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
output_data2 = interpreter.get_tensor(output_details[1]['index'])
output_data3 = interpreter.get_tensor(output_details[2]['index'])
min_1 =  -8.198164939880371
max_1 = 8.798029899597168
scale = (max_1 - min_1)/ 255.0
min_2 = -9.77856159210205
max_2 = 10.169703483581543
scale_2 = (max_2 - min_2) / 255.0
min_3 = -14.382895469665527 
max_3 = 11.445544242858887
scale_3 = (max_3 - min_3) / 255.0
output_data = (output_data ) * scale + min_1
output_data2  = (output_data2) * scale_2 + min_2
output_data3 = (output_data3) * scale_3 + min_3
'

''

我遇到了同样的问题,但在姿势估计中。

你解决了问题吗?

您使用量化意识训练

我认为您可以获得有关输入图像的 Q 和 Z 值(因为当您使用 Tflite API 或 Toco commonad 获得量化的 8 位 TFLite 模型时,您必须给出平均值和 std-err(。

试试这些代码:

  image = q_input* (image - z_input)
  output_data  = q_output(image - z_output)

等。

(对于不同的图层,您可以访问不同的Q和Z(

让我知道您是否尝试过这种方式

我已经通过OpenCV将图像转换为"CV_8UC3",这对我有用:

  // Convert to RGB color space
  if (image.channels() == 1) {
    cv::cvtColor(image, image, cv::COLOR_GRAY2RGB);
  } else {
    cv::cvtColor(image, image, cv::COLOR_BGR2RGB);
  }
  image.convertTo(image, CV_8UC3);

最新更新