Java 如何在android中处理tensorflow lite输入的图像?

Java 如何在android中处理tensorflow lite输入的图像?,java,python,android,machine-learning,tensorflow-lite,Java,Python,Android,Machine Learning,Tensorflow Lite,我做了什么? 我正在研究图像分类问题。我已经用python训练了我的CNN模型,然后将它转换成Tensorflow Lite,用于我的android应用程序。我已经用python测试了tensorflow lite模型,并将结果与keras模型结果进行了比较。两者都是相同的,这意味着我转换为Tensorflow lite是正确的 在python中,我读取图像的代码如下所示。我没有在这张图片上做任何标准化或任何其他操作。只是调整它的大小并预测它 image_array_abnormal = np.

我做了什么?

我正在研究图像分类问题。我已经用python训练了我的CNN模型,然后将它转换成Tensorflow Lite,用于我的android应用程序。我已经用python测试了tensorflow lite模型,并将结果与keras模型结果进行了比较。两者都是相同的,这意味着我转换为Tensorflow lite是正确的

在python中,我读取图像的代码如下所示。我没有在这张图片上做任何标准化或任何其他操作。只是调整它的大小并预测它

image_array_abnormal = np.array([resize(imread('/content/path/abnormal2.png'), (137, 310, 3))])
图像_数组_形状为:

(1, 137, 310, 3)
以下是我对tensorflow lite的输入和输出详细信息:

问题

但当我尝试在android中使用我的模型时,它并没有给出预期的准确性。我认为我的图像或tensorflow lite模型的输入数据有问题。 在android中,我只是使用opencv从drawable读取图像,将其存储在Mat中,将其转换为位图,并将其传递到tensorflow中进行预测,如下所示:

Mat src = Utils.loadResource(this, R.drawable.abnormal2);
Bitmap dst = Bitmap.createBitmap(src.width(), src.height(), Bitmap.Config.ARGB_8888);

classifier = new Classifier(activity, "model.tflite", "labels.txt");
results = classifier.recognizeImage(dst);
对于分类器类,我遵循分类器类

我需要什么帮助?

  • 现在,我应该如何处理我的图像,我应该成为相同的输入 用python
  • 我必须像在python中那样将其转换为数组吗
  • 我是否必须将其重新调整为(1137310,3)
  • 我必须创建4D阵列吗
  • 如何获得图像的像素值
  • 我是否必须提取RGB像素值,然后将其更改为3D阵列或其他内容

  • 我很困惑。我知道我在图像输入方面犯了错误,但正确的方法是什么?实际上,我必须如何处理图像才能将其用作模型的输入?

    看起来您自己在Python中训练图像分类。如果您可以完全访问培训数据集,我建议使用TF Lite Model Maker和ML Model Binding来培训并将TF Lite模型集成到您的Android应用程序中。我会比现在的道路容易得多。看看这个视频。

    回到您的问题,有几个原因可能导致这些问题:

  • 不正确的规范化。从模型中不清楚它是浮点模型还是量化模型,以及它是否需要规格化为[-1,1]或[0,1]或[0,255]。您可能需要更新此上的参数以使其正常工作

  • 图像比率问题:您的图像非常宽,但大多数图像分类模型都使用方形图像进行训练,因此随着图像大小的调整,精度可能会下降


  • 你看过所有的Classifier.java文件了吗?在底部有一个loadImage函数,它执行特定的计算,以便将位图预搜索到TensorImage。里面有裁剪、调整大小和旋转。。。。如果这些都是错误的…那么你会有奇怪的结果!。所以,回答我这个问题,我将发布一个如何正确操作的答案是的,我已经看到了loadimage函数。我不需要标准化、旋转或裁剪我的图像,这就是我没有使用该功能的原因。对不起,你没有提到没有使用该方法。我认为您所处的位置是正确的…位图没有正确加载以运行推断。如果有可能的话,上传项目的链接进行调试。我已经在一定程度上解决了我的问题。不,唯一的问题是准确性并不完全相同。虽然它接近原始的准确度。如何解决这个问题?我们必须复制……这是一个浮动模型。我没有用python规范化我的图像。在没有标准化的情况下对图像训练我的模型。所以我认为android也不需要标准化。你能试着使用上面视频中的Model Maker和ML Model Binding,而不是编写自己的培训代码吗?训练模型时不规范输入图像是很少见的,因此我怀疑训练中的预处理与Android应用程序中的预处理之间存在差异。Android studio的版本仅适用于MAC。我没有苹果。实际上,我的图像是信号。这些信号被转换成clip并被标准化。正常化后,我们保存了它们。图像已经标准化。我们不需要在python或android中对它们进行规范化,android Studio是跨平台的。您可以下载Android Studio 4.1 Beta 1 for Windows或Linux,它将具有相同的功能。