了解tflite模型的输入和输出

时间:2020-07-06 18:18:25

标签: python tensorflow machine-learning inference

我是Tensorflow的新手,正在尝试将其纳入我的项目。我正在使用带相机的树莓派pi4检测我的喂鸟器的变化,拍摄照片,然后使用张量流识别那只鸟。我正在使用Birds_V1完成此操作。

我很好奇如何解释输入和输出。根据概述,输入为:

预计为尺寸为224 x 224的3通道RGB彩色图像,缩放为[0,1]。

我对缩放为[0,1]的含义感到困惑 此外,输出

image_classifier:尺寸为965的概率向量,对应于标签图中的背景类别和964种鸟类。

我完全迷失了这里的意思。

最后,我运行了解释器.get_input_details()和解释器.get_output_details()看看它会输出什么。

我把它打印回来了,顶部是输入,底部是输出:

[{'name': 'module/hub_input/images_uint8', 'index': 170, 'shape': array([  1, 224, 224,   3]), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.0078125, 128), 'quantization_parameters': {'scales': array([0.0078125], dtype=float32), 'zero_points': array([128]), 'quantized_dimension': 0}}]

[{'name': 'module/prediction', 'index': 171, 'shape': array([  1, 965]), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.00390625, 0), 'quantization_parameters': {'scales': array([0.00390625], dtype=float32), 'zero_points': array([0]), 'quantized_dimension': 0}}]

我不知道该怎么解释,并且想知道我是否应该放弃它,或者如果它不重要则忽略它。

我感谢您对此部分的任何澄清,并感谢您认为对解决此问题有用的任何资料。我一直在寻找帮助的人,但还没到任何地方。

1 个答案:

答案 0 :(得分:0)

@smile在评论中回答了大多数问题,但在此处(答案部分)提供了澄清,以使社区受益。

问题:我对缩放为[0,1]的含义感到困惑

答案:通常,Images只是Numpy Array(在您的形状为224、224、3的情况下),其值范围为0 to 255 。通过将每个像素值除以255,我们Normalize Pixel Values使得每个Pixel的值将在[0,1]范围内。如果我们不Normalize Pixel Values,那么ModelConverge所花费的时间将会非常长。

有关规范化的更多信息,请参阅此Stack Overflow Answer和此Stack Exchange Answer

问题:尺寸为965的probability vector,对应于标签图中的背景class和964种鸟类。我完全迷失了这里的意思。

答案:在我们的CNN的最后一层,我们将使用Softmax Activation Function等于Number of Units的{​​{1}}(在您的情况下,值为 965 )。因此,该Number of Classes中的Output将导致965 Layer,所有Probabilities的总和为1。Probabilities最高的{{1 }}代表与该Class相对应的Probability

例如在分别对应于Class个物种的5个物种Image中。这意味着输入图像被分类为C类(最大值0.6)。 (以@smile的示例为例,因为它已经很好地说明了。)

问题:我不知道如何解释model output = [0.1,0.1,0.6, 0.1, 0.1][A,B,C,D,E]

答案get_input_details的源代码解释为它返回输入图像张量的所有详细信息的列表。同样,get_output_details的源代码解释说,它返回输出预测张量的所有详细信息的列表。可以在此Tensorflow Documentation中找到有关API解释器的信息。

在代码中,

interpreter.get_input_details

interpreter.get_output_details表示图中输入张量的[{'name': 'module/hub_input/images_uint8', 'index': 170, 'shape': array([ 1, 224, 224, 3]), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.0078125, 128), 'quantization_parameters': {'scales': array([0.0078125], dtype=float32), 'zero_points': array([128]), 'quantized_dimension': 0}}] Name表示其NameShape的目的是减小shape的大小,因为Quantization的{​​{1}}会更小。可以在此Tensorflow Documentation中找到有关Model的更多信息。