Code前端首页关于Code前端联系我们

人脸识别算法与系统控制:特征提取、深度法

terry 2年前 (2023-09-23) 阅读数 85 #AI人工智能

人脸识别的目标

总结两点,首先认出同一个人,无论你的状态如何变化,都能知道是你你。其次,区分不同的人。也许两个人长得非常相似,或者都化了妆,但无论状态如何变化,面部识别都能知道他们是两个不同的人。

面部识别本身是一种生物识别技术,主要提供身份验证的手段。就准确率而言,面部识别并不是最高的。人脸识别受到许多其他条件的影响,例如照明。 面部识别的优点是一般不需要用户太多配合。目前,监控摄像头在各地非常普及,包括电脑摄像头、各种手机视频输入设备和摄像设备。这种可见光设备可以识别人脸。因此,引入面部识别之后,新增的投资可以很小,这就是它的优势。

人脸识别流程

基本人脸识别流程,所谓的基本流程基本上就是这个流程,无论在什么人脸识别系统中。 第一步,人脸检测,第二步,人脸对齐,第三步,特征提取,这是每张照片需要完成的三个步骤。比较的时候,只是将提取的特征进行比较,看看两张脸是否属于同一个人。 人脸识别算法及系统综述:特征提取、深度方法

人脸检测

人脸检测旨在检测大场景中是否存在人脸,并找到人脸的位置并将其剪切出来。它是一种物体检测技术,是整个人脸感知任务的基础。基本的人脸检测方法是在图像金字塔上移动一个窗口,使用分类器选择候选窗口,并使用回归模型来校正位置。 人脸识别算法及系统综述:特征提取、深度方法

上面画了三个窗口,一个是0.3倍,0.6倍和1.0倍。当人脸位置不确定、无法识别大小时,可以利用该技术使图像本身具有不同的大小而滑动窗口的大小相同。深度网络的输入图像的大小一般是固定的,所以前面的滑动窗口基本是固定的。为了让固定的滑动窗口覆盖不同的范围,整个图像被调整为不同的比例。此处显示的 0.3、0.6 和 1.0 只是示例。在实际使用中,可能还有很多其他不同的倍数。

分类器是指查看滑动窗口的每个位置来判断是否是人脸,因为滑动窗口滑动的位置可能不包括整个人脸,也可能比整个人脸大。如果想要找到更准确的人脸,在回归模型中插入滑动窗口可以帮助提高人脸检测的准确性。

入口处是推拉窗。如果输出时里面有一张脸,应该向哪个方向校正,校正多少,那么Δx,Δy,Δw,Δh就是它的坐标,它的宽度和高度应该校正多少。 。进行校正范围并使用分类器确定是人脸窗口后,将两者结合起来可以得到更准确的人脸位置。

以上是人脸检测过程,也可以用来检测其他物体

人脸检测评价指标

不管是什么模型,都分为速度和准确率两个方面

速度

(1)速度是指定分辨率下的检测速度

之所以指定分辨率是因为每次滑动窗口移动到某个位置时,都要进行分类和回归判断因此,当图像越大时,需要的窗口就越多,可以评估检测,整个人脸检测花费的时间就越长。

因此,要评价一个算法或模型的好坏,需要看它在固定分辨率下的检测速度。一般来说,检出率是多少?它可以是识别图像中的人脸所需的时间,例如100毫秒、200毫秒、50毫秒、30毫秒等。

表达速度的另一种方式是 fps。现在常见的网络摄像头往往是每秒25帧或每秒30帧,这意味着每秒可以处理多少张图像。 fps增益可用于评估是否可以实现实时人脸检测。检测,只要人脸检测的fps大于相机的fps,就可以实现实时,否则无法实现。

(2) 速度是否受同一张图片中人脸数量的影响?

从我们实际操作来看,大部分是不受影响的,因为主要影响的是滑动窗口的数量。次数不是特别难,但是有一点效果。

准确率

准确率基本上是通过召回率、误检率和ROC曲线来判断的。召回率是指照片中存在人脸并且实际模型判定其是人脸的比例。误检率和负样本错误率是指照片中不是人脸但被错误判断为人脸的部分。

准确度ACC

ACC的计算方法是用正确的样本数除以样本总数。例如,拍摄 10,000 张照片进行人脸检测。这 10,000 张照片中有些有面孔,有些则没有。 z 然后确定正确的比率是多少。

