【问题标题】:kotlin application float type conversion when using Tensorflow lite使用 Tensorflow lite 时的 kotlin 应用程序浮点类型转换
【发布时间】:2019-12-07 13:19:54
【问题描述】:

我对使用 kotlin 的 tensorflow lite 应用程序非常陌生。我已经使用 mobilenet 模型获取了用于图像分类的示例 kotlin 代码,它工作正常,现在我正在尝试使用我自己的自定义图像分类器模型。 我正在使用输入形状为 32x32x3 的 VGG 架构并将其转换为 tflite,并且使用 tflite 解释器可以正常工作。 但是,当我在 kotlin 应用程序上尝试此操作时,我遇到了以下错误,并且由于 kotlin 中的 val 类型(自动类型转换),我发现很难将其转换为浮点数

 fun recognizeImage(bitmap: Bitmap): List<Recognition> {
        val scaledBitmap = Bitmap.createScaledBitmap(bitmap, inputSize, inputSize, false)
        val byteBuffer = convertBitmapToByteBuffer(scaledBitmap)
        val result = Array(1) { ByteArray(labelList.size) }
        interpreter.run(byteBuffer, result)
        return getSortedResult(result)
    }

错误日志

E/异常:java.lang.IllegalArgumentException:无法在 FLOAT32 类型的 TensorFlowLite 张量和 [[B 类型的 Java 对象(与 TensorFlowLite 类型 UINT8 兼容)之间进行转换。

如何解决

【问题讨论】:

    标签: tensorflow kotlin tensorflow-lite


    【解决方案1】:

    首先,您需要仔细检查模型期望的输入类型。

    如果它被量化,则模型期望在[0, 255] 范围内输入UINT8

    对于原始版本VGG,我记得(不确定)它期望浮点值在[0, 1] 范围内,这意味着您需要手动规范化输入数据。

    【讨论】:

      猜你喜欢
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多