嵌牛IT观察

生活中的人工智能之人脸检测与识别

2021-12-02  本文已影响0人  Charmingy

姓名:陈心语  学号:21009102266 书院:海棠1号书院

转自:

人工智能是怎么进行人脸识别的?-知乎(zhihu.com)

深入浅出人脸识别原理-人工智能(uml.org.cn)

探索人工智能人脸识别原理及应用(上)-知乎(zhihu.com)

【嵌牛导读】人脸检测与识别在生活中已经非常常见,这也是人工智能的一种运用。

【嵌牛鼻子】人工智能运用于人脸检测与识别。

【嵌牛提问】人工智能在人脸检测与识别中有什么运用呢?

【嵌牛正文】

人脸识别技术概述

       人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术。具体而言,就是计算机通过视频采集设备获取识别对象的面部图像,再利用核心算法对其脸部的五官位置、脸型和角度等特征信息进行计算分析,进而和自身数据库里已有的范本进行对比,最后判断出用户的真实身份。

人脸识别技术

       从采集人脸到辨识人脸的整个过程中来看,人脸识别技术一般包括:人脸图像采集及检测;人脸特征提取;人脸规整和人脸识别比对等。

人脸图像采集及检测

       不同的人脸图像都能通过摄像头采集下来,比如静态图像、动态图像、不同的位置、不同的表情等都可以得到很好的采集。当用户在采集设备的拍摄范围内时,采集设备会自动搜索并拍摄用户的人脸图像。人脸检测在实际应用中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。

人脸特征提取

       人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变化系数特征、人脸图像代数特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程,人脸特征提取的方法归纳起来分为两大类:一种是基于知识的表征方法,一种是基于代数特征或统计学习的表征方法。

人脸规整

       对于人脸图像的预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图像的光线补偿、灰度变换、直方图均衡化、归一化、几何校正、滤波及锐化等。

人脸识别对比

       提取的人脸图像特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。可分为1:1、1:N、属性识别。其中,1:1 是将 2 张人脸对应的特征值向量进行对比,1:N 是将 1 张人脸照片的特征值向量和另外 N 张人脸对应的特征值向量进行对比,输出相似度最高或者相似度排名前 X 的人脸。

2、身份验证中的人脸识别技术应用

      人脸识别在 App 中的身份验证过程如下:

       用户拍摄自己的身份证信息并上传 App ,App 通过公民身份信息查询获取用户信息及身份证系统证件照片,建立用户档案并关联用户人脸,当 App 扫描用户人像时,经活体检测、人脸质量检测、人脸图像等处理后与先前获取的用户人像照片进行人脸对比,完成身份验证。

3、特点

      自然性

      自然性是指该识别方式同人类进行个体识别时所利用的生物特征相同。例如人脸识别,人类也是通过观察比较人脸区分和确认身份的,另外具有自然性的识别还有语音识别、体形识别等。而指纹识别、虹膜识别等不具有自然性。

      非接触性

      人脸识别完全利用可见光获取人脸图像信息,不同于指纹识别需要利用手指接触传感器采集指纹,用户不需人脸与设备直接来接触,可以同时满足多人连续进行人脸图像信息的识别和分拣,可应用于医院测温、小区门禁等一些应用场景下。

人脸识别流程

人脸识别是由一系列的几个相关问题组成的:

首先找到一张图片中的所有人脸。

对于每一张脸来说,无论光线明暗或面朝别处,它依旧能够识别出是同一个人的脸。

能够在每一张脸上找出可用于他人区分的独特之处,比如眼睛多大,脸有多长等等。

最后将这张脸的特点与已知所有人脸进行比较,以确定这个人是谁。

第一步:找出所有的面孔

很显然在我们在人脸识别的流程中得首先找到图片中的人脸。我们在使用手机或相机拍照时都会有人像模式,它能轻松的检测出人脸的位置,帮助相机快速对焦。

我们得感谢保罗·比奥拉(Paul Viola)和迈克尔·琼斯(Michael

Jones)在2000年发明了一种能够快速在廉价相机上运行的人脸检测方法,人脸检测在相机上的应用才成为主流。然而现在我们有更可靠的解决方案HOG(Histogram of Oriented Gradients)方向梯度直方图,一种能够检测物体轮廓的算法。

