我有一个简单的图像识别器模型在pb中,并转换成tflite格式。网络的输入为1,224,224,3
创建了一个Xamarin.forms android应用程序,并添加了tflite nuget。创建解释器
float[]输入=GetImageData();
当我尝试运行tflite推断时,它给我一个异常,因为输入dim!=4
_TFLite.run(输入,输出);//outputs是保存分类结果的数组
但是在本例中,在_TFLITE.RUN(inputs,outputs)
中,输入不能转换为java.lang.Object。
我的问题是,我如何将我的图像作为形状为1,224,224,3的输入传递到网络?
已解决
只需将float[]数组转换为ByteBuffer就可以了,如果输出是multidim数组,那么也必须对输出执行相同的操作
_outputBuffer = ByteBuffer.Allocate(1008 * 4); // 1008 number of labels
_floatInBytData = new byte[floatValues.Length * sizeof(float)];
System.Buffer.BlockCopy(floatValues, 0, _floatInBytData, 0, _floatInBytData.Length);
using (var bf = ByteBuffer.Wrap(_floatInBytData))
{
_outputBuffer.Rewind();
bf.Rewind();
_tflite.Run(bf, _outputBuffer);
}
float[] outputs = new float[1008];
byte[] o = new byte[1008 * 4];
_outputBuffer.Position(0);
_outputBuffer.Get(o);
System.Buffer.BlockCopy(o, 0, outputs, 0, o.Length);