现有人脸图像数据库的总结及解决方案!++

过去,人脸识别主要包括人脸图像获取、人脸识别预处理、身份确认、身份搜索等技术和系统。现在人脸识别已经慢慢扩展到ADAS中的驾驶员检测、行人跟踪,甚至动态物体的跟踪。可以看出,人脸识别系统已经从简单的图像处理发展到实时视频处理。此外,该算法已从传统的统计方法如 Adaboots 和 PCA 转变为深度学习及其变形方法如 CNN 和 RCNN。现在已经有相当一部分人开始研究3D人脸识别,这个项目目前得到了学术界、工业界和国家的支持。

首先看一下目前的研究状况。从以上发展趋势可以看出,主要研究方向是利用深度学习方法解决视频人脸识别问题。

主要研究人员:

如下:中国科学院计算技术研究所单世光教授、中国科学院生物识别研究所李自清教授、清华大学苏光达教授、香港中文大学唐晓鸥教授、罗斯 B. Girshick 等。

主要开源项目:

SeetaFace 人脸识别引擎。该引擎由中科院计算所单世光研究员领衔的人脸识别课题组研发。代码基于C++实现,不依赖任何第三方库函数。开源协议是BSD-2,学术界和工业界都可以免费使用。github链接:

主要软件API/SDK:

脸++。Face++.com是一个免费提供人脸检测、人脸识别、人脸属性分析等服务的云服务平台。Face++是北京旷视科技旗下全新的人脸技术云平台。在黑马大赛中,Face++获得了年度冠军,并获得了联想之星的投资。

skybiometry..主要包括人脸检测、人脸识别、人脸分组。

主要人脸识别图像库:

目前比较好的人脸图片库有LFW(Labeled Faces in the Wild)和YFW(Youtube Faces in the Wild)。目前的实验数据集基本来源于LFW,目前的图像人脸识别准确率已经达到99%,基本上现有的图像数据库已经被刷爆了。以下是现有人脸图像数据库的总结:

现在国内做人脸识别的公司越来越多,应用也非常广泛。其中,汉王科技的市场占有率最高。主要公司的研究方向及现状如下:

汉王科技:汉王科技主要用于人脸识别认证,主要应用于门禁系统、考勤系统等。

科大讯飞:在香港中文大学唐晓鸥教授团队的支持下,科大讯飞研发了一种基于高斯过程的人脸识别技术——古斯人脸,该技术在LFW上的识别率为98. 52%,目前公司的DEEPID2在LFW上的识别率已经达到99.4%。

川大智胜:目前公司的研究重点是3D人脸识别,并且已经拓展到3D全脸摄像头的产业化等方面。

商汤科技:主要是一家致力于引领人工智能核心“深度学习”技术突破,构建人工智能和大数据分析行业解决方案的公司。、图像处理等方向具有很强的竞争力。人脸识别共识别出106个人脸关键点。

人脸识别过程

人脸识别主要分为四大块:人脸检测、人脸对齐、人脸验证、人脸识别。

人脸检测(人脸检测):

检测图像中的人脸并用矩形框出结果。有一个 Harr 分类器可以直接在 openCV 中使用。

人脸对齐:

对检测到的人脸姿态进行修正,使人脸尽可能“正面”,通过修正可以提高人脸识别的准确率。校正方法包括2D校正和3D校正。3D校正方法可以更好地识别轮廓人脸。在进行人脸校正时,会有检测特征点位置的步骤。这些特征点的位置主要是鼻子左侧、鼻孔下侧、瞳孔位置、上唇下侧等。如果知道这些特征点的位置一次在位置,做一个位置驱动的变换,脸就可以“矫正”了。如下所示:

这里是一个14年的MSRA技术:Joint Cascade Face Detection and Alignment (ECCV14)。这篇文章直接做了30ms的检测和对齐。

人脸验证(人脸验证):

