在过去十年中,深度学习领域涌现出许多先进的新算法和突破性研究,并推出了新的计算机视觉算法。这一切都始于2012年的AlexNet。AlexNet是一种深度(卷积)神经网络,在ImageNet数据集(一个包含超过1400万张图像的数据集)上实现了高精度。人类如何识别面孔?或许,人脑中的神经元首先识别场景中的人脸(从人的体型和背景),然后提取面部特征,并利用这些特征对人进行分类。我们已经在无限大的数据集和神经网络上进行了训练。机器中的面部识别以相同的方式实现。首先,我们采用人脸检测算法检测场景中的人脸,然后从检测到的人脸中提取面部特征,最后使用该算法对人进行分类。人脸识别系统的工作流程1.人脸检测人脸检测是物体检测的一个特殊版本。特殊之处在于它只检测一种物体,即人脸。正如在计算机科学中需要在时间和空间之间进行权衡一样,机器学习算法也需要在推理速度和准确性之间进行权衡。现在有很多物体检测算法,不同的算法在速度和精度上有不同的权衡。本文评估了以下最先进的目标检测算法:OpenCV(Haar-Cascade)MTCNNYoloV3和Yolo-TinySSDBlazeFaceShuffleNet和Faceboxes为了构建强大的人脸检测系统,我们需要准确快速的算法满足在GPU和移动设备上实时运行的需要。准确性在流式视频的实时推理中,人脸可能具有不同的姿势、遮挡和光照效果。因此,算法在不同光照条件和不同姿态下准确检测人脸非常重要。不同姿势和光照条件下的人脸检测OpenCV(Haar-ascade)我们从OpenCV的Haar-cascade实现开始,这是一个用C编写的开源图像处理库。优点:由于这个库是用C编写的,它的推理速度在实时系统非常快。缺点:此实现的问题是它无法检测侧面脸,并且在不同的姿势和光照条件下表现不佳。MTCNN是一种基于深度学习方法的算法。它使用深度级联卷积神经网络(DeepCascadedConvolutionalNeuralNetworks)来检测人脸。优点:它比OpenCV的Haar-Cascade方法更准确缺点:运行时间更长。YOLOV3YOLO(“你只看一次”)是一种用于对象检测的最先进的深度学习算法。它由许多卷积神经网络组成一个深度CNN模型(深度意味着高模型架构复杂性)。原始的YOLO模型可以检测出80种不同的物体类别,检测准确率很高,而我们只需要用这个模型来检测一个物体——人脸。我们在WiderFace(包含393,703个标记面孔的图像数据集)数据集上训练算法。还有YOLO算法的微型版本Yolo-Tiny。Yolo-Tiny需要更少的计算时间,但牺牲了一些准确性。我们在同一个数据集上训练了一个Yolo-Tiny模型,边界框结果不一致。优点:非常准确,没有任何缺陷。比MTCNN更快。缺点:由于庞大的深层神经网络层,它需要更多的计算资源。因此,该算法在CPU或移动设备上运行速度非常慢。在GPU上,其庞大的架构也消耗了更多的VRAM。SSDSSD(SingleShotDetector)也是一种类似于YOLO的深度卷积神经网络模型。优点:准确性好。它可以检测各种姿势、光照和遮挡。良好的推理速度。缺点:比YOLO模型差。虽然推理速度不错,但仍然不足以在CPU、低端GPU或移动设备上运行。BlazeFace顾名思义,是谷歌发布的一种极速人脸检测算法。它接受128x128维图像输入,具有亚毫秒推理时间,并针对手机使用进行了优化。之所以这么快是因为:与YOLO和SSD等检测大量类别不同,BlazeFace是一个专门的人脸检测模型。因此,BlazeFace的深度卷积神经网络架构比YOLO和SSD更小。它使用深度可分离卷积层(DepthwiseSeparableConvolution)代替标准的卷积层,减少了计算量。优点:推理速度非常好,人脸检测准确率高。缺点:该模型针对手机摄像头拍摄的图像中的人脸检测进行了优化,因此它希望人脸覆盖大部分图像,并且当人脸较小时效果很好。因此,它在对闭路电视摄像机(CCTV,ClosedCircuitTeleVision)拍摄的图像进行人脸检测时表现不佳。FaceboxesFaceboxes是我们使用的最新人脸检测算法。与BlazeFace类似,它是一个小型深度卷积神经网络,旨在仅检测一类——人脸。其推理时间满足了CPU实时检测的需要。其准确率堪比Yolo人脸检测算法,能够准确检测出图像中的人脸是大脸还是小脸。优点:快速推理和良好的准确性。缺点:评估仍在进行中。2.特征提取在图像中检测到人脸后,我们裁剪人脸并将其输入到创建人脸嵌入的特征提取算法中——一个多维(主要是128或512维)向量。我们使用FaceNet算法来创建人脸嵌入。嵌入向量表示一个人的面部特征。因此,同一个人的两个不同图像的嵌入向量之间的距离比较近,而不同人的嵌入向量之间的距离比较远。其中,两个向量之间的距离就是欧式距离。3.人脸分类在获得人脸嵌入向量后,我们训练了一种分类算法,即K最近邻(KNN)算法,以根据人脸嵌入向量对人进行分类。假设在一个组织中,有1000名员工。我们创建了所有员工的面部嵌入,并使用嵌入向量来训练分类算法。该算法将人脸嵌入向量作为输入,并返回人名作为输出。用户可以在将图像放到网上之前应用过滤器来修改图像中的特定像素。这些变化是人眼无法察觉的,但它会混淆面部识别算法。-ThalesGroup目前,人脸识别算法已经取得了长足的进步。但这只是技术革命的开始。想象一下,面部识别算法和聊天机器人技术的结合在未来会有多强大。