首先我们把图片灰度化,因为颜色信息对于人脸检测而言没什么用。

我们分析每个像素以及其周围的像素,根据明暗度画一个箭头,箭头的指向代表了像素逐渐变暗的方向,如果我们重复操作每一个像素,最终像素会被箭头取代。这些箭头被称为梯度(gradients),它们能显示出图像从明亮到黑暗流动的过程。

分析每个像素对我们来说有点不划算,因为它太过细节化了,我们可能会迷失在像素的海洋里,我们应该从更高的角度观察明暗的流动。

为此我们将图像分割成16x16像素的小方块。在每个小方块中,计算出每个主方向有多少个剃度(有多少指向上,指向右上,指向右等)。然后用指向性最强的那个方向箭头来代替原来那个小方块。

最终结果,我们把原始图像转换成一个非常简单的HOG表达形式,它可以很轻松的捕获面部的基本结构。

为了在HOG图像中找到脸部,我们需要做的是,与已知的一些HOG图案中,看起来最相似的部分。这些HOG图案都是重其他面部训练数据中提取出来的。

第二步:脸部的不同姿势

我们已经找出了图片中的人脸,那么如何鉴别面朝不同方向的人脸呢?

对于电脑来说朝向不同的人脸是不同的东西,为此我们得适当的调整扭曲图片中的人脸,使得眼睛和嘴总是与被检测者重叠。

为了达到目的我们将使用一种面部特征点估计(face landmark estimation)的算法。其实还有很多算法都可以做到,但我们这次使用的是由瓦希德·卡奇米(Vahid Kazemi)和约瑟菲娜·沙利文(Josephine Sullivan)在 2014 年发明的方法。

这一算法的基本思路是找到68个人脸上普遍存在的点(称为特征点, landmark)。

下巴轮廓17个点[0-16]

左眉毛5个点[17-21]

右眉毛5个点[22-26]

鼻梁4个点[27-30]

鼻尖5个点[31-35]

左眼6个点[36-41]

右眼6个点[42-47]

外嘴唇12个点[48-59]

内嘴唇8个点[60-67]

有了这68个点,我们就可以轻松的知道眼睛和嘴巴在哪儿了,后续我们将图片进行旋转,缩放和错切,使得眼睛和嘴巴尽可能的靠近中心。

现在人脸基本上对齐了,这使得下一步更加准确。

第三步:给脸部编码

我们还有个核心的问题没有解决,那就是如何区分不同的人脸。

最简单的方法就是把我们第二步中发现的未知人脸与我们已知的人脸作对比。当我们发现未知的面孔与一个以前标注过的面孔看起来相似的时候,就可以认定他们是同一个人。

我们人类能通过眼睛大小,头发颜色等等信息轻松的分辨不同的两张人脸,可是电脑怎么分辨呢?没错,我们得量化它们,测量出他们的不同,那要怎么做呢?

实际上,对于人脸这些信息很容易分辨,可是对于计算机,这些值没什么价值。实际上最准确的方法是让计算机自己找出他要收集的测量值。深度学习比人类更懂得哪些面部测量值比较重要。

所以,解决方案是训练一个深度卷积神经网络,训练让它为脸部生成128个测量值。

每次训练要观察三个不同的脸部图像:

加载一张已知的人的面部训练图像

加载同一个人的另一张照片

加载另外一个人的照片

然后,算法查看它自己为这三个图片生成的测量值。再然后,稍微调整神经网络,以确保第一张和第二张生成的测量值接近,而第二张和第三张生成的测量值略有不同。

我们要不断的调整样本,重复以上步骤百万次,这确实是个巨大的挑战,但是一旦训练完成,它能攻轻松的找出人脸。

庆幸的是 OpenFace上面的大神已经做完了这些,并且他们发布了几个训练过可以直接使用的网络,我们可以不用部署复杂的机器学习,开箱即用,感谢开源精神。

这128个测量值是什么鬼?

其实我们不用关心,这对我们也不重要。我们关心的是,当看到同一个人的两张不同照片时,我们的网络需要能得到几乎相同的数值。

第四步:从编码中找出人的名字

