首页 > 解决方案 > 了解 tflite 模型的输入和输出

问题描述

我是 Tensorflow 的新手,并试图将其整合到我的项目中。我正在使用带有摄像头的树莓派 pi4 来检测我的喂鸟器的变化,拍照,然后用 tensorflow 识别那只鸟。我正在使用Birds_V1来完成此任务。

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

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

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

image_classifier:一个965维的概率向量,对应labelmap中的一个背景类和964种鸟类。

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

最后,我运行了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': '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}}]

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

我很欣赏可以对此任何部分进行的任何澄清,并感谢您认为对解决此问题有用的任何资源。我一直在寻求帮助,但还没有得到任何帮助。

标签: pythontensorflowmachine-learninginference

解决方案


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

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

回答: 通常,Images它们只是一个Numpy Array(在您的形状为 224、224、3 的情况下),其值范围为0 to 255. 我们NormalizePixel Values每个像素值除以 255,以便每个像素值都Pixel在范围内[0,1]。如果我们不这样做,执行Normalize所需的时间Pixel Values将会非常长。ModelConverge

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

问题probability vector维度965的A,对应class标签图中的一个背景和964种鸟类。我完全迷失了这里的意思。

回答Softmax Activation Function:在我们的 CNN 的最后一层,我们将使用一个Number of Units等于Number of Classes(在你的例子中,它的值是965)。因此, 的OutputLayer导致 965 Probabilities,所有的总和为Probabilities1。Class最高Probability的代表Class对应于Image

例如在一个5种中分别model output = [0.1,0.1,0.6, 0.1, 0.1]对应[A,B,C,D,E]种。这意味着输入图像被分类为物种 C(最大值 0.6)。(以@smile 为例,解释得很好)。

问题:我不知道如何解释interpreter.get_input_detailsinterpreter.get_output_details

答案get_input_details的源代码解释说它返回一个我们的输入图像张量的所有细节的列表类似地, get_output_details的源代码解释说它返回了我们的输出预测张量的所有细节的列表。有关 API、解释器的信息可以在这个Tensorflow 文档中找到。

所以在代码中,

[{'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表示Name图中输入张量的 ,Shape表示其shape. 的目的Quantization是减小Size的大小,Model因为MemoryofMobile Devices会更小。更多信息Quantization可以在这个Tensorflow 文档中找到。


推荐阅读