gpt4 book ai didi

java - Tflite模型在Android(ml视觉)和Python中提供不同的输出

转载 作者:行者123 更新时间:2023-12-02 12:51:25 26 4
gpt4 key购买 nike

我正在使用ML Vision API从FaceNet模型创建嵌入,然后比较两个嵌入之间的余弦距离。 Android版本和Python的输出差异很大。 Python版本的执行方式比android版本要好。可能是什么问题?我两者都使用FaceNet模型。

我正在使用ML kit推断https://firebase.google.com/docs/ml-kit/android/use-custom-models

我认为可能是由于Java读取图像的方式所致,因为android中的图像数组与python中的相同图像不同。

最佳答案

所以当我在ML vision docs上关注Google文档时,我陷入了这个问题
在将图像提供给分类器之前将图像转换为float数组的位置,如下所示:

val bitmap = Bitmap.createScaledBitmap(yourInputImage, 224, 224, true)

val batchNum = 0
val input = Array(1) { Array(224) { Array(224) { FloatArray(3) } } }
for (x in 0..223) {
for (y in 0..223) {
val pixel = bitmap.getPixel(x, y)
// Normalize channel values to [-1.0, 1.0]. This requirement varies by
// model. For example, some models might require values to be normalized
// to the range [0.0, 1.0] instead.
input[batchNum][x][y][0] = (Color.red(pixel) - 127) / 255.0f
input[batchNum][x][y][1] = (Color.green(pixel) - 127) / 255.0f
input[batchNum][x][y][2] = (Color.blue(pixel) - 127) / 255.0f
}
}

然后,我一步一步地分析了每个步骤,发现提取像素的方法是错误的,并且与python的所有方法完全不同。

然后我从 this source中找到了这样做的方法,并用我的函数更改了该函数:
    private fun convertBitmapToByteBuffer(bitmap: Bitmap): ByteBuffer {
val imgData = ByteBuffer.allocateDirect(4 * INPUT_SIZE * INPUT_SIZE * PIXEL_SIZE)
imgData.order(ByteOrder.nativeOrder())
val intValues = IntArray(INPUT_SIZE * INPUT_SIZE)


imgData.rewind()
bitmap.getPixels(intValues, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height)
// Convert the image to floating point.
var pixel = 0
for (i in 0 until INPUT_SIZE) {
for (j in 0 until INPUT_SIZE) {
val `val` = intValues[pixel++]
imgData.putFloat(((`val`.shr(16) and 0xFF) - IMAGE_MEAN)/IMAGE_STD)
imgData.putFloat(((`val`.shr(8) and 0xFF)- IMAGE_MEAN)/ IMAGE_STD)
imgData.putFloat(((`val` and 0xFF) - IMAGE_MEAN)/IMAGE_STD)
}
}
return imgData;
}

而且有效!

关于java - Tflite模型在Android(ml视觉)和Python中提供不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61182999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com