人脸验证,人脸验证是基于配对匹配的,所以它得到的答案是“是”或“否”。在具体操作中,给出一张测试图像,然后进行一对一匹配。匹配表示测试图像和匹配的人脸是同一个人的脸。一般来说,这种方法(应该)用在小型办公室的人脸打卡系统中。具体操作方法大致如下流程:离线录入员工人脸照片一张(一个员工一般录入多张人脸),员工打卡时摄像头抓拍到图像后,员工会先进行人脸检测,然后进行人脸校正,然后如上所述进行人脸验证。一旦匹配结果为“是”,表示刷脸的人属于办公室,到这一步就完成了人脸验证。线下录入员工人脸时,我们可以将人脸与人名进行匹配,这样一旦人脸验证成功,就可以知道这个人是谁。上面提到的这种系统的优点是开发成本低,适用于小型办公空间。下图给出了示意图:适用于小型办公空间。下图给出了示意图:适用于小型办公空间。下图给出了示意图:

人脸识别(人脸识别/识别):

人脸识别或人脸识别opencv中识别行人的脚,人脸识别如下图所示。它回答“我是谁?”。与人脸验证中使用的配对匹配相比,它在识别阶段更多地使用了分类。s 方法。它实际上是在前两个步骤之后对图像(人脸)进行分类,即人脸检测和人脸校正。

根据以上四个概念的介绍,我们可以了解到人脸识别主要包括三个独立的大模块:

我们将上述步骤详细拆分,得到如下流程图:

人脸识别分类

现在随着人脸识别技术的发展,人脸识别技术主要分为三类:一是基于图像的识别方法,二是基于视频的识别方法,三是三维人脸识别方法。

基于图像的识别方法:

该过程是主要利用图像处理的静态图像识别过程。主要算法有PCA、EP、核方法、贝叶斯框架、SVM、HMM、Adaboot等算法。但是2014年人脸识别利用深度学习技术取得了重大突破,以97.25%的deepface和97.27%的face++为代表,但是deep face的训练集是400w集,而香港中文大学唐晓鸥的Gussian face的训练集是2w。

基于视频的实时识别方法:

这个过程可以在人脸识别的跟踪过程中看到,它不仅需要找到人脸在视频中的位置和大小,还需要确定不同人脸在帧之间的对应关系。

深脸

参考论文(材料):

1. DeepFace 论文。DeepFace:缩小人脸验证与人类水平的差距

2. 卷积神经网络理解博客。

3. 卷积神经网络推导博客。

4. 关于卷积神经网络的注意事项。

5. 手写数字识别的神经网络

6. DeepFace 博文:

DeepFace 是由 FaceBook 提出的,其次是 DeepID 和 FaceNet。而且DeepFace在DeepID和FaceNet中都可以体现出来,所以DeepFace可以说是CNN在人脸识别方面的基础工作。目前,深度学习在人脸识别方面也取得了很好的效果。所以这里我们从 DeepFace 开始。

在DeepFace的学习过程中,不仅介绍了DeepFace使用的方法,还介绍了当前步骤的其他主要算法,并对现有的图像人脸识别技术进行了简单而全面的描述。

1.DeepFace的基本框架

1.1 人脸识别的基本流程

人脸检测->人脸对齐->人脸验证->人脸识别

1.2 人脸检测

1.2.1 现有技术:

哈尔分类器:

人脸检测(detection)长期以来一直是一个可以直接在opencv中使用的haar分类器,基于Viola-Jones算法。

Adaboost算法(级联分类器):

1.参考论文:Robust Real-Time face detection。

2. 参考中文博客:

3. 博客:

1.2.2 文章中使用的方法

本文采用基于检测点的人脸检测方法(fiducial Point Detector)。

效果如下:

1.3 人脸对齐

二维对齐:

3D对齐:

效果如下:

上面的2D对齐对应(b),3D对齐对应(c)~(h)。

1.4 人脸验证(人脸验证)

1.4.1 现有技术

LBP && 联合 Beyesian:

通过高维LBP和联合贝叶斯方法的结合。

DeepID系列:

7个联合贝叶斯模型采用SVM融合,准确率达到99.15%

1.4.文章中的2个方法

在本文中,通过多类人脸识别任务训练深度神经网络(DNN)。网络结构如上图所示。

结构参数:

3D对齐后,形成的图像都是152×152的图像,输入到上面的网络结构中。结构参数如下:

提取低级特征:

过程如下:

预处理阶段:输入3通道人脸,进行3D校正,然后归一化为152*152像素大小 – 152*152*3.

通过卷积层C1:C1包含32个11*11*3的filters(即卷积核),得到32个特征图——32*142*142*3。

通过max-polling层M2:M2的滑动窗口大小为3*3,滑动步长为2,三个通道独立轮询。

通过另一个卷积层C3:C3包含16个9*9*16的3D卷积核。

上面的 3 层网络旨在提取低级特征,例如简单的边缘特征和纹理特征。Max-polling 层使卷积网络对局部变换更加鲁棒。如果输入是经过校正的人脸,它会使网络对小的标记错误更加鲁棒。然而,这样的轮询层会导致网络丢失一些关于人脸的详细结构和微小纹理的精确位置的信息。因此,在本文中,只有 Max-polling 层之后是第一个卷积层。这些前面的层被称为前端自适应预处理层。然而,对于许多计算,这些层必须具有非常少的参数。他们只是将输入图像扩充为一个简单的局部特征集。

后续层:

图片[1]-现有人脸图像数据库的总结及解决方案!++-老王博客

L4、L5 和 L6 都是局部连接层,就像卷积层使用过滤器一样,它们被训练为在特征图像的每个位置学习一组不同的过滤器。由于校正后不同区域的统计特性不同,无法建立卷积网络空间稳定性的假设。例如,眼睛和眉毛之间的区域呈现出非常不同的外观,并且与鼻子和嘴巴之间的区域相比具有很高的辨别力。换句话说,通过利用输入的校正图像,定制了 DNN 的结构。

使用局部连接层不会影响特征提取的计算负担,但会影响训练的参数数量。仅仅因为有这么大的标签人脸库,我们就可以负担得起三个大型的局部连接层。本地连接层的输出单元受大输入瓦片的影响,可以相应调整本地连接层的使用(参数)(不共享权重)

例如,L6层的输出受到74*74*3的输入patch的影响,在校正后的人脸中,如此大的patch之间很难有任何统计参数共享。

顶层:

最后,网络顶部的两层(F7,F8)全连接:每个输出单元都连接到所有输入。这两层可以捕捉到人脸图像中远距离区域的一些特征。例如,眼睛的位置和形状,嘴巴的位置和形状的相关性(这部分也包含信息)可以通过这两层得到,第一个全连接层F7的输出为我们原来的面部特征表情向量。

在特征表达方面,这个特征向量与传统的基于LBP的特征描述有很大不同。传统方法通常使用局部特征描述(计算直方图)并将其作为分类器的输入。

最后一个全连接层F8的输出进入一个K-way softmax(K是类别数),可以生成类别标签的概率分布。用 Ok 表示输入图像经过网络后的第 k 个输出,输出类标签 k 的概率可以用以下公式表示:

训练的目标是最大化正确输出类的概率(人脸的id)。这是通过最小化每个训练样本的交叉熵损失来实现的。让 k 表示给定输入的正确类别的标签,则交叉熵损失为:

通过计算交叉熵损失 L 相对于参数的梯度并使用随机梯度下降来最小化交叉熵损失。

梯度是通过误差的标准反向传播计算的。有趣的是,这个网络产生的特征非常稀疏。超过 75% 的顶级特征元素为 0。这主要是由于使用了 ReLU 激活函数。这个软阈值非线性函数用于所有卷积层、局部连接层和全连接层(最后一层F8)除外),导致整体级联后的高度非线性和稀疏的特征,稀疏性也和使用有关dropout 正则化,即在训练期间将随机特征元素设置为 0。我们只在 F7 全连接层中使用了 dropout。由于训练集很大,我们在训练过程中没有发现显着的变化。过拟合。

给定图像 I,其特征表达式 G(I) 是通过前馈网络计算的。每个L层的前馈网络可以看成是一系列函数:

标准化:

