使用TensorFlow和#x27计算行人数量;目标检测

使用TensorFlow和#x27计算行人数量;目标检测,tensorflow,object-detection-api,Tensorflow,Object Detection Api,我是机器学习领域的新手,根据我在youtube上看到的和在互联网上读到的内容,我推测使用tensorflow的对象检测API在视频中计算行人是可能的 因此,我对tensorflow做了一些研究,阅读了关于如何安装tensorflow的文档,最后下载并安装了tensorflow。使用github上提供的示例文件,我修改了与此处提供的object_detection notebook相关的代码-> 在对visualization_utils.py脚本进行更改时,我在收集的视频上执行了修改后的代码,以

我是机器学习领域的新手,根据我在youtube上看到的和在互联网上读到的内容,我推测使用tensorflow的对象检测API在视频中计算行人是可能的

因此,我对tensorflow做了一些研究,阅读了关于如何安装tensorflow的文档,最后下载并安装了tensorflow。使用github上提供的示例文件,我修改了与此处提供的object_detection notebook相关的代码->

在对visualization_utils.py脚本进行更改时,我在收集的视频上执行了修改后的代码,以便在屏幕上报告穿过定义的感兴趣区域的对象数量。也就是说,我收集了person类的边界框尺寸(左、右、上、下),并计算了穿过定义的感兴趣区域的所有检测(想象视频帧上有一组左右像素值的两条虚拟垂直线,然后将检测到的边界框的左、右值与预定义值进行比较)。然而,当我使用这个程序时,我忽略了很多行人,即使他们被程序检测到。也就是说,程序正确地将他们分类为人,但有时他们不符合我定义的计数标准,因此他们不被计数。我想知道是否有一种更好的方法可以使用代码来计算唯一的行人,而不是使用我正在尝试开发的简单方法。我使用的方法正确吗?还有其他更好的方法吗?非常感谢您的帮助


请对我放松点,因为我不是一个机器学习专家,只是一个新手

您使用的是一个经过训练的预训练模型,该模型通常用于识别人。我想你是说有些人是行人,而有些人不是行人,例如,站在灯前等待的人是行人,但站在街后花园里的人不是行人

如果我是对的,那么你已经达到了这个模型的局限性,你可能需要自己训练一个模型来做你想做的事情

由于您是ML的新手,构建自己的数据集并训练自己的模型可能听起来是一项艰巨的任务,因此肯定有一条学习曲线。所以我会建议最简单的方法。也就是说,使用对象检测模型来识别人,然后训练一个新的二元分类模型(关于最容易训练的模型)来识别特定的人是否是行人(您将创建一个图像数据集和1/0值来识别他们是否是行人)。我建议这样做是因为布尔分类模型是一个非常简单的模型,并且有很多教程可以学习。这里有一个很好的例子:

执行此操作时需要注意以下几点:

  • 当您构建数据集时,您将需要一组图像,至少几千张,以及每个图像的1/0分类(行人或非行人)
  • 如果您从imagenet上预训练的模型开始,您将获得比从头开始训练更好的结果(尽管这可能是一个合理的步骤2,因为这是一个额外的任务)。特别是如果你只有几千张图片可以训练的话
  • 由于您的图像中将包含多人,因此您很难确定您希望模型将哪个人分类为行人或非行人。没有一个正确的方法可以做到这一点。如果你有一个黄色的框围绕着这个人,网络可能会成功地学习这个符号。另一种有效的方法可能是删除图像中检测到的其他人,并将该区域保留为黑色。以目标人为中心也是一种合理的方法

我的最后一点说明了这个想法的一个问题,因为它是我提出的。最好的解决方案是改变目标检测网络,输出每个人的边界框,以及行人/非行人分类;或者只训练模型识别行人,特别是首先。我提到这一点更为理想,但我认为这是一个比我的第一个建议更高级的任务,也是一个更复杂的数据集来管理。这可能不是您在学习ML时首先要解决的问题。

我如何修改对象检测程序,以便在一系列帧中计算唯一的人?我对目标检测程序的输入是一个视频文件而不是图像文件,我使用opencv库读取输入视频,然后逐帧将其传递给tensor flow。该视频以每秒30帧的速度播放约350000帧。同一个人出现在多个帧中,因此,如果每次tensorflow检测到一个人时我都开始计数,那么我会多次计数同一个人,因为他出现在多个帧中。我希望我的解释正确。OpenCV有一些实时对象跟踪功能。您可能希望深入了解OpenCV目前提供的功能。从头开始构建一个对象识别和跟踪应用程序当然是可行的,但并非微不足道。我想我需要一年的时间才能从头开始建造这样的东西。在建立这样一个模型时,我的第一个倾向是将帧之间的两个对象识别为相同或不同。三重嵌入方法(人脸识别)似乎是一个合理的起点:OpenCV确实提供了一个跟踪器,但我不确定如何设置工作流,使我能够使用OpenCV跟踪一个对象,同时检测/分类它是什么类型的对象。我还相信谷歌在示例文件夹中提供的对象检测脚本已经能够跨帧跟踪对象。但问题是我如何利用它来识别uniqu