通过异常检测视觉检测猫

数据挖掘 机器学习
2021-10-08 00:54:28

我有一个爱好项目,我正在考虑将其作为增加我迄今为止有限的机器学习经验的一种方式。我已经参加并完成了有关该主题的 Coursera MOOC。我的问题是关于项目的可行性。

任务如下:

邻居的猫不时来我的花园,我不喜欢,因为它们往往会在我的草坪上排便。我想有一个警告系统,当有猫出现时会提醒我,这样我就可以用我的超级浸泡器把它赶走。为简单起见,假设我只关心黑白着色的猫。

我已经设置了一个带有摄像头模块的树莓派,它可以捕捉花园一部分的视频和/或图片。

示例图片:

示例花园图像

我的第一个想法是训练一个分类器来识别猫或类似猫的物体,但在意识到我无法获得足够多的正样本后,我放弃了它,转而进行异常检测。

我估计,如果我在一天中的每一秒都拍摄一张照片,我最终可能会每天拍出五张包含猫的照片(大约 60,000 张有阳光的照片)。

使用异常检测是否可行?如果是这样,您会建议哪些功能?到目前为止,我的想法是简单地计算具有某些颜色的像素数;进行某种斑点检测/图像分割(我不知道该怎么做,因此希望避免)并对它们执行相同的颜色分析。

4个回答

您可以通过使用运动/变化检测方法显着简化您的问题。例如,您可以将每个图像/帧与早期(例如,一分钟前)的图像/帧进行比较,然后只考虑自较早时间以来发生变化的像素。然后,您可以提取矩形变化区域并将其用作分类或异常检测的基础。

采用这种方法可以显着简化您的分类器并降低错误目标率,因为您可以忽略任何不是猫大小的东西(例如,人或鸟)。然后,您将使用提取的未过滤掉的变化区域来形成分类器(或异常检测器)的训练集。

在将激光炮塔安装到您的猫科动物入侵检测系统之前,请确保您的错误目标率足够低。

这是一个有趣且雄心勃勃的项目:)

在这种情况下,我不确定异常检测(至少在您遵循的课程中描述的意义上)是否是一个非常合适的算法。

我会考虑一种更可行的方法,即在演示照片 OCR 工作流程的课程结束时所讨论的方法。

该方法包括将您的图像分割成更小的“块”,并使用监督学习算法逐个检查它们,并尝试根据每个块是否包含猫来对其进行分类。如果一个街区里有一只猫,警报就会响起。作为奖励,您还获得了猫的位置,因此您可能会考虑将一些“自动”响应作为您项目的未来步骤。

这里的好处是您不必使用特定于您的花园的数据集来训练您的算法(正如您提到的那样很难创建),但是您可以使用从网上取下的猫的图像(例如,也许您可​​以搜索“草地上的猫”或其他东西),也许还有来自您(或其他)花园的照片。因此,您不必花费时间从相机中收集照片,并且您避免了拥有非常小的(可比较的)阳性样本(即猫)的风险。

现在,当然,构建一个准确的猫探测器有多容易是另一个话题。

运动/变化检测的策略当然是足够的,但我会添加一个额外的操作。我会检测那些更有可能发生变化的区域,例如,梯子似乎是人类可以存在的地方(也是猫),而草地则是狗、猫或人类可以存在的地方。

我将捕获具有对象大小和轨迹的地图,并以此创建一个集群,目的是检测以特定速度和轨迹移动的对象(在图像中具有特定大小的像素)。

您可以通过使用 R 来实现这一点,或者我建议使用 OpenCV 来检测运动并跟随不同的对象。

OpenCV 的背景减法会发现物体在你的硬化周围移动。之后,您可以使用分类器或形状分析来区分猫、人、树等。