【发布时间】:2021-02-03 08:37:43
【问题描述】:
我正在开发一个需要 ML 模型集成的 Android 应用程序。为此,我使用 TensorFlow lite 进行部署。我使用基于自定义模型的连体网络进行输出,输出形状为 [1 128]。当我推断tf lite 模型在 Google Colab 上的 python 输出 [1 128] 数字与我的 Android 设备上生成的数字不同。输入图像在推论以及输入和输出形状上都是相同的,但我仍然得到不同的输出向量在我的 Android 手机和 Python TFlite 模型上。我正在使用 Firebase 机器学习。
安卓代码
val interpreter=Interpreter(model)
val imageBitmap= Bitmap.createScaledBitmap(BitmapFactory.decodeFileDescriptor(contentResolver.openFileDescriptor(fileUri,"r")?.fileDescriptor),256,256,true)
val inputImage=ByteBuffer.allocateDirect(256*256*3*4).order(ByteOrder.nativeOrder())
for(ycord in 0 until 256){
for(xcord in 0 until 256){
val pixel=imageBitmap.getPixel(xcord,ycord)
inputImage.putFloat(Color.red(pixel)/1.0f)
inputImage.putFloat(Color.green(pixel)/1.0f)
inputImage.putFloat(Color.blue(pixel)/1.0f)
}
}
imageBitmap.recycle()
val modelOutput=ByteBuffer.allocateDirect(outputSize).order(ByteOrder.nativeOrder())
interpreter.run(inputImage,modelOutput)
modelOutput.rewind()
val probs=modelOutput.asFloatBuffer()
success(ImageProcessResult.Success(probs))
请帮助我。我很快就需要它。感谢任何帮助
【问题讨论】:
-
你能确认你提供给模型的数值在两个平台上是相同的吗?您是调整图像大小、裁剪图像还是进行其他操作?
-
在 Android 上,我实际上将位图的大小调整为 [256 256],但输入图像的尺寸与以前相同,所以我想这一定不是那么重要
-
即使输入向量的最轻微变化也会改变输出向量。调整位图大小时,会更改输入矢量。但是,输出向量(分类中)的 argmax 的最终结果将是相同的。
-
好的,但这不会影响我的连体输出吗?
-
如果模型没有过拟合,我相信它不会对最终结果产生有意义的影响。
标签: android tensorflow kotlin tensorflow-lite firebase-machine-learning