混合边缘 AI 面部识别:后续步骤






4.06/5 (3投票s)
在本文中,我们将讨论从头开始开发人脸识别系统的某些方面。
引言
人脸识别是人工智能(AI)的一个领域,在过去十年中,深度学习(DL)的现代方法取得了巨大成功。最好的人脸识别系统可以以与人类相同甚至更高的精度识别图像和视频中的人物。
我们关于这个系列文章分为两部分
- 人脸检测,客户端应用程序在图像或视频源中检测人脸,对检测到的人脸图像进行对齐,并将它们提交给服务器。
- 人脸识别(本部分),服务器端应用程序执行人脸识别。
我们假设您熟悉 DNN、Python、Keras 和 TensorFlow。欢迎下载此项目代码以进行学习。
在上一篇文章中,我们探讨了我们人脸识别系统的Kubernetes管理实现。在本文(本系列的最后一篇)中,我们将讨论从头开始开发AI人脸识别系统。
深度神经网络(DNN)的困境
正如在介绍文章中所述,典型的人工智能人脸识别算法包括四个步骤:人脸检测、人脸对齐、特征提取和特征匹配。前两个步骤和最后一个步骤使用专门开发的DNN来实现。人脸对齐和特征匹配算法依赖于DNN提供的人脸地标和特征。
开发和训练用于人脸识别的DNN是一项非常耗时且费力的任务。在开始此类开发之前,我们必须确信没有其他方法可以达到我们的目标。人脸识别系统的两个主要评判参数是:准确性和性能(速度)。如果现有模型的其中一个或两个参数不符合我们的要求,我们可能会决定开发自己的人脸识别DNN。
例如,我们使用的MTCNN模型的性能在Raspberry Pi 3上不支持真正的实时模式,因此我们可以决定开发新的人脸检测DNN。但是,我们可以通过几种替代方案使我们的DNN更快。
第一个选择是通过减少参数数量来优化MTCNN模型,然后重新训练优化后的模型。训练一个类似MTCNN的模型并非易事,因为该模型包含四个阶段:缩放、人脸分类、边界框回归和地标定位。实现和训练MTCNN模型的示例可以在此处和此处找到。
第二个选择是为人脸检测选择另一个DNN模型。例如,您可以训练一个具有紧凑结构的SSD模型,例如MobileNet或SqueezeNet,以获得更好的性能。这里是用于人脸检测的MobileNet SSD实现。请注意,SSD模型不提供人脸地标,只提供边界框。
可用的预训练模型可以比人类更好地识别面孔。但是,如果现有模型中没有一个针对您的面部识别系统将要工作的特定条件进行了优化,您可能需要开发自己的DNN。
例如,我们识别了来自户外IP摄像头的视频中的人脸,而我们的模型主要是在室内使用各种相机拍摄的照片上训练的。所以我们可能希望使用从户外摄像头拍摄的人脸图像来重新训练我们的DNN模型。要收集用于训练的人脸图像,我们可以遵循创建数据库时使用的相同方法(参考“创建数据库”部分):在视频上运行带有对齐功能的人脸检测器,并将提取的人脸与不同的已知人员进行关联。这里是对FaceNet模型训练过程的描述。
结论
在本系列中,我们向您展示了如何创建用于人脸识别的混合边缘AI系统。我们考虑了一种基于现代深度学习方法(人脸检测、人脸对齐、特征提取和特征匹配)的通用人脸识别算法。我们开发了一种基于预训练MTCNN模型的人脸检测器,然后在一台Raspberry Pi设备上对其进行了测试。我们建议了人脸对齐算法,并编写了创建对齐人脸数据库的代码。
我们解释了如何使用预训练的FaceNet模型进行人脸识别。我们开发了一个简单的Web API来包装人脸识别模型,基于此API设计了一个客户端-服务器应用程序,并一起测试了模型和API。我们使用Docker容器化了服务器应用程序,以简化系统的开发、测试和部署。我们还向您展示了服务器应用程序如何在Kubernetes上运行,以便与多个客户端应用程序一起扩展。最后,我们讨论了从头开始开发AI人脸识别系统。
后续步骤
边缘设备上人脸识别的主题对于一个系列的文章来说非常广泛。我们只实现了概念性的人脸识别流程,并且有很多方面可以改进该系统以供商业使用。在这里,我们将只提供一些关于如何改进系统各部分以获得更好性能(速度和准确性)的想法。
- 使用运动检测器来提高边缘设备上人脸检测的速度。MTCNN检测器的速度直接取决于帧大小。运动检测器允许在视频帧中选择感兴趣的区域,并在帧的较小部分上运行MTCNN检测器,从而提高处理速度。
- 使用人脸跟踪。在检测人脸时,我们可以使用适当的跟踪算法来跟踪它们。使用跟踪的主要思想是获取额外信息。当我们跟踪一张人脸时,我们知道它在多个帧中是同一个人,我们可以利用这些信息通过几个探测图像来识别这个人。这种多重识别方法可以提高系统的准确性。
- 使用多面部数据库。这样的数据库为每个人包含多个面部样本。这些额外信息还可以提高人脸识别的准确性。我们应该在此处指出,这会减慢识别服务器的速度,因为它需要将每个探测人脸与数据库中的每个面部样本进行比较。这并不是一个大问题,因为识别通常在强大的服务器上运行。
我们希望您在阅读本系列文章后获得许多有趣的想法,并祝您“人脸识别愉快”!