提问者:小点点

将dim4输入以C#xamarin形式传递到tflite


我有一个简单的图像识别器模型在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的输入传递到网络?


共1个答案

匿名用户

已解决

只需将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);