但是这个精度有一个问题。如果用它来评估的话,和正负样本的比例没有关系。也就是说,它不关心正样本中的正确度量和负样本中的正确度量。只要照顾好将军就可以了。当这个模型的准确率达到90%时,其他人不知道正样本和负样本的区别。包括分类,包括回归,一般来说,分类模型首先使用回归来获得所谓的置信度。当置信度大于某个值时,认为是,当置信度小于同一值时,认为是否。

ACC统计模型是可调的,即调整置信度会改变准确度。

所以ACC值本身受样本比例的影响很大,所以用它来表征模型的好坏是有些问题的。当测试指标说达到了99.9%时,如果我们只看这个数值,很容易被忽悠或者这个统计有偏差。

为了解决这个问题,一般用一条叫做ROC的曲线来表征这个模型的准确度。 rate 纵坐标:TPR(True Positive Rate),即正样本的正确率,可以区分算法在正负样本上的表现,曲线的形状与正负样本的比例无关。

ROC(Receiver Operating Characteristic)曲线应以负样本的误差和正样本的正确测量值表示横坐标和纵坐标。在这种情况下,同一模型将不会在该图上看到一个点,或者换句话说,看到的不是一个数据,而是一条线。这条线代表置信极限。设置越高,越严格,设置越低,越不严格。除此之外,它可以反映置信阈值变化的影响。
以后最好不要直接问你的准确度如何,而是看ROC曲线,这样更容易评估模型的能力。

人脸对齐

人脸对齐的目的是尽可能将人脸的纹理调整到标准位置,降低人脸识别的难度。 人脸识别算法及系统综述:特征提取、深度方法

要人为降低难度,可以先对齐,即让被检测人的眼睛、鼻子、嘴巴落到同一个位置。这样模型比较的时候,只要你找的是相同的地方,不管是相同还是相似,还是有很大不同的。所以我们能够完成这个对齐步骤。对于这一步,我们现在常用的方法是二维方法,即找到该图像中的关键点。一般是五分、十九分、六十多分。景点种类齐全,共有80多个景点。但基本上五个就足以识别一张脸了。

对于这五个点之外的其他点的图像,可以认为是进行类似插值的操作,然后粘贴到该位置。完成后即可发送给后续的人脸识别设备进行识别。这是一种通用方法,但也有最先进的方法。一些研究机构使用所谓的3D面部对齐,这意味着我会告诉你正面是什么样子,比如转动45度时是什么样子。然后当你用这种图像训练它时,它知道如果我看到一张图像左右旋转 45 度,那么它很有可能会像向右旋转时的样子,并且这个模型可以估计这一点。

人脸特征提取算法

以前的传统方法是所谓的局部纹理模型、全局纹理模型、形状回归模型等。现在比较流行的是使用深度卷积神经网络或者循环神经网络,或者带有3DMM参数的卷积神经网络。所谓的3DMM参数里面有三维信息,然后还有级联的深度神经网络。 人脸识别算法及系统综述:特征提取、深度方法

级联深度神经网络,即要得到一张脸,需要先求出五个点的位置。如果您一次使用一个模型来执行此操作,则该模型将非常复杂。

但是我们怎样才能降低这个模型的复杂度呢?

这意味着将进行多个条目。首次进入网络后,会进行估计。这个估计是可以接受的,但不太准确。他大概知道五个面点在哪里。然后将这五个点和原始图像插入到第二个网格中以获得近似的校正值。有了基本的五个点,然后找到校正量,会比直接从原始图像中找到精确的五个点更好。这一点就比较简单了。因此,通过使用这种增量细化并将多个网络级联在一起的方法,可以在速度和精度之间取得更好的平衡。实际上,我们现在做的时候,基本上都是用两层,而且是差不多的。

面部特征点提取的评分指标

准确度

为了能够相互比较不同大小的区域,使用了统计学上所谓的归一化均方误差。 人脸识别算法及系统综述:特征提取、深度方法NRMSE(归一化均方根误差)用于测量每个功能点的坐标与标记坐标之间的差异。

例如:我们在纸上画五个点,然后让机器计算这五个点之间的距离。给定值越接近实际距离,预测越准确。一般来说,预测值都会有一定的偏差,那么如何表达这个精度值呢?我们通常将其表示为距离的平均值或均方根值。然而,出现了一个问题。当同一台机器预测不同尺寸的图像时,准确率值会出现不同,因为图像越大,误差的绝对值越高。同样的原理适用于不同尺寸的脸。因此,我们的解决方案是考虑人脸的原始尺寸。一般来说,分母是人眼之间的距离或者人脸对角线的距离,然后将距离的差除以眼睛之间的距离或者除以人脸对角线的距离,这样的话,就可以得到一个基本不随脸的大小变化的值,用它来评价。

