tensorflow-lite-使用tflite解释器在输出中获取图像

时间:2018-11-04 13:10:00

标签: tensorflow-lite

我正在尝试使用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

2 个答案:

答案 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推断过程中正确使用它。