使用TensorFlow的对象检测计算行人

时间:2018-03-26 04:22:01

标签: tensorflow object-detection-api

我是机器学习领域的新手,基于我在youtube上看到的内容并在互联网上阅读,我猜想有可能使用tensorflow的对象检测API来计算视频中的行人。

因此,我对tensorflow进行了一些研究,并阅读了有关如何安装tensorflow的文档,然后最终下载了tensorflow并进行了安装。使用github上提供的示例文件,我调整了与此处提供的object_detection笔记本相关的代码 - > https://github.com/tensorflow/models/tree/master/research/object_detection

我在更改imag_utils.py脚本时对我收集的视频执行了改编的代码,以便报告跨越屏幕上定义的感兴趣区域的对象数量。也就是说,我收集了人类的边界框尺寸(左,右,上,下),并计算了越过定义的感兴趣区域的所有检测(想象一下视频帧上的一组两条虚拟垂直线,左右像素值和然后将检测到的边界框的左右值与预定义值进行比较)。但是,当我使用这个程序时,即使程序检测到这些程序,我也很少会遇到行人。这就是程序正确地将它们归类为人,但有时它们不符合我为计数定义的标准,因此它们不计算在内。我想知道是否有更好的方法使用代码计算独特的行人,而不是使用我正在尝试开发的简单方法。我使用的方法是正确的吗?还有其他更好的方法吗?将不胜感激任何帮助。

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

1 个答案:

答案 0 :(得分:2)

您正在使用预训练模型,该模型经过培训可识别一般人。我想你说有些人是行人,有些人不是行人,例如,有人站在灯光下等待行人,但有人站在街道后面的花园里不是行人。

如果我是对的,那么你已经达到了这个模型所能得到的限制,你可能需要自己训练一个模型去做你想做的事。

由于你刚接触ML建立你自己的数据集并训练你自己的模型可能听起来像一个很高的顺序,有一个学习曲线可以确定。所以我建议最简单的方法。也就是说,使用对象检测模型来识别人,然后训练新的二元分类模型(关于最简单的训练模型)以识别特定人是否是行人(您将创建图像数据集和1/0将它们标识为行人或非行人的价值观)。我建议这是因为布尔分类模型就像你可以获得的模型一样简单,你可以遵循许多教程。这是一个很好的:

https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/neural_network.ipynb

执行此操作时需要注意的一些事项:

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

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