比较人脸

目的

是判断两张对齐的人脸是否属于同一个人

难点

在不同的情况下,同一张脸会显示出不同的状态。例如,主要受灯光、烟雾、化妆等影响。第二个是由映射到二维照片的不同参数引起的。所谓映射到二维参数,就是原来的脸是这样的。当传感器捕捉图像时,它显示的角度、距图像的距离和焦点。是否准确,捕捉的角度和光线的积累都会产生影响,导致同一张脸出现在屏幕上。不同的州。第三是年龄和整形手术的影响。

人脸匹配方法

传统方法

手动提取一些特征,如HOG、SIFT、小波变换等。一般来说,提取的特征可以需要固定的参数,即不需要训练。不需要学习,使用一套固定的算法然后比较这个功能。

Deep方法

主流方法是deep方法,即深度卷积神经网络。这个网络一般采用DCNN来代替以前的特征提取方法,即在图像中,人脸检测到上面的一些不同的特征后,DCNN中有很多参数。这些参数是学习的,而不是人类告诉的。如果他们学习了,他们会比人们总结的更好。

那么得到的元素集一般可以是128维、256维或者512维或者1024维,然后进行比较。欧氏距离或余弦相似度通常用于评估特征向量之间的距离。

人脸比对的评价指标也分为速度和准确度。速度包括单个人脸特征向量的计算时间和比较速度。准确度包括 ACC 和 ROC。既然前面提到了,我们将重点关注比较速度。

普通比较是一个简单的操作,就是计算两点之间的距离。您可能只需要进行一次内积,即两个向量的内积。但是,当人脸识别遇到1:N的比对时,当数据库N很大的时候,当你拿到一张照片,在数据库N中搜索时,搜索的次数就会非常大。比如数据库有N百万次,你可能需要查找一百万、几百万次。这相当于一百万次比较。这个时候还是有总的时间要求的,所以会有各种技术来加速这个比较。 人脸识别算法及系统综述:特征提取、深度方法

与人脸识别相关的其他算法

主要包括人脸跟踪、质量评估和活体识别。

人脸追踪

在监控等视频人脸识别场景中,如果对同一个人经过的每一帧都进行整个人脸识别过程,不仅会造成计算资源的浪费,还可能是由一些低功率引起的。图像质量导致误识别,因此需要确定哪些人脸属于同一个人。并选择合适的照片进行识别,大大提高了模型的整体性能。

如今,不仅是人脸追踪,各种物体或车辆等的追踪,都使用追踪算法。此类算法并不或不会始终依赖于检测。例如,在开始检测到物体后,它根本不检测它,而仅使用跟踪算法。同时,为了达到非常高的准确度并避免丢失,每次跟踪都需要花费大量的时间。

为了防止跟踪到的人脸落入人脸识别器的范围内,一般采用人脸检测器进行检测。这种检测方法依赖于相对容易的人脸检测跟踪。 ,在某些场景下可以达到速度和质量的平衡。 人脸识别算法及系统综述:特征提取、深度方法

这种检测方式称为Tracking byDetection,即每一帧仍然进行人脸检测。根据每个人脸的坐标位置、宽度、高度这四个值识别出一张人脸后,通过比较前后两张图像中人脸的位置和大小,大概可以推断出是否是人脸。这两个面属于同一个移动物体。

可选全屏间隔检测

表示带检测跟踪时,一种方法是对前后两帧进行全屏检测。所谓全屏检测,就是扫描整个屏幕。 ,但是这种方法非常耗时,所以有时会采用另一种方法,就是每隔几帧做一次全屏。一般预测下一帧,位置不会有太大变化。只需要将上一帧的位置向上、下、左、右稍微扩展即可。有一点,如果你尝试再次弄清楚,通常很有可能会被发现,而且大多数帧都可以跳过。

为什么每隔几帧就要做一次全屏检测?

用于防止新物体进入。如果仅根据前一个对象的位置进行搜索,则新对象进来时可能无法识别。为了避免这种情况,您可以等待五帧或十帧。再次进行全屏测试。

人脸质量的评估

由于人脸识别训练数据等的限制。不可能在所有州的面部上都取得良好的效果。质量评估确定识别的人脸是否与识别器的特征匹配。度,仅选择匹配度高的人脸进行识别,以提高系统的整体性能。

