我正在尝试使用 TF 对象检测 API 返回图像中已检测到的对象列表。
为此,我使用 print([category_index.get(i) for i in classes[0]])
来打印已检测到的对象列表,或者使用 print(num_detections)
来显示检测到的对象数量,但在两种情况下,它都返回一个包含 300 个值的列表,或者相应地返回值 [300.]
。
如何仅返回图像上实际存在的对象?或者如果有错误,请帮助找出问题所在。
我在训练时使用了 Faster RCNN 模型的配置文件和检查点。可以确定它确实能检测到图像中的几个对象,下面是检测结果:
我的代码如下:
...
这会产生以下结果:
...
非常感谢您提供的任何信息!
更新:
非常感谢所有帮助解决此问题的朋友。以下代码行正是我所需要的,它为我提供了一个包含已检测对象的列表,这样我就可以对它们进行其他操作。
print [category_index.get(value) for index,value in enumerate(classes[0]) if scores[0,index] > 0.5]
回答:
据我所知,您有 300 个检测结果。visualize_boxes_and_labels_on_image_array
只显示其中很少一部分,因为 min_score_thresh=.5
(这是默认值)对于大多数检测结果来说太高了。
如果您想在输出中添加这样的过滤,可以编写如下代码:
min_score_thresh = 0.5print([category_index.get(i) for i in classes[0] if scores[0, i] > min_score_thresh)
您可以更改 min_score_thresh
来选择所需的阈值。打印类别名称和分数值可能会很有用。