最后一步实际上是最简单的一步,我们需要做的是找到数据库中与我们的测试图像的测量值最接近的那个人。

如何做呢,我们利用一些现成的数学公式,计算两个128D数值的欧氏距离。

这样我们得到一个欧式距离值,系统将给它一个认为是同一个人欧氏距离的阀值,即超过这个阀值我们就认定他们是同 (失) 一 (散) 个 (兄) 人 (弟)。

人脸识别就这样达成啦,来来我们再回顾下流程:

使用HOG找出图片中所有人脸的位置。

计算出人脸的68个特征点并适当的调整人脸位置,对齐人脸。

把上一步得到的面部图像放入神经网络,得到128个特征测量值,并保存它们。

与我们以前保存过的测量值一并计算欧氏距离,得到欧氏距离值,比较数值大小,即可得到是否同一个人。

机器如何识别图片

      图片不像机器学习那样,可以很容易的根据数据值的分布,字段的含义去提取相应的特征,因为图像是一种非结构化数据,我们人类很难提取到它的特征,如果一定要通过观察的方式,采用人为的标注的方式提取特征,这里有一个鸢尾花的图像例子,植物学家可以测量花瓣和花萼的长和宽,然后用结构化的表格数据进行记录统计,再利用利用机器学习的方法进行分类。

      测量花瓣和花萼的长和宽

      收集长和宽,并标记结果值

      利用机器学习将鸢尾花的测量数据进行学习与分类

3.图像的特征提取

      特征工程是一项十分繁琐、耗费很多人力物力的工作,怎样才能让机器找到抽象事物的特征?

      首先我们看看机器眼中的图片是什么样子,在机器“眼”里,图片就是由红绿蓝三个通道组成的数组。

      其中灰度图片可以用单通道的数组表示

       既然图片是由矩阵数字组成,那么科学家可以发明一些矩阵算法,将原始图像进行计算处理,比如:灰度转换、均衡图像、图像过滤、边缘检测、角点检测等算法,通过边缘检测算法可以提取图像的轮廓特征:

深度学习初探

       2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度信念网络”的概念。与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词--“深度学习”。

深度学习是机器学习的一个子领域,其中受我们大脑工作方式启发的模型以数学方式表达,深度学习是全球人工智能技术的关键推动力,外部刺激通过神经末梢,转化为电信号,转导到神经细胞(又叫神经元),无数神经元构成神经中枢,神经中枢综合各种信号,做出判断,人体根据神经中枢的指令,对外部刺激做出反应。

       既然思考的基础是神经元,如果能够"人造神经元"(artificial neuron),就能组成人工神经网络,模拟思考。上个世纪六十年代,提出了最早的"人造神经元"模型,叫做"感知器"(perceptron),直到今天还在用。

目前常见的神经网络模型有:

深度神经网络(DNN)

       一个深度神经网络通常由多个顺序连接的层组成。第一层一般以图像为输入,通过特定的运算从图像中提取特征。接下来每一层以前一层提出的特征作为输入,对其进行特定形式的变换,便可以得到更复杂的一些特征。

神经网络:卷积神经网络结构(CNN)

       卷积运算在图像处理中应用十分广泛,许多图像特征的提取方法都会用到卷积。以灰度图为例,我们知道在计算机中一幅灰度图像被表示为一个整数的矩陈,如果我们用一个形状较小的矩陈和这个图像的矩陈做卷积运算,就可以得到一个新的矩陈,这个新的矩陈可以看作是一幅新的图像。换句话说,通过卷积运算,我们可以将原图像变化为一幅新图像。这幅新图像有时候比原图像更清楚地表示了某些性质,我们就可以把它当作原图像的一个特征。这里用到的小矩陈就称为卷积核。

神经网络:循环神经网络结(RNN)

总结:深度学习的优点

       深度神经网络的出现降低了人工智能系统的复杂度,将特征提取与分类两个独立的步骤集成在一起,我们只需要将一张图片输入给神经网络,就可以直接得出对图片的类别的预测,不需要分步完成特征的提取与分类。从这个角度来讲,深度神经网络并不是对传统模式分类系统的颠覆,而是对传统系统的改进与增强。

上一篇下一篇

猜你喜欢

热点阅读