【发布时间】:2020-07-06 18:18:25
【问题描述】:
我是 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}}]
我不知道如何解释这一点,并且想知道我是否应该放弃它,或者如果它不重要则忽略它。
感谢您对此任何部分的任何澄清,并感谢您认为对解决此问题有用的任何资源。我一直在寻求帮助,但还没有得到任何帮助。
【问题讨论】:
-
嗨,将缩放视为一种数学运算,将值带入 [0,1] 范围内。例如 MinMaxScaler(从一个值中减去最小值并除以最小值和最大值之间的差值)。每个训练输出都会给出一个大小为 965 的概率向量,表示图像 A 属于 965 个类别中的任何一个。然后你选择最高的概率值作为真正的鸟类。例如,在 5 个物种模型中,输出 1 = [0.1,0.1,0.6,0.1,0.1] 分别对应于 [A,B,C,D,E] 物种。这意味着输入图像被分类为物种 C(最大值 0.6)。
-
@smile 您好,感谢您的评论。所以如果我理解你在说什么,我需要使用像 MInMaxScaler 这样的函数来将每个潜在的 965 个标签的概率值缩放为 0 到 1 之间的某个数字,所有概率总计高达 1 ?
-
您缩放输入(图像)。概率向量是模型返回的。你不需要扩展它。概率向量以概率的形式告诉您输入属于哪个物种。我希望这会有所帮助。
-
是的,这是有道理的。谢谢你,我很感激你的帮助。我现在至少理解了我的问题的那一部分!
-
到你问题的最后一部分。首先,您使用的是来自 Tensorhub blog.tensorflow.org/2018/03/… 的预训练模型。在 tensorhub 页面上,您可以浏览可用的模块(您的示例来自分类示例)。可以观察到您的示例也是一个 TFLite 预训练模块,因此这个 tensorflow.org/lite 将特别有用。此tensorflow.org/lite/models/image_classification/overview 包含 TFLite 的图像分类详细信息。链接包含大量信息。探索它们。最好的问候
标签: python tensorflow machine-learning inference