如何在Tensorflow的目标检测API中仅检测人类对象

4
我正在使用tensorflow对象检测API来检测物体。在我的Windows系统中,它运行得很好。我该如何更改它以仅检测指定的对象,例如,我只想检测人类而不是所有物体。
根据这个答案中的第一个评论,我已经检查了可视化文件,但没有找到与对象类别相关的内容。然后我查看了category_util.py并发现有一个csv文件从中加载所有类别,但在项目中找不到此csv文件。请问有谁能指点我正确的方向。谢谢。
1个回答

3
我猜您的问题是,您没有自己微调模型,而只是使用了模型库中的预训练模型!?
在这种情况下,我认为该模型已经可以检测出人类和其他物体,您想让这些其他物体消失吗?为此,您只需更改label_map.pbtxt文件,删除所有不需要的类别。如果您不确定在哪里找到此文件,请查看您的.config文件,并搜索label_map_path="PATH"

1
抱歉,我忘了提到我正在使用预训练模型 ssd_mobilenet_v1_coco_11_06_2017,我已经修改了 mscoco_label_map.pbtxt 并删除了所有对象,只剩下 person。当使用 API 进行测试时,对于其他对象(如 cartrucks),它会显示带有标签“NA”的边界框。我该如何去除这个,以便仅显示 person 的边界框而不是任何其他对象的边界框。谢谢。 - S Andrew
好的,这个脚本只使用模型的推理部分。它不会改变任何东西,我也不知道你在哪里可以调整num_classes参数。通过使用这个脚本,你可以检查output_dict['detection_classes']字典并删除所有不属于“人”类别的条目。 - Janikan
好的,谢谢。我会详细研究这个问题。关于 output_dict['detection_classes'],它只保存像 [[ 3. 3. 3. 1. 1..... 这样的数据,这些值代表什么意思?我们如何知道哪个类别是人? - S Andrew
1
谢谢。我终于做到了。我正在提取所有ID为“1”的类,因为它是人的ID,基于分数,如果分数低于50%,我会忽略该ID。通过这种方式,我只检测人。为了去除边界框,我修改了visualization_utils.py,在其中忽略了所有边界框,并仅显示人的框。最后,我还根据分数和类别计算检测到的人数。 - S Andrew
@SAndrew,由于它始终在检测所有90个类别,检测过程是否会加速?我想找到一种方法告诉模型仅运行特定的类别列表,这样我就可以仅检测人和汽车等。或者模型创建者可以添加灵活性,使用在线类别列表重新训练并仅下载能够检测人和汽车等的模型。 - KeitelDOG
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接