通过异常检测在视觉上检测猫


17

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

任务如下:

邻居的猫时不时在我的花园里逛,我不喜欢它们,因为它们倾向于在我的草坪上排便。我想有一个警告系统,当有猫在场时提醒我,以便我可以用我的超级浸泡器赶走它。为简单起见,假设我只关心黑白相间的猫。

我已经设置了带有相机模块的树莓派,可以捕获花园一部分的视频和/或图片。

样本图片:

样本花园图片

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

我估计,如果我每隔一秒钟拍摄一张照片,最终可能会得到五张每天包含猫的照片(约有60,000张带有阳光)。

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


1
现在考虑到这个问题,也许这个问题更适合交叉验证SE网站。对我来说,这种区别有点不清楚……
Frost 2014年

4
我认为这个问题非常适合该站点,因为它讨论了机器学习的实际应用。顺便说一句,愚蠢的问题,为什么猫的照片那么少?他们只来五秒钟吗?
insys 2014年

@insys,关于我对饮酒者保持警惕的谣言似乎在猫科动物社区中流传开来。他们倾向于不像以前那样徘徊。我猜想,除掉我的猫咪花园的实际目标是一件好事,即使它使我偏爱的,更复杂的解决方案复杂化了。
Frost

2
似乎很明显的下一步(在您进行猫的检测工作之后)是覆盆子pi控制的超级浸泡器:-)
Kryten 2014年

Answers:


8

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

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

只需确保在将激光转塔安装到猫入侵检测系统上之前,将假目标率降低到足够低。


1
对于受控环境而言,这是一个好主意,但我不确定在这种情况下是否适用,因为我们正在处理不断变化的自然环境,即由于天气,太阳,植物和树木的位置而变化风,季节等。我相信您所描述的变化区域在任何情况下都将接近整个图像的大小。
insys 2014年

@insys-我明白您的意思,但我不同意-我相信这会使检测器更灵活地进行更改。相对帧之间的时间差应小(〜秒到一分钟),因此,太阳,季节和天气应忽略不计。我同意风会导致植物移动,但是分类步骤可以避免这些植物,因为它们的大小/形状/颜色与猫不同。另外,在相似的时间使用两个帧可以标准化像素强度,以更好地处理变化的照明条件(例如,晴天与阴天的猫)。
bogatron 2014年

实际上,当我阅读您的评论时,我对您的回答更加困惑:)也许我误会了,但是,如果您实际上使用“提取的变化区域”来形成您的肯定样本(如您的问题中所述),您将如何做?确定他们是猫?他们可以是任何东西。这样,您的分类步骤将无法检测到任何东西,只有教您检测到的东西-即任何种类的变化。因此,它实际上是在重复“更改”检测器的工作。
insys 2014年

此外,照明条件绝对值得关注,但是,如果我的观点正确,目前尚不清楚在相差1分钟的时间内拍摄的两幅相似​​的图像将对像素强度进行归一化吗?
insys 2014年

提取的区域可以代表正例或负例-它们就是训练猫分类器所要使用的区域。关于强度,假设从主要从晴天图像中提取的区域训练分类器。然后,分类器可能会容易地找到具有白色毛皮的猫,但是在阴天(白色毛皮的亮度不那么高)或接近黄昏时,分类器将无法正常工作。对两个图像执行归一化有助于减轻该问题(即,一对亮图像和一对暗图像看起来类似于分类器)。
bogatron 2014年

4

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

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

我认为一种更可行的方法是在本课程的最后讨论Photo OCR工作流程时讨论的方法。

该方法包括将您的图像分割成较小的“块”,然后使用监督学习算法一张一张地浏览它们,并尝试根据每个块是否包含猫来对其进行分类。如果一个街区包含一只猫,警报器将响起。作为奖励,您还可以得到猫的位置,因此您可以考虑将一些“自动”响应合并为项目的未来步骤。

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

现在,当然,构建一个准确的猫检测器有多容易。


如果您的块将切成两半或更多的切片,将会发生什么?阻塞策略是一种非常常见的方法,但是从我的角度来看,当将摄像机完全固定在某个位置时,运动检测是一种更好且耗时更少的方法。
2014年

@adesantos –您所说的很可能是对的,并且对于预测移动和非移动部件之间的区别具有优势。但是对于培训(由bogatron进行描述),尚不清楚它会带来什么好处。总的来说,我认为这会增加复杂性,从而大大延长调试时间。移动窗口的优点在于它的简单性。
insys 2014年

顺便说一句,关于您提到的拆分,一个明显的策略是让窗口重叠,以使拆分位置不会影响分类器。
insys 2014年

我会在我的建议(运动检测)中增加使用带猫纹理的SIFT算法的功能。SIFT方法也可以与该块策略一起使用,但是在这种情况下,您将比需要的块更多。请注意,猫在移动,但是树或灌木丛却没那么多。
adesantos

3

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

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

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


2

OpenCV的背景减法将发现对象在硬化过程中移动。之后,您可以使用分类器或形状分析来区分猫,人,树木等。


1

它是一只鸟吗?是猫吗?我们有黑白猫大小!喜pies在这里。这样会失败。

首先要排除所有绿色区域,猫很少是绿色区域。

然后将其余部分与参考图像进行比较,以去除诸如石头和楼梯之类的静态物体。

应该可以检测到最小尺寸的物体,但是对于分类而言,分辨率太低。也可能是您的邻居测试他的新遥控无人机。

使用两个摄像头,您可以对物体进行3D映射并消除飞行物体。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.