边缘 AI:口罩检测






4.38/5 (4投票s)
创建人脸口罩检测器的不同方法
引言
在本系列文章中,我将引导您完成大多数机器学习(ML)专家在其职业生涯的某个阶段都必须处理的关键任务:计算机视觉。即使听起来像高科技,但事实并非如此!此外,尽管我们将重点关注人脸口罩检测器,但相同的过程也可以应用于任何其他类似任务。
您需要具备一些 Python、Linux 命令行和 ML 知识。我将在指导您完成项目本身的过程中逐步深入概念。有时可能会有些繁重,但作为开发人员,我们可以解决任何问题!
即使 COVID-19 疫苗已经出现,这场疫情仍然是一个严重的问题。我们需要应对它,尤其是一些个人不遵守避免传染的最低要求,例如保持社交距离或佩戴口罩。人工智能(AI)可以在确保人们至少佩戴口罩方面提供巨大帮助。AI 能否完成这项任务?此外,是否可以在树莓派或类似的廉价便携式计算机上部署 AI 人脸口罩检测器?
答案是可以。
您需要两样东西来使解决方案生效:大量数据和强大的计算能力。幸运的是,得益于在人工神经网络和深度学习方面取得的重要进展,以及计算能力的巨大提升,我们可以训练所需的深度学习模型。此外,我们所需的训练数据也 readily available(随时可用)。
如果您的计算机硬件能力一般,请不要担心。我将专注于以一种您可以使用普通计算机实现的编码方式来完成这个项目。我们将使用云托管的 Jupyter Notebooks,只将本地计算机用于轻量级任务。话不多说,让我们开始吧!
AI 人脸口罩检测技术
如今,有多种方法可以获得功能齐全、技术先进的物体检测器,从为特定需求设计的非常复杂的开发,到更通用但仍然不错的模型实现。您可以从头开始设计一个完整的架构,该架构由几个复杂的层组成,或者简单地使用一个预训练模型,该模型在项目结束时也能获得非常相似的结果。
在大多数实际实现中,您构建 AI 解决方案的时间会很有限。我将一次提出几种不同的解决方案,对两者进行简要介绍,并解释它们的工作原理,尽管我只会保留其中一种。如果以后您想进一步探索另一种方案,我会提供足够的信息。
我将从一种许多开发人员使用的常见解决方案开始,因为它具有推理速度快、通用性强和文档完善的优点:Keras + MobileNet V2 + OpenCV。
结合 Keras、MobileNet V2 和 OpenCV 实现模型
这是这种组合的简要概述。您可能知道,Keras 是一个用户友好且功能强大的深度学习框架,以 TensorFlow 作为其后端引擎(通常称为 TensorFlow 抽象 API)。它易于使用和部署,轻量级,并且可以应用于机器学习行业的几乎任何任务。如果您喜欢保持简单,可以将 Keras 添加到您的技能库中。在我们的例子中,它将帮助我们为物体检测器本身打下坚实的基础。
MobileNet 将承担繁重的工作。它是由 Google 开发的模型。它的第一个版本出现在 2017 年,为计算机视觉的发展做出了巨大贡献。
MobileNet 的架构相当复杂。我需要整整一篇文章来解释它的内部原理。V2 仍在许多应用程序中使用,并且比 MobileNet V1 和经典的 ConvNets 工作得更好。这是因为它使用了计算成本较低的卷积,而比后来的 MobileNet 版本更高效,但仍然比旧网络进行了重要的架构改进。
在实现 MobileNet V2 架构时,预处理步骤与经典的图像分类管道类似
- 收集图像,每张图像只包含一个对象(在本例中,每张图像只有一个面部)。这是因为这种架构无法理解像 YOLO 那样的坐标。
- 使所有图像大小相同。
- 使用 Keras 的
ImageDataGenerator
(或任何类似方法)对数据集进行增强。 - 将所有图像转换为 NumPy 数组,并将标签表示为二进制(至少在此情况下为二元分类)。
让我们使用一个常规的 ConvNet 架构来构建这个网络,并将卷积层堆栈替换为 MobileNet 堆栈。
一个基本的卷积神经网络(CNN)有四个主要组件:卷积层、最大池化层、全连接层和最终的输出层。全连接层执行实际的分类任务,并激活输出层中与预测值对应的感知器。
Conv2D(卷积任务)和 MaxPooling2D(最大池化任务)层在简单的图像分类任务中配合得非常好。然而,当需要实时检测时,卷积操作非常昂贵,并且使该过程变得非常缓慢,在边缘设备上更是如此。解决方案是什么?用更快的堆栈替换 Conv2D 层:MobileNet V2 模型。与 CNN 相比,它非常高效,使用的参数更少,但缺点是精度较低。对于我们的项目,MobileNew V2 取得的结果应该足够准确。然而,这是一个权衡;您仍然需要处理超参数调整、激活函数、优化器、损失函数以及用于处理网络摄像头上实时检测的脚本。
在处理图像、视频和摄像头时,OpenCV 会非常有帮助。为什么我不采用这种方法?在这种特定场景下,我们需要同时在同一图像/视频上运行两个模型:一个检测人脸的模型(有很多选择),以及一个决定该人脸是否佩戴口罩的模型(在本例中为 MobileNet)。在普通计算机上,推理速度不是问题。然而,如果我们尝试在边缘设备上运行它,我们会得到极低的性能。如果您**不需要**在小型设备上运行模型,我的建议是采用上述方法。
话不多说,让我们来看看最聪明的解决方案。
YOLOv5
是时候谈谈目前最强大、最易用的物体检测模型之一了。我将为您提供一个关于如何为其生成训练数据、训练、测试和部署的指南。您可以在这里找到整个 Notebook。我稍后会解释它的组织结构。
您可能知道,YOLOv5 模型已经推出几个月了,并且由于其前代版本而广受欢迎。它们更快、更高效,而且它们的文档也令人惊叹,训练和部署非常直接,并且为它们训练的数据标注方式非常简单。
如果您使用其最新、最轻量的模型(YOLOv5s),您将以较低的计算成本获得高检测速度。如果我还没说服您,这里还有另一个原因:您不需要像使用 MobileNet 那样需要两个模型。使用 YOLOv5,您只需要一个模型。您会难以置信地简单就能获得一个完全训练好且可部署的物体检测模型!
下一步
在本系列的下一篇文章中,我将向您展示如何收集、预处理和增强模型训练所需的数据。敬请关注!
历史
- 2021 年 1 月 25 日:初始版本