创建TFlite Android bytebuffer进行推理

创建TFlite Android bytebuffer进行推理,android,tensorflow-lite,inference,Android,Tensorflow Lite,Inference,我有一个经过定制培训的mobilenetV2模型,它接受128x101x3 FLOAT32数组作为输入。 在Android(Java)中,调用tflite模型推断时,浮点[x][y][z]输入必须转换为大小为4128101*3的字节缓冲(4表示浮点大小,其余表示图像大小) 问题是,我有很多方法可以进行转换,但我找不到哪一种是正确的。我可以考虑在bytebuffer First中为每个x和y添加所有z,或者为每个x和每个z添加所有y 例如,为了简单起见,我们假设第三维只是一个重复,即[x][y][

我有一个经过定制培训的mobilenetV2模型,它接受128x101x3 FLOAT32数组作为输入。 在Android(Java)中,调用tflite模型推断时,浮点[x][y][z]输入必须转换为大小为4128101*3的字节缓冲(4表示浮点大小,其余表示图像大小)

问题是,我有很多方法可以进行转换,但我找不到哪一种是正确的。我可以考虑在bytebuffer First中为每个x和y添加所有z,或者为每个x和每个z添加所有y

例如,为了简单起见,我们假设第三维只是一个重复,即[x][y][0]=[x][y][1]=[x][y][2]。现在我可以像这样创建bytebuffer:

    ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * 128 * 101 * 3);
        byteBuffer.order(ByteOrder.nativeOrder());
        for (int i=0; i<myArray.length; i++){
            for(int j=0; j<myArray[0].length; j++){
                byteBuffer.putFloat(myArray[i][j]); // z=0
                byteBuffer.putFloat(myArray[i][j]); // z=1
                byteBuffer.putFloat(myArray[i][j]); // z=2
            }
        }
    byteBuffer.rewind();
    for (int i=0; i<myArray.length; i++){
            int [] inpShapeDim = {1, 1, myArray[0].length, 1};
            TensorBuffer valInTnsrBuffer = TensorBuffer.createDynamic(imageDataType); // imageDataType = FLOAT32
            valInTnsrBuffer.loadArray(myArray[i], inpShapeDim); //inpShapeDim=1x128x101x3
            byteBuffer.put(valInTnsrBuffer.getBuffer());
        }
        int oneDeltaBufferPosition = byteBuffer.position();
        for (int z=0; z<2; deltas++) {
            for (int i = 0; i < oneDeltaBufferPosition; i++) {
                byteBuffer.put(byteBuffer2.get(i));
            }
        }
        byteBuffer.rewind();
ByteBuffer-ByteBuffer=ByteBuffer.allocateDirect(4*128*101*3);
byteBuffer.order(ByteOrder.nativeOrder());

对于(inti=0;i我也有同样的问题。你应该检查

或者你可以按照他的指示检查我最终得到了很好的结果