[英]Understanding input and output of tflite model
我是 Tensorflow 的新手,并试图将其合并到我的项目中。 我正在使用带有摄像头的树莓派 pi4 来检测我的喂鸟器的变化,拍照,然后用 tensorflow 识别那只鸟。 我正在使用Birds_V1来完成此任务。
我很好奇如何解释输入和 output。 根据概述,输入为:
预计是大小为 224 x 224 的 3 通道 RGB 彩色图像,缩放为 [0, 1]。
我对缩放到 [0,1] 的含义感到困惑此外,output
image_classifier:一个965维的概率向量,对应labelmap中的背景class和964种鸟类。
我完全迷失了这里的意思。
最后,我运行了interpreter.get_input_details() 和interpreter.get_output_details() 来看看它对我来说是什么output。
我把这个打印回来了,顶部是输入,底部是 output:
[{'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}}]
我不知道如何解释这一点,并且想知道我是否应该放弃它或者如果它不重要则忽略它。
我很欣赏可以对此任何部分进行的任何澄清,并感谢您认为对解决此问题有用的任何资源。 我一直在寻求帮助,但还没有得到任何帮助。
@smile 在评论中回答了大多数问题,但为了社区的利益,在此处(回答部分)提供了澄清。
问题:我对缩放到 [0,1] 的含义感到困惑
答:通常, Images
只是一个Numpy Array
(在您的形状为 224、224、3 的情况下),其值范围从0 to 255
。 我们通过将每个像素值除以 255 来Normalize
Pixel Values
,以便每个Pixel
的值都在[0,1]
范围内。 如果我们不对Pixel Values
进行Normalize
, Model
Converge
所需的时间会非常长。
有关规范化的更多信息,请参阅此Stack Overflow Answer和此Stack Exchange Answer 。
问题:维数为 965 的probability vector
,对应于背景class
和 label map 中的 964 种鸟类。 我完全迷失了这里的意思。
答:在我们 CNN 的最后一层,我们将使用Softmax Activation Function
,其Number of Units
等于Number of Classes
(在您的情况下,其值为965 )。 因此,该Layer
的Output
将产生 965 个Probabilities
,所有Probabilities
之和为 1。 Probability
最高的Class
表示对应于该Image
AFZ 的Class
例如,在 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_details
和interpreter.get_output_details
答案: get_input_details的源代码解释说它返回一个我们的输入图像张量的所有细节的列表。 同样, get_output_details的源代码解释说它返回了我们的 Output 预测张量的所有细节的列表。 有关 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
的目的是减小Model
的大小,因为Mobile Devices
的Memory
会更小。 有关Quantization
的更多信息,请参阅此Tensorflow 文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.