检测异常害虫





5.00/5 (1投票)
在本文中,我们将讨论一些关于检测“异国”害虫的想法,例如驼鹿和犰狳。
引言
不受控制的野生动物对于企业和房主来说都是一个难题。像鹿、驼鹿甚至猫这样的动物都会对花园、庄稼和财产造成破坏。
在本系列文章中,我们将演示如何(在树莓派上)实时(或接近实时)检测害虫(例如驼鹿),然后采取行动摆脱害虫。由于我们不想造成任何伤害,我们将专注于通过播放响亮的声音来吓跑害虫。
欢迎您下载该项目的源代码。我们假设您熟悉 Python,并且对神经网络的工作原理有基本的了解。
在上一篇文章中,我们描述了如何使用在 Pascal VOC 2012 数据集上预训练的 MobileNet SSD 模型来检测动物。该模型可以检测二十种类型的物体,包括潜在的家养害虫,如猫和狗。不幸的是,它无法检测野生动物。在本文中,我们将探讨检测野生动物害虫(如鹿、驼鹿和犰狳)的方案。
使用另一个模型?
我们找到了一个似乎运行良好的物体检测器网络——除了它无法检测到我们想要识别的所有害虫。
我们是否应该使用另一个 DNN 检测器模型,其中包括鹿、驼鹿和犰狳类别?这可能有效,但请记住,我们的选择仅限于那些可以在没有太多计算能力设备上运行的模型。
在这些设备上运行良好的模型通常在包含少于 100 个类的数据集上进行训练。例如,流行的COCO数据集包含 80 个对象类别。因此,我们处于这样的境地,即没有合适的预训练 DNN 模型为我们想要检测的每种动物都提供一个类别。例如,COCO 数据集没有驼鹿的类别。
也许是另一个数据集?
这是另一个想法:如果我们使用包含我们选择的害虫的新数据集来训练我们的 MobileNet 模型呢?这种方法称为迁移学习。它已在计算机视觉的许多领域被证明是有效的。但是迁移学习是如何工作的,我们如何使用它呢?
首先,我们需要获取一个包含网络应该识别的新害虫图像的数据集。
然后,在新的数据集上训练基本 DNN 模型时,可以冻结该网络的一些卷积层,以防止其内核(卷积滤波器)在训练过程中发生变化。其他层在新数据集上进行训练,使模型“调整”为检测新类别。
这种方法的一个优点是它使用经过验证且可靠的 DNN 模型,这为我们提供了获得准确结果以检测我们的“异国”害虫的良好机会。另一方面,微调 SSD 模型并非易事。它需要一个包含新害虫的大型数据集,以及大量的经验和努力来将模型调整到高度的准确性。
不,使用另一个模型——一个更简单的模型
另一种方法是创建我们自己的轻量级模型,这在边缘设备上可能更有效。在这种情况下,我们可能应该为了分类器的简单性而牺牲 SSD 模型的通用性。我们的目标是创建一个可以识别特定类型动物的 AI 系统,我们可以开发一个适合此任务的分类 DNN。与我们在本系列前面使用的 SSD 模型相比,该模型可以非常简单。另一方面,我们可以期望该模型在边缘设备上运行时更有效。
正如我们之前提到的,分类器 DNN 在害虫检测方面的能力是有限的。使用分类器,检测对象必须在图像中被视为一个整体,因此我们需要设计一种算法来选择包含对象的图像部分。
这可以通过使用简单的运动检测器来实现。因为我们的最终目标是在视频流(而不是单独的帧)中检测害虫,我们可以使用运动检测算法来选择感兴趣的片段,然后应用分类器来检查所选片段是否包含害虫。
后续步骤
我们将为我们的害虫清除系统选择最后一种方法——开发一个轻量级、简单的分类器模型。在下一篇文章中,我们将为我们选择的害虫创建一个训练数据集:驼鹿。