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

时间:2019-07-24 16:51:10

标签: tensorflow tensorflow-lite quantization

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

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

public class MyTest {

    @Test(expected = IllegalArgumentException.class)
    public void myTest() throws Throwable {
        try {
            CompletableFuture.runAsync(() -> myException()).join();
        } catch (CompletionException e) {
            throw e.getCause();
        }
    }

    public static void myException() {
        throw new IllegalArgumentException();
    }
}

'''

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,只是姿势估计。

您解决了这个问题吗?

您使用量化意识培训吗?

我认为您可以获得关于输入图像的q和z值(因为使用tflite api或toco commonad来获得量化的8位tflite模型时必须给出均值和标准差)。

尝试以下代码:

  image = q_input* (image - z_input)

  output_data  = q_output(image - z_output)

(对于不同的层,您可以访问不同的q和z)

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

答案 1 :(得分:0)

我已经通过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);