您的位置  > 互联网

人脸识别的目标总结两点,你就是你!!

人脸识别的目标

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

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

人脸识别流程

人脸识别的核心流程,所谓核心流程是指无论什么样的人脸识别系统,这个流程基本都是有的。 首先,人脸检测,第二步,人脸对齐,第三步,特征提取。 这是每张照片必须完成的三个步骤。 比较时,将提取的特征进行比较。 ,然后判断两张脸是否属于同一个人。

人脸检测

人脸检测就是判断大场景中是否存在人脸,并找到人脸的位置并将其剪切出来。 它是物体检测技术的一种,是整个人脸感知任务的基础。 人脸检测的基本方法是在图像金字塔上滑动窗口,使用分类器选择候选窗口,并使用回归模型来校正位置。

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

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

输入是滑动窗口。 输出时如果里面有脸,应该向哪个方向校正,需要校正多少,所以Δx,Δy,Δw,Δh就是它的坐标,它的宽度和高度应该校正多少。 有了校正量并利用分类器确定是人脸的窗口后,将两者结合起来,就可以得到更准确的人脸位置。

以上就是人脸检测的过程,也可以应用于其他物体检测。

人脸检测的评价指标

无论哪种模型,都分为两个方面:速度和精度。

速度

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

之所以指定分辨率,是因为滑动窗口每滑动到一个位置,都要进行一次分类和回归判断。 因此,当图像较大时,需要做检测判断的窗口数量可能会更多,整个人脸检测需要时间。 时间越长。

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

另一种表示速度的方法是 fps。 现在一般的网络摄像头往往都是25fps或者30fps,这意味着每秒可以处理多少张图片。 fps的好处可以用来判断人脸检测是否可以实现实时检测。 只要人脸检测的fps数大于相机的fps数,就可以实现实时,否则无法实现。

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

从我们实际操作来看,大部分是不受影响的,因为主要是受滑动窗口数量的影响。 命中的次数并不是特别多,但是也有轻微的影响。

准确性

准确率主要由召回率、误检率和ROC曲线决定。 召回率是指照片中不是人脸,但真实模型判定是人脸的比例。 误检率和负样本错误率是指照片中不是人脸,但被误判为人脸的比例。

ACC精度

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

但这种准确性存在一个问题。 如果用它来判断的话,和正负样本的比例没有关系。 也就是说,它不关心正样本中的正确率或负样本中的正确率。 它只关心总数。 当这个模型的准确率达到90%时,其他人不知道正样本和负样本的区别。 包括分类,包括回归,一般来说,分类模型会先用回归来得到一个所谓的置信度。 当置信度大于某个值时,就认为是它,然后当置信度小于某个值时,就认为不是。

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

因此ACC值本身受样本比例的影响较大,用它来表征模型的好坏是有些问题的。 当测试指标说达到了99.9%时,单看这个数值就更容易被骗。 换句话说,这个统计数据是有偏差的。

为了解决这个问题,一般用一条叫做ROC的曲线来表征这个模型的准确率。

ROC 受试者工作特征曲线

横坐标:FPR(False Rate),即负样本的错误率。 纵坐标:TPR(True Rate),即正样本的正确率。 算法在正样本和负样本上的性能是可以区分的,并且曲线的形状与正负样本的比例无关。

ROC()曲线使用负样本错误率和正样本正确率绘制横坐标和纵坐标。 在这种情况下,同一模型在这张图上看到的不是一个点,或者不是单个数据。 不过是一条线。 这条线是置信阈值。 调得越高,就越严格,调得越低,就越不严格。 高于此,可以反映置信阈值变化的影响。

以后最好不要直接问你的准确率是多少,而是看ROC曲线,这样更容易判断模型的能力。

面部对齐

人脸对齐的目的是尽可能将人脸纹理调整到标准位置,降低人脸识别器的难度。

为了人为地降低它的难度,可以先对齐,让检测到的人的眼睛、鼻子、嘴巴都在同一个位置。 这样,模型在比较的时候,只需要找到相同的位置,无论是相同还是相似,彼此还是有很大不同的。 这样我们就可以完成这一步的对齐。 对于这一步,我们现在常用的方法是二维方法,就是找到这张图片中的关键特征点。 一般是五分、十九分、六十多分。 各种景点都有,80多个景点。 但对于人脸识别来说,五个基本就够了。

除了这五个点之外的其他点的图像可以认为是进行了类似插值的操作,然后将其粘贴到该位置。 完成后即可发送给后续的人脸识别器。 已鉴定。 这是一种通用方法,但也有更前沿的方法。 有些研究机构在用所谓的3D人脸对齐,就是我告诉你正面是什么样子,比如旋转45度是什么样子。 那么用这种图片训练他之后,他就会知道,当我看到一张左右旋转45度的图片时,很大概率它向右转会是什么样子,这个模型就可以猜出来它。

人脸特征提取算法

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

级联深度神经网络,即要获取人脸,首先需要推断出五个点的位置。 如果一次性使用单个模型来完成此操作,则该模型将需要非常复杂。

但如何降低这个模型的复杂度呢?

即,进行多个输入。 第一次输入网络后,就会做出猜测。 这个猜测是可以接受的,但不太准确。 它大致知道人脸的五个点在哪里。 然后将这五个点和原始图像放入第二个网络中以获得近似的校正量。 有了基本的五个点之后再求出校正量,会比直接从原图上找到准确的五个点要好。 这一点就稍微容易一些。 因此,采用这种逐步细化、将多个网络级联在一起的方法,可以在速度和精度之间取得更好的平衡。 其实我们现在做的时候,基本上都是用两层,而且是差不多的。

