我正在尝试使用Tensorflow-for-poets-2 TFLite教程https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#6
的工作流程但是,我没有进行图像分类,而是尝试进行样式转换。这意味着我的网络的输入和输出都是图像(与原始示例相比,输入为图像而输出为分数列表)。
我的许多问题之一是从tflite推断中获取经过输出处理的图像:
加载tflite模型后,我将拥有tflite解释器 tflite 。 使用该解释器,我可以进行推断:
tflite.run(imgData, Out_imgData);
imgData,Out_imgData
是ByteBuffer,其创建方式与Tensorflow-for-poets-2 TFLite教程https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#6相同。
现在我的推理输出为ByteBuffer
Out_imgData
当推理输出是图像时,我找不到示例。请帮助我将浮点型ByteBuffer Out_imgData 转换为位图图像。或给我举个例子。
视觉问题描述: 在python中使用tflite解释器,我得到了输出图像: enter image description here
答案 0 :(得分:0)
我的更新: 视觉问题描述:在python和android中使用tflite解释器的比较: enter image description here
答案 1 :(得分:0)
我在分割项目中遇到了类似的问题:在使用tflite文件进行推理时,几乎所有输出像素均为255s,但是在对导出的模型进行推理时,所有像素都是正确的。 长期寻找解决方案使我进入了this related issue。它说问题在于批处理规范化层。我删除了它们,并且输出恢复正常,但是神经网络质量急剧下降,没有bn。我试图将tf.layer.batch_normalization替换为tf.keras.layers.BatchNormalization和tf.contrib.layers.batch_norm,但都一样。最后,我通过实现自己的批处理规范化来解决该问题:
def my_moments(input_tensor):
mean = tf.reduce_mean(input_tensor, axis=[0, 1, 2])
dev = input_tensor - mean
dev = dev * dev
dev = tf.reduce_mean(dev, axis=[0, 1, 2])
return mean, dev
def my_bn(input_tensor):
mu = tf.Variable(tf.ones(input_tensor.shape[3]))
beta = tf.Variable(tf.zeros(input_tensor.shape[3]))
mean, dev = my_moments(input_tensor)
return beta + mu * (input_tensor - mean) / (tf.sqrt(dev) + 0.001)
请注意,这不是批处理规范的字面实现(此处未使用移动平均),因为我的项目仅需要训练模式。还要注意,我们不能使用tf.nn.moments来计算均值和dev,因为tflite不支持它(因此我们需要暂时实现自己的功能)。用提供的功能替换了批量归一化之后,我可以训练我的网络,将其导出到tflite并在tflite推断过程中正确使用它。