第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Tflite 模型在 Android(ml vision)和 Python 中給出不同的輸出

Tflite 模型在 Android(ml vision)和 Python 中給出不同的輸出

墨色風(fēng)雨 2022-10-06 17:01:23
我正在使用 ML Vision api 從 FaceNet 模型創(chuàng)建嵌入,然后比較兩個(gè)嵌入之間的余弦距離。Android 版本和 Python 的輸出差別很大。Python 版本的性能優(yōu)于 android 版本。可能是什么問題?我在兩者中都使用了 FaceNet 模型。我正在使用 ML 工具包進(jìn)行推理https://firebase.google.com/docs/ml-kit/android/use-custom-models我認(rèn)為這可能是由于java讀取圖像的方式引起的,因?yàn)閍ndroid中制作的圖像數(shù)組與python中相同圖像的數(shù)組不同。
查看完整描述

1 回答

?
三國紛爭

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

所以我被困在這個(gè)問題上,因?yàn)槲艺陉P(guān)注ML vision docs上的谷歌文檔, 其中圖像在將其提供給分類器之前被轉(zhuǎn)換為浮點(diǎn)數(shù)組,它看起來像這樣:

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

    }

}

然后我一步一步分析,發(fā)現(xiàn)獲取像素的方式是錯(cuò)誤的,和python做這一切的方式完全不同。

然后我從這個(gè)來源找到了這種方法,我用我的方法改變了這個(gè)功能:

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;

   }


查看完整回答
反對 回復(fù) 2022-10-06
  • 1 回答
  • 0 關(guān)注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號