人脸特征点提取精度评价指标

为了能够对不同尺寸的脸部进行比较,使用了统计学上所谓的归一化均方根误差。

NRMSE(Root Mean Error),归一化均方根误差,用于衡量每个特征点的坐标与标记坐标之间的差异。

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

人脸对比目的

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

困难

同一张脸在不同的条件下会出现不同的状态,比如特别受光线、烟雾、化妆等影响。第二个是映射到二维照片的参数不同造成的。 所谓映射到二维参数,就是原来的脸是这样的。 拍摄设备拍照时,呈现给他的角度、与他的距离、焦距是否准确、拍摄角度等都会对光线积累产生影响,从而会造成同脸出现在不同的状态。 三是年龄和整形手术的影响。

人脸比对法 传统方法

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

深度法

主流的方法是深度方法,即深度卷积神经网络。 这个网络一般用DCNN来代替以前的特征提取方法,即提取一张图片或者一张人脸上的一些不同的特征。 得了吧,DCNN的参数很多。 这些参数是习得的,而不是由人们告诉的。 如果学习了,就会比人们总结的更好。

那么得到的特征集一般可能有128维,256维,或者512维或者1024维,然后进行比较。 判断特征向量之间的距离,一般采用欧氏距离或余弦相似度。

人脸比对的评价指标也分为速度和准确度。 速度包括单个人脸特征向量的计算时间和比较速度。 准确度包括 ACC 和 ROC。 由于之前已经介绍过,这里我们重点对比一下速度。

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

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

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

人脸追踪

在监控等视频人脸识别场景中,如果对同一个人走过的每一帧都执行整个人脸识别过程,不仅会浪费计算资源,而且可能会因为一些低质量的帧而导致误识别,因此需要确定哪些面孔属于同一个人。 并选择合适的照片进行识别,大大提高了模型的整体性能。

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

为了防止跟踪到的人脸与人脸识别器的范围不匹配,一般情况下会使用人脸检测器进行检测。 这种检测方法依赖于相对轻量级的人脸检测跟踪。 在某些场景下,可以达到速度和质量的平衡。

这种检测方法被调用,即每一帧仍然进行人脸检测。 检测到人脸后,根据每个人脸的四个值,即它的坐标位置、它的宽度和高度,来比较前后两帧。 根据人脸的位置和大小,可以粗略地推断出两个人脸是否属于同一个运动物体。

可选间隔全帧检测

意思就是做by的时候,对于前后两帧,一种方法是做全屏检测。 所谓全屏检测,就是扫描整个屏幕。 然而,这种方法非常耗时,所以有时会使用另一种方法。 方法是每隔几帧做一次全屏。 一般来说,预测下一帧。 立场不会有太大变化。 只要将上一帧的位置稍微向上、下、左、右扩展,然后再次检测,往往就有很大的概率能够检测到。 ,大多数帧都可以跳过。

为什么我们要每隔几帧就进行一次全屏检测呢?

这是为了防止新的物体进来。如果只根据前一个物体的位置进行搜索,新物体进来时可能无法检测到。为了防止这种情况,可以在五帧或十帧之后进行。 全屏检查。

人脸质量评估

由于人脸识别器训练数据等的限制,不可能在所有状态下的人脸上都取得良好的性能。 质量评估将确定检测到的人脸与识别器的特征之间的一致程度,并且仅选择一致程度高的人脸。 发送进行识别,以提高系统的整体性能。

人脸质量评估包括以下4个要素:

活体识别

这是所有人脸识别系统都会遇到的问题。 如果他们只识别面孔,照片也可能被欺骗。 为了防止系统受到攻击,会进行一些判断,以确定这是真人脸还是假人脸。

目前的方法基本上有以下三种:

人脸识别系统组成

首先,进行分类。 从对比形式来看,有1:1识别系统和1:N识别系统; 从比对对象来看,有照片比对系统和视频比对系统; 根据部署形式,有私有部署、云部署或移动设备部署。

照片1:1识别系统

1:1识别系统是最简单的。 拍两张照片,为每张照片生成一个特征向量,然后比较两个特征向量,看是否是同一个人,就可以识别出这个人了。 延庆川北社区45号孙老师收卖废料、破布、垃圾和股票交易废料。 Sun 回收它们。

图一:N的识别系统

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

视频1:1识别系统

视频1:1识别系统与照片1:1系统类似,但比对对象不是照片,而是视频流。 获得视频流后,我们只有得到合适的照片后,才会进行检测、跟踪、质量评估和比较。

视频1:N的识别系统

视频1:N适配系统与1:N拍照系统类似,只不过使用视频流进行识别,还需要检测、跟踪和质量评估。

物联网

一般来说,所谓的系统配置不一定是人脸识别系统,各种AI系统大概也是如此。 第一个是计算资源层,运行在CPU或GPU上。 在GPU上运行可能还支持CUDA、CUDN等。

第二是计算工具层,包括深度学习前向网络计算库、矩阵计算库和图像处理工具库。 由于每个做算法的人不可能自己去写数据操作,所以他们会使用一些现有的数据操作库,比如MXNET或者Caffe等,也可以自己写一套。

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