python - 了解 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}}]
我不知道如何解释这一点,并且想知道我是否应该放弃它或者如果它不重要则忽略它。
我很欣赏可以对此任何部分进行的任何澄清,并感谢您认为对解决此问题有用的任何资源。我一直在寻求帮助,但还没有得到任何帮助。
解决方案
@smile 在评论中回答了大多数问题,但为了社区的利益,在此处(回答部分)提供了澄清。
问题:我对缩放到 [0,1] 的含义感到困惑
回答: 通常,Images
它们只是一个Numpy Array
(在您的形状为 224、224、3 的情况下),其值范围为0 to 255
. 我们Normalize
将Pixel Values
每个像素值除以 255,以便每个像素值都Pixel
在范围内[0,1]
。如果我们不这样做,执行Normalize
所需的时间Pixel Values
将会非常长。Model
Converge
有关规范化的更多信息,请参阅此Stack Overflow Answer和此Stack Exchange Answer。
问题:probability vector
维度965的A,对应class
标签图中的一个背景和964种鸟类。我完全迷失了这里的意思。
回答Softmax Activation Function
:在我们的 CNN 的最后一层,我们将使用一个Number of Units
等于Number of Classes
(在你的例子中,它的值是965)。因此, 的Output
将Layer
导致 965 Probabilities
,所有的总和为Probabilities
1。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_details
和interpreter.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
因为Memory
ofMobile Devices
会更小。更多信息Quantization
可以在这个Tensorflow 文档中找到。
推荐阅读
- python - 控制动态 asyncio.Semaphore
- python - Python 和 Windows 10 未发布文件句柄
- javascript - Reactjs / MaterialUI 3:选择表格行
- c# - 如何通过传入枚举值和属性类型来获取枚举上的自定义属性?
- html - 通过角度6中的字符串呈现html时,html标签属性不起作用
- r - 使用 geom_segment 将一条线连接到 y 轴
- c - C中重叠对象的语义是什么?
- graalvm - 如何在 Graalvm 的反射支持中添加一个包?
- python - 如何拖放具有附加属性的 QListWidgetItem 子类的实例?
- c++ - 浮点数数组上的 ITK 过滤器