创建TFlite Android bytebuffer进行推理
我有一个经过定制培训的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:创建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][
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我也有同样的问题。你应该检查
或者你可以按照他的指示检查我最终得到了很好的结果