1

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

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

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

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

4

1 回答 1

2

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

如果我是对的,那么您已经达到了使用此模型所能获得的限制,您可能必须自己训练一个模型来做您想做的事情。

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

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

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

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

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

于 2018-03-26T16:32:28.853 回答