1

面部识别算法是如何工作的?

 2 years ago
source link: https://www.51cto.com/article/701139.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
面部识别算法是如何工作的?-51CTO.COM
面部识别算法是如何工作的?
2022-02-11 10:27:28
过去十年,深度学习领域出现了许多先进的新算法和突破性的研究,并且引入了新的计算机视觉算法。

01c2c4f607ff823008533591e862ee36d8d194.jpg

过去十年,深度学习领域出现了许多先进的新算法和突破性的研究,并且引入了新的计算机视觉算法。

这一切始于 2012 年的 AlexNet。AlexNet 是一个深度(卷积)神经网络,它在 ImageNet 数据集(拥有超过 1400 万张图片的数据集)上取得了很高的准确率。

人类是如何识别人脸的?

也许,人类大脑中的神经元首先识别场景中的人脸(从人的体形和背景),然后提取面部特征,并通过这些特征对人进行分类。我们已经在一个无限大的数据集和神经网络上进行了训练。

机器中的面部识别是以同样的方式实现的。首先,我们采用面部检测算法来检测场景中的人脸,然后从检测到的人脸中提取面部特征,最后使用算法对人进行分类。

237c4089565e82763dc269a6426b7cefb2c167.jpg

面部识别系统的工作流

1. 人脸检测

人脸检测是物体检测的一个特化版本,特别之处在于,它只检测一种物体,即人脸。就像计算机科学里需要权衡时间和空间,机器学习算法也需要在推理速度和准确性之间进行权衡。现在有很多物体检测算法,不同算法对速度和准确性的取舍有所不同。

本文评估了如下几个最先进的物体检测算法:

  • OpenCV(Haar-Cascade)
  • MTCNN
  • YoloV3 和 Yolo-Tiny
  • BlazeFace
  • ShuffleNet 和 Faceboxes

为了构建一个强大的人脸检测系统,我们需要准确且快速的算法,以满足在 GPU 以及移动设备上实时运行的需要。

准确度

在流媒体视频的实时推理中,人们的面部可能有不同的姿势、遮挡和照明效果。因此,算法能在不同的光照条件和不同姿态下精确检测人脸非常重要。

4129af7877bf411cf5897207b631d51e40dac9.jpg

在不同的姿态和光照条件下的人脸检测

OpenCV(Haar-ascade)

我们从 OpenCV 的 Haar-cascade 实现开始,它是一个用 C 语言编写的开源图像处理库。

优点: 由于这个库是用 C 语言编写的,所以它在实时系统中的推理速度非常快。

缺点: 这个实现的问题是它无法检测侧脸,而且在不同姿态和光照条件下表现欠佳。

MTCNN

这种算法基于深度学习方法。它使用深度级联卷积神经网络(Deep Cascaded Convolutional Neural Networks)来检测人脸。

优点: 它比 OpenCV 的 Haar-Cascade 方法准确性更高

缺点: 运行时间较长。

YOLOV3

YOLO(“You only  look  once”)是用于物体检测的最先进的深度学习算法。它由许多卷积神经网络组成,形成一个深度 CNN 模型 (深度意味着模型架构复杂性很高)。

原始的 YOLO 模型可以检测 80 个不同的物体类别,而且检测精度很高,而我们只需要用该模型检测一个物体——人脸。我们在 WiderFace(包含 393,703 个面部标签 的图像数据集)数据集上训练了这个算法。

YOLO 算法还有一个微型版本,即 Yolo-Tiny。Yolo-Tiny 需要的计算时间比较少,但却牺牲了一些准确性。我们用相同的数据集训练了一个 Yolo-Tiny 模型,其边界框(boundary box)结果并不一致。

优点: 非常准确,没有任何缺陷。比 MTCNN 更快。

缺点: 由于具有巨大的深度神经网络层,它需要的计算资源更多。因此,该算法在 CPU 或移动设备上运行地很慢。在 GPU 上,它的大型架构也需要耗费更多的 VRAM。

SSD

SSD(Single Shot Detector)也是一个类似 YOLO 的深度卷积神经网络模型。

优点: 良好的准确性。它可以检测各种姿势、光照和遮挡。良好的推理速度。

缺点: 比 YOLO 模型差。虽然推理速度较好,但仍不能满足在 CPU、低端 GPU 或移动设备上运行的要求。

BlazeFace

就像它的名字一样,它是由谷歌发布的速度极快的人脸检测算法。它接受 128x128 维的图像输入,推理时间是亚毫秒级,已优化到可以在手机中使用。它速度这么快的原因是:

  • YOLO 和 SSD 用来检测大量的类别,而 BlazeFace 不同,是一个专门的人脸检测器模型。因此 BlazeFace 的深度卷积神经网络架构比 YOLO 和 SSD 的架构小。
  • 它采用的是深度可分离卷积层(Depthwise Separable Convolution),而不是标准的卷积层,这样就降低了计算量。

优点: 非常好的推理速度,且人脸检测的准确率高。

缺点: 这个模型的优化目标是对手机摄像头获取的图像进行人脸检测,因此它预期人脸会覆盖图像中的大部分区域,而当人脸尺寸较小时,它的识别效果就是很好。所以,当对闭路电视摄像机获取的(CCTV ,Closed Circuit Tele Vision)图像进行人脸检测时,它表现得并不理想。

Faceboxes

Faceboxes 是我们使用的最新的人脸检测算法。与 BlazeFace 类似,它是一个小型的深度卷积神经网络,只为检测一种类别——人脸而设计。它的推理时间可满足 CPU 上的实时检测需求。它的准确度可以与 Yolo 人脸检测算法相媲美,而且,不管图像中的人脸较大还是较小,它都可以精确地检测。

优点: 推理速度快,准确性好。

缺点: 评估仍在进行中。

2. 特征提取

在检测到图像中的人脸后,我们对人脸进行裁剪,并将其送入特征提取算法,该算法创建面部嵌入(face-embeddings)——一个代表人脸特征的多维(主要是 128 或 512 维)向量。我们使用 FaceNet 算法来创建面部嵌入。

嵌入向量代表一个人的面部特征。因此,同一个人的两个不同图像的嵌入向量之间的距离比较接近,而不同人的嵌入向量之间的距离比较远。其中,两个向量之间的距离采用的是欧氏距离。

3. 面部分类

在得到面部嵌入向量后,我们训练了一种分类算法,即 K- 近邻(K-nearest neighbor,KNN)算法,根据一个人的嵌入向量对其进行分类。

假设在一个组织中,有 1000 名员工。我们创建了所有员工的面部嵌入,并使用嵌入向量训练分类算法。该算法以面部嵌入向量作为输入,以人的名字作为输出返回。

在把图片放到网上前,用户可以采用过滤器修改图片中的特定像素。人眼无法察觉这些变化,但它会让面部识别算法觉得很困惑。—— ThalesGroup

当前,面部识别算法已经取得了巨大的进步。但这仅仅是技术革命的开始。可以想象一下,未来面部识别算法和聊天机器人技术的联合起来是多么强大。

责任编辑:庞桂玉 来源: AI前线
zanpc.bd208a1.pngzanpchover.fdd60ba.png
weixin.23cd8b3.png 分享到微信
weibo.16d6b4f.png 分享到微博

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK