基于多模型的人脸识别方法和装置与流程

文档序号:13422447阅读:274来源:国知局
基于多模型的人脸识别方法和装置与流程

本发明涉及人工智能深度学习,特别是涉及一种基于多模型的人脸识别方法和装置。



背景技术:

人脸识别系统的研究始于20世纪60年代,80年代后随着计算机技术和光学成像技术的发展得到提高,而真正进入初级的应用阶段则在90年后期,并且以美国、德国和日本的技术实现为主;人脸识别系统成功的关键在于是否拥有尖端的核心算法,并使识别结果具有实用化的识别率和识别速度;“人脸识别系统”集成了人工智能、机器识别、机器学习、模型理论、专家系统、视频图像处理等多种专业技术,同时需结合中间值处理的理论与实现,是生物特征识别的最新应用,其核心技术的实现,展现了弱人工智能向强人工智能的转化。人脸识别的应用主要有:智慧城市/社区,社会治安,门禁系统,网络应用,考勤系统等。

人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术。人脸识别中需要大量的样本数据,数据量大增加了操作的难度,且数据的更新对已经训练好的识别模型会产生一些影响,需要重新进行训练,增加了使用和维护的难度。

随着人工智能在计算机应用领域的发展,深度学习在人脸识别方面的应用也逐渐突显出来,随之出现的是一批性能优越的分类模型。每个分类模型基于不同的特征,适合不同的情况,并且在其特征上表现良好,但没有一个分类模型在所有分类问题上都能取到最优结果。因此为了提高整体的准确率,本发明提出一种基于多模型进行人脸识别的方法。



技术实现要素:

发明目的:针对现有技术中存在的问题,本发明提供一种基于多模型的人脸识别方法和装置,能够提高人脸识别的准确率,并且将大量样本数据进行分类,在每一样本分类上生成分类模型,以降低训练时间,便于样本和分类模型的维护。

技术方案:为实现上述发明目的,本发明采用如下技术方案:

一种基于多模型的人脸识别方法,包括如下步骤:

(1)将样本数据按照定义的类别进行划分,生成多个样本文件夹,每个样本文件夹中包含一类样本数据;

(2)对所有样本文件夹中的数据样本进行预处理,检测样本图像中的人脸并进行归一化处理;

(3)对预处理后的每个样本文件夹中的数据样本使用不同的人脸识别算法或同一人脸识别算法的不同的训练方法训练得到不同的模型,同一样本文件夹中的数据样本对应多个模型;

(4)同时采用步骤(3)得到的多个模型对待识别人脸进行识别,得到多个人脸识别的结果并从中选出最终的人脸识别结果。

在具体的实施方式中,所述步骤(1)中采用随机性归类方式对样本数据进行划分,所述随机性归类方式采用排它方式或交叉方式。

在具体的实施方式中,所述步骤(1)中采用选择性归类方式对样本数据进行划分,所述选择性归类方式根据光线、年龄、性别或正侧面中的一种或多种分类方式。

在具体的实施方式中,采用随机性归类方式时,所述步骤(2)的预处理包括人脸检测、转换为灰度图、直方图均衡化和归一化处理。

在具体的实施方式中,采用选择性归类方式时,所述步骤(2)的预处理包括人脸检测、人脸面部校正和归一化处理。

在具体的实施方式中,所述步骤(3)中使用的人脸识别算法为pca、cnn或svm中的一种或多种。

在具体的实施方式中,所述步骤(4)中将识别结果根据概率进行排序处理,取概率最大者为最终结果。

在具体的实施方式中,所述步骤(4)中采用少数服从多数的原则选出识别出的人脸标记名称数量最多的作为最终结果。

在具体的实施方式中,所述步骤(4)中计算待识别人脸与所有识别出的人脸标记名称对应的一张人脸的欧式距离,选取欧式距离最小的人脸最为最终识别结果。

采用上述方法的一种基于多模型的人脸识别装置,包括:

样本归类模块,用于将样本数据按照定义的类别进行划分,生成多个样本文件夹,每个样本文件夹中包含一类样本数据;

预处理模块,用于对所有样本文件夹中的数据样本进行预处理;

识别模型训练模块,用于对预处理后的每个样本文件夹中的数据样本使用不同的人脸识别算法或同一人脸识别算法的不同的训练方法训练得到不同的模型,同一样本文件夹中的数据样本对应多个模型;

以及,识别模块,用于同时采用多个模型对待识别人脸进行识别,得到多个人脸识别的结果并从中选出最终的人脸识别结果。

有益效果:与现有技术相比,本发明具有如下优点:

1、本发明利用每个模型在使用的时候识别概率不尽相同的特点(根据测试发现有的模型在有的时候正确识别率高,有的时候正确识别率低),会集各模型之所长,在不同情况下每次识别都会得到的更加精确结果。

2、本发明将样本数据归类到不同的样本文件夹中,在往样本中添加数据样本时,只需要对涉及到的样本文件夹进行后续的操作训练生成模型,在数据庞大的时候对训练速度的影响较小。能够大大降低了训练时间,而且在人脸识别中使用多个模型进行并发计算,在一定程度上减少了查找对比的时间。

附图说明

图1为本发明实施例的方法流程图。

图2为本发明实施例的装置结构示意图。

图3为本发明实施例中生成的文件格式示意图。

图4为本发明实施例中进行训练样本分类器采用的卷积神经网络模型示意图。

图5为本发明实施例中涉及的人脸特征点示意图。

图6为本发明实施例中训练识别模型采用的卷积神经网络模型示意图。

具体实施方式

下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

如图1所示,本发明实施例提供一种基于多模型的人脸识别方法,首先将样本数据按照定义的类别进行划分,生成多个样本文件夹,每个样本文件夹中包含一类样本数据;然后对所有样本文件夹中的数据样本进行预处理,检测样本图像中的人脸并进行归一化处理。接着对预处理后的每个样本文件夹中的数据样本使用不同的人脸识别算法或同一人脸识别算法的不同的训练方法训练得到不同的模型,同一样本文件夹中的数据样本对应多个模型;最后同时采用多个模型对待识别人脸进行识别,得到多个人脸识别的结果并从中选出最终的人脸识别结果。

图2为本发明实施例公开的一种基于多模型的人脸识别装置的结构示意图,包括样本归类模块,预处理模块,识别模型训练模块和识别模块,样本数据通过样本归类模块进行划分,得到多个样本文件夹,每个样本文件夹中包含一类样本数据;每个样本文件夹中的数据样本经过预处理模块处理后得到归一化的人脸图像,识别模型训练模块对预处理后的每个样本文件夹中的数据样本进行训练,同一样本文件夹中的数据样本采用不同识别算法不同训练方法得到多个模型;待识别人脸图像通过识别模块并发调用所有识别模型进行识别,从所有的识别结果中选出最优的人脸识别结果。

下面对本发明实施例识别方法的具体实施细节做详细说明:

步骤一:将样本数据按照定义的类别进行划分。本步骤中,首先设定划分样本数据归类的类别。本发明将样本归类分为两个级别,第一个级别为样本归类的方式,这里假定为随机性归类样本和选择性归类样本。第二个级别为定义每类划分的描述属性。收集到的样本数据里面除了人脸还包含很多其他信息,比如光线强弱、年龄大小、男性女性、正面侧面等等。随机性归类样本比较简单,它不考虑样本中包含的其他信息,可以直接在随机性归类样本中定义两个分类:一为排它,二为交叉。选择性归类样本比较复杂,它考虑了样本中包含的信息,这里可以在选择性归类样本中定义四个分类:一为光线,二为年龄,三为性别,四为正侧面。每个分类里面可设置多个样本文件夹,然后将样本按照分类的标准分别存放到设定的样本文件夹中。具体的方法有:

对于随机性归类样本中的排它而言:设定n(n可变参数,可自行设定)个样本文件夹,将数据样本随机分配到n个文件夹中的某一个,将每个样本文件夹看作一个集合(则存在n个集合,设为n1,n2……nn),当数据样本a∈n1时,则以此保证每个文件夹具有排它性。

对于随机性归类样本中的交叉而言:同样设定n(n可变参数,可自行设定)个样本文件夹,将数据样本随机分配到n个文件夹中的m(m可变参数,可自行设定)个文件夹中,将每个样本文件夹看作一个集合(则存在n个集合,设为n1,n2……nn),则存在样本a∈{n1,n2,n5}的情况,这样的话,n个样本文件夹之间会存在交叉。

对于选择性归类样本中的光线类而言:对样本文件夹可以根据光线的强弱进行设定,如可以分为光线弱、光线适中、光线强等。首先对数据样本使用训练好的关于光线识别的模型(根据样本图像颜色直方图中的分布情况进行分类用cnn训练得到的模型分类器)进行识别,然后根据识别出的光线情况分配到设定的文件夹中。

对于选择性归类样本中的年龄类而言:对样本文件夹可以根据年龄大小进行设定,如可以分为0-10岁、11-20岁、21-30岁、31-40岁等。首先对数据样本使用训练好的关于年龄识别的模型(将样本图像的年龄划分多个年龄段,每个年龄段相当于一个类别,在大量的样本图像上标记类别然后用cnn进行训练得到的模型分类器)进行识别,然后根据识别出的年龄大小分配到设定的文件夹中。

对于选择性归类样本中的性别类而言:对样本文件夹可以根据性别设定,可以分为男性、女性。首先对数据样本使用训练好的关于性别识别的模型(将样本划分为男性女性两个类别,在大量的样本图像上标记类别然后用cnn进行训练得到的模型分类器)进行识别,然后根据识别出的性别分配到设定的文件夹中。

对于选择性归类样本中的正侧面类而言:对样本文件夹可以根据人脸面部的正面或者侧面进行设定,可以分为正面和侧面。首先对数据样本使用训练好的关于人脸正侧面识别的模型(将样本划分为正面侧面两个类别,在大量的样本图像上标记类别然后用cnn进行训练得到的模型分类器,也可直接采用opencv中的haarcascade_frontalface_alt.xml和haarcascade_profileface.xml)进行识别,然后根据识别出的结果分配到设定的文件夹中。

下面以选择性归类样本中的性别类来具体说明:

(一)训练得到人脸性别识别的分类器。

1.从网上收集训练所需的样本。男性照片3500张,女性照片3800张。

2.将所有的样本图片经过人脸检测(opencv的cascadeclassifier分类器可以进行人脸检测)、对齐(dlib的特征点检测方法进行检测并对齐),然后归一化到92*112尺寸大小(opencv的resize函数)。

3.生成图片路径和label的csv文件格式如图3:

4.读取csv文件加载所有样本图片和label信息,并划分训练集和测试集。

5.使用四个卷积层(c1、c2、c3、c4)和两个全连接层(f1、f2)的卷积神经网络(如图4)来训练与测试模型。

其中,c1层有32个滤波器,大小为3*12*12,这一层的dropout参数大小为0.25。c2层有48个滤波器,大小为32*5*5,这一层的dropout参数大小为0.25。c3层有64个滤波器,大小为48*3*3,这一层的dropout参数大小为0.25。c4层有80个滤波器,大小为64*3*3,这一层的dropout参数大小为0.25。f1和f2层各有神经元1000个,每层的dropout参数大小为0.5。在训练的时候,设置的参数分别为:mini_batch=64,learning_rate=0.001,momentum=0.9,decay=-0.0001。在经过100次迭代后得到最佳模型。

(二)使用训练好的性别识别模型分类器识别待归类的样本,按照识别出来的结果将其归类到相应的文件夹中。

1.加载(一)中得到的性别识别模型分类器;

2.输入待归类的样本src;

3.使用加载的性别识别模型分类器识别样本src,得到识别结果dst(男性或者女性,这里假设得到的结果为女性)。

4.根据结果dst将样本src归类到性别类中的女性文件夹中。

其它选择性分类的采用的模型分类器和训练或使用方法与上述方法类似。在实际使用中,可以使用单一模型分类器对样本数据进行分类,生成改模型分类其对应的几个样本文件,也可以使用多个模型分类器分别对样本数据进行分类,将样本数据划分到各自模型分类器对应的样本文件夹中。

步骤二:对所有样本文件夹中的数据样本进行预处理。对于步骤一中提出的两种样本归类的方式,提供两种预处理方法。

第一种预处理方法对应的是随机性归类样本,主要包括四个部分:人脸检测、转换为灰度图、直方图均衡化、归一化处理。采用opencv实现时,具体方法为:

首先使用通过opencv的cascadeclassifier分类器进行人脸检测并将人脸裁剪出来得到图片srcimage,其次使用opencv的cvcvtcolor函数将图像srcimage转换为灰度图grayimage。其中cvcvtcolor函数原型如下:

voidcvcvtcolor(constcvarr*src,cvarr*dst,intcode);

src为输入的8-bit,16-bit或32-bit单倍精度浮点数影像。

dst为输出的8-bit,16-bit或32-bit单倍精度浮点数影像。

code为色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如cv_bgr2gray表示转换为灰度图。

然后使用opencv的cvequalizehist函数使灰度图grayimage直方图均衡化得到图像dstimage。该方法归一化图像亮度和增强对比度。

其中cvequalizehist函数原型如下:

voidcvequalizehist(constcvarr*src,cvarr*dst);

src为输入的8-比特单信道图像。

dst为输出的图像与输入图像大小与数据类型相同。

最后使用opencv的resize函数将所有的dstimage图片改为一致的尺寸大小96*96。其中resize函数原型如下:

voidresize(inputarraysrc,outputarraydst,sizedsize,doublefx=0,doublefy=0,intinterpolation=inter_linear);

src为输入的原图像,即待改变大小的图像;

dst为输出的改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;

dsize为输出图像的大小。

fx和fy是图像width方向和height方向的缩放比例。

interpolation是指定插值的方式,主要有inter_nearest、inter_linear、inter_area、inter_cubic和inter_lanczos4。

第二种预处理方法对应的是选择性归类样本,预处理方法与样本分类中训练分类模型对图像处理的方法一致,主要包括三个部分:人脸检测、人脸面部校正和归一化处理。

首先使用通过opencv的cascadeclassifier分类器进行人脸检测并将人脸裁剪保存下来。

然后调用dlib的特征点检测方法进行检测并对齐。本发明中我们先使用dlib的面部特征点检测模型(shape_predictor_68_landmarks.dat)在样本图片的人脸上找到68个关键点(如图5所示),再根据这些关键点对人脸作对齐校正。我们使用保持平行线(称为仿射变换transform)的基本图像转换,使眼睛和嘴巴尽可能地居中,对准在图像中大致相同的位置,并使用仿射变换将人脸统一“摆正”,这样可以尽可能地去消除面部角度不同带来的误差。在这一过程中,先使用getaffinetransform函数求出仿射变换矩阵:warp_mat=getaffinetransform(scrtri,desttri),其中scrtri为未对齐之前的样本图片中人脸的关键点,desttri为标准模板的人脸关键点,应当注意的是样本图片的尺寸大小与标准模板的尺寸大小一致。再用所求得的仿射变换矩阵应用到未对齐之前的样本图片上:

warpaffine(src,warp_dst,warp_mat,warp_dst.size()),其中src为未对齐之前的样本图片,warp_dst为对齐后的样本图片,warp_mat为刚求出来仿射变换矩阵,warp_dst.size()为对齐后的样本图片的尺寸大小。

最后按统一尺寸大小为96*96,即将上一部分中的warp_dst.size()设置为统一的大小,然后将处理后的人脸保存下来。

步骤三:对预处理后的每个样本文件夹中的数据样本使用不同的人脸识别算法或同一人脸识别算法的不同的训练方法训练得到多个不同的模型。本步骤中,首先对步骤二进行预处理后的数据样本中的每个人进行编号,生成一个带有样本每张图像信息的csv文件。csv文件里面包含每个样本图像所在的位置以及每个人脸对应的标签。对csv文件进行训练就能够得到模型,使用不同的算法进行训练会得到不同的模型,同样,使用相同的算法但使用不同的训练方法也会得到不同的模型。用于人脸识别的算法有多种,如主成分分析法(pca)、卷积神经网络(cnn)、支持向量机(svm)等。就cnn而言,不同的训练方法可以用不同的卷积层层数、不同的损失函数、不同的训练参数(如学习率、循环次数等)来实现。

在此步骤中以使用cnn(卷积神经网络,如图6)为例来训练样本得到模型。

其中,c1层有32个滤波器,大小为3*12*12,这一层的dropout参数大小为0.25。c2层有48个滤波器,大小为32*5*5,这一层的dropout参数大小为0.25。c3层有64个滤波器,大小为48*3*3,这一层的dropout参数大小为0.25。c4-c9层有64个滤波器,大小为64*3*3,这一层的dropout参数大小为0.25。c10层有128个滤波器,大小为64*3*3,这一层的dropout参数大小为0.25。f1和f2层各有神经元1000个,每层的dropout参数大小为0.5。在训练的时候,设置的参数分别为:mini_batch=64,learning_rate=0.001,momentum=0.9,decay=-0.0005。在经过1000次迭代后得到最佳模型。

然后通过改变卷积层层数的数量,dropout参数,learning_rate等获得不同的模型。在这里假设我们得到5种不同的模型。

步骤四:在人脸识别过程中同时采用步骤三训练出来的所有模型对待识别人脸a进行识别,从所有得到的识别结果中选出最终的人脸识别的结果。步骤一中将样本分类得到多个类别的样本文件夹,通过步骤三训练每类样本文件夹又会得到多个模型,所有的模型在此步骤中并行处理来进行人脸识别,进而我们在此步骤中可以得到不同的结果。有三种方法可以获得最终的人脸识别结果:1、将所有的结果在不分类的情况下根据概率进行排序处理,取概率最大者为最终的人脸结果。2、将所有的结果先进行分类,再采用少数服从多数的原则,取多数的那一类为最终的人脸结果。3、将所有的结果先进行分类,再求出对应的欧氏距离后进行结果排序,取距离最小者为最终的人脸识别结果。

步骤一的具体实施以选择性归类样本中的性别类为例,步骤三的具体实施以cnn为例。由此可共得2*5=10个模型分类器。在人脸识别过程中,加载训练产生的所有模型分类器(10个)。用这10个模型分类器来对人脸a进行识别,得到10个结果((p1,c1),(p2,c2)……(p10,c10)),每一个结果里面对应着识别出来的人脸标记名称p以及其置信度c。有三种方法可以获得最终的人脸识别结果。具体方法如下:

方法一:所有的结果在不分类的情况下将每类的结果(置信度(c1,c2……c10))分别写入一个列表中,使用sort函数对列表元素进行排序处理,取概率(这里为置信度)最大者为最终的人脸结果。

方法二:将得到的10个结果进行分类,按照人脸标记名称(p1,p2……p10)来分,将人脸标记名称相同的归为一类(假设分为3个类,分别为b1,b2,b3)。将每类的结果(人脸标记名称(p1,p2……p10))分别写入一个列表中,使用函数计算每类的总个数。如p1,p2,p5,p7,p8对应的人脸标记名称一致,得到列表a[p1,p2,p5,p7,p8],使用len()函数得出此列表元素个数为5。依次类推,求出其他各类对应的个数。按照少数服从多数的原则,取数量最多的某类(假设为b2)为结果,其对应的人脸以及人脸标记名称即为最终结果。

方法三:将得到的10个结果进行分类,按照人脸标记名称(p1,p2……p10)来分,将人脸标记名称相同的归为一类(假设分为3个类,分别为b1,b2,b3)。从类b1,b2,b3中分别取出对应的一张人脸与人脸a进行对比,求出这两张人脸之间的欧式距离。欧氏距离计算如下:dist=numpy.sqrt(numpy.sum(numpy.square(vec1-vec2))),其中vec1和vec2分别为两张人脸对应的两个numpy向量。这样我们同样会得出3个结果(dist1,dist2,dist3),将这些结果存入列表中,使用sort()函数对列表元素进行排序,得出距离最小者,其对应的人脸即为最终结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1