面部质量评价包括以下4个要素:

  • 面部尺寸。选择太小而无法识别的人脸会大大降低识别效果。
  • 人脸位置指的是三个轴上的旋转角度,一般与训练识别器所用的数据有关。如果训练时大部分使用姿态较小的人脸,识别时最好不要选择偏差较大的人脸,否则不适用。
  • 模糊程度,这个因素很重要。如果照片丢失了信息,就会出现识别问题。
  • 遮挡,如果眼睛、鼻子等被遮挡,则无法获取该区域的特征,或者获取的特征不正确。遮挡物的属性会影响后续的识别。如果可以确定被遮挡,则将其丢弃或进行一些特殊处理,例如不放入识别模型中。

实时识别

这是所有面部识别系统都会面临的问题。如果只识别人脸,连照片都会被骗。为了防止系统被黑客攻击,会进行一些判断来确定是真人脸还是假人脸。

目前有三种方法:

  • 传统动态识别。许多银行的 ATM 需要用户的配合,例如要求用户眨眼或转头来评估用户。你是否也做过同样的事,眨眼和转过头?所以动态识别有一个问题,就是需要用户大量的配合,所以用户体验会有点不好。
  • 静态识别,即不根据动作进行判断,只根据照片本身来判断是真脸还是假脸。它基于常用的攻击方法,比较方便。例如,拿手机或者显示器,利用屏幕进行攻击。此类屏幕的光性能与真实光照条件下人脸的光性能不同。例如,1600万种发光颜色的显示器无法达到可见光的发光度,即全部连续、全部条带都能发光。发布于。因此,在捕捉这种画面时,与真实自然环境中的主显示相比,人眼也能看到会出现一些变化和不自然。将这种不自然现象放入模型中进行训练后,就可以通过这种细微的差别来判断是否是真实的人脸。
  • 立体识别,如果使用两个摄像头或者有深度信息的摄像头,就可以知道每个拍摄点距离摄像头的距离,相当于人的3D成像,所以拍照时使用一屏,屏幕必须具有平坦的表面。我意识到这是一个平面,但平面绝对不是真人。它是利用三维识别方法来排除平面人脸。
人脸识别算法及系统综述:特征提取、深度方法

人脸识别系统组成

先做分类。从比较上来说,是1:1的识别系统和1:N的识别系统;从比对对象来看,有照片比对系统和视频比对系统;按部署形式分为私有部署、云部署、移动部署。

照片识别系统 1:1

人脸识别算法及系统综述:特征提取、深度方法

1:1 识别系统是最简单的。拍摄两张照片,为每张照片生成一个特征向量,然后比较两个特征向量,看看是否是同一个人。 ,就可以识别了。

照片1:识别系统N

人脸识别算法及系统综述:特征提取、深度方法

1:识别系统N,判断感光材料是否在同一个样张库中。该样本库是预先准备好的,可以列入白名单或黑名单。它包含每个人的照片,并根据这张照片生成一系列特征向量。它用作示例库。提交的照片将与示例库中的所有特征进行比较,以查看哪一张与该人最相似。这是一个1:N的识别系统。

1:1 视频识别系统

人脸识别算法及系统综述:特征提取、深度方法

1:1 视频识别系统类似于照片的 1:1 系统,但比较对象不是照片,而是视频流。收到视频流后,我们进行检测、跟踪和质量评估,并在收到相应的照片后进行比较。

1:N 视频识别系统

人脸识别算法及系统综述:特征提取、深度方法

1:N 视频适配系统与 1:N 照片系统类似,只是需要使用视频流进行识别和检测、跟踪,还需要进行质量评估。 。 人脸识别算法及系统综述:特征提取、深度方法

一般来说,所谓的系统配置并不一定是人脸识别系统。各种人工智能系统可能都是这种情况。第一个是计算资源层,运行在CPU或GPU上。 GPU操作可能还支持CUDA、CUDN等。

第二是计算工具层,包括深度学习领域的网络计算工具库、矩阵计算工具库、图像处理工具库。由于不可能每个制作算法的人都编写自己的数据操作,因此他们使用一些现有的数据操作库,例如TensorFlow或MXNET或Caffe等,或者他们可以编写自己的一套。

最后是应用算法层,包括人脸检测、特征点定位、质量评估等算法实现。以上是系统的总体组成。

来源:浪潮AIHPC

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门