在最后一级,我们将特征的元素归一化为 0 到 1,这降低了特征对光照变化的敏感度。特征向量中的每个元素除以训练集中对应的最大值。然后进行 L2 归一化。由于我们采用了 ReLU 激活函数,我们的系统对图像的尺度不变性被削弱了。

对于输出 4096-d 向量:

2. 验证

2.1 卡方距离

在该系统中opencv中识别行人的脚,归一化的 DeepFace 特征向量与传统的基于直方图的特征(如 LBP)有以下相似之处:

所有值都是负数

非常稀疏

特征元素的值都在区间[0, 1]内

卡方距离的计算公式如下:

2.2连体网络

文章中还提到了端到端的度量学习方法。一旦学习(训练)完成,人脸识别网络(直到F7)在两个输入图像上重复使用,得到的两个特征向量直接用来预测两个输入图片是否属于同一个人. 这分为以下几个步骤:

一个。计算两个特征之间的绝对差值;

b,全连接层,映射到单个逻辑单元(相同/不同的输出)。

3. 实验评估

3.1 个数据集

LFW 上的结果:

YTF 上的结果:

DeepFace 与后续方法的最大区别在于,DeepFace 在训练神经网络之前使用了对齐方法。论文认为,神经网络之所以能起作用,是因为一旦人脸对齐,人脸区域的特征就固定在某些像素上。这时候可以使用卷积神经网络来学习特征。

本文模型采用C++工具箱dlib中基于深度学习的最新人脸识别方法,在户外人脸数据测试库Labeled Faces的基准水平上达到99.38%的准确率。荒野 。

更多算法

%20认识/概述/

数据库:

数据测试库 Labeled Faces in the Wild:

该模型提供了一个简单的 face_recognition 命令行工具,允许用户通过命令直接使用图像文件夹进行人脸识别操作。

捕捉照片中的面部特征

在一张图像中捕捉所有面孔

查找和处理图像中人脸的特征

找到每个人的眼睛、鼻子、嘴巴和下巴的位置和轮廓。

导入人脸识别

image = face_recognition.load_image_file(“your_file.jpg”)

face_locations = face_recognition.face_locations(图像)

抓拍五官很有用,当然也可以用于图片的数码美颜(比如美图秀秀)

数码妆容:

识别图片中的人脸

识别照片中的人

安装步骤

该方法支持Python3/python2,我们只在macOS和Linux下测试过,不知道是否适用于Windows。

使用 pypi 的 pip3 (或 Python 2 的 pip2)

重要提示:编译 dlib 可能会出现问题,您可以通过从源(而不是 pip)安装 dlib 来修复错误,请参阅安装手册 How to install dlib from source

安装是通过手动安装 dlib,运行 pip3 install face_recognition 来完成的。

如何使用命令行界面

当您安装 face_recognition 时,您会得到一个名为 face_recognition 的简洁命令行程序,它可以帮助您识别照片或照片文件夹中的所有面孔。

首先,您需要提供一个包含照片的文件夹,并且您已经知道照片中的人是谁,每个人都必须有一个照片文件,并且文件名需要以该人命名;

然后你需要准备另一个文件夹,里面包含你要识别的人脸照片;

接下来只需要运行face_recognition命令,程序就可以通过已知人脸文件夹识别出未知人脸照片中的人;

每张人脸需要一行输出,数据为文件名加识别出的人名,用逗号隔开。

如果您只想知道每张照片中的人名而不是文件名,您可以执行以下操作:

Python 模块

可以通过引入face_recognition来完成人脸识别操作:

API 文档:

自动识别图片中的所有人脸

这个案例请参考这个例子:

识别图片中的面孔并说出名字

这个案例请参考这个例子:

Python 代码示例

所有的例子都在这里。

·在照片中查找面孔

· 识别照片中的特定面部特征

· 应用(非常丑陋的)数字化妆

根据已知人物的照片查找和识别照片中的未知面孔

人脸识别方法原理

如果你想了解这种方法的人脸定位和识别原理,请看我的文章。

@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78

预防措施

· 我的人脸识别模型仅限于成人,不适用于儿童。由于使用了默认对比度阈值(0.6).

结尾。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论