1.基于深度学习的人脸关键点检测方法,其特征在于,包括训练阶段和检测阶段,所述训练阶段包括如下步骤:(1)构建基于MobileNetV1架构的人脸关键点检测网络;所述人脸关键点检测网络的输入为人脸图像,输出为人脸关键点坐标;所述人脸关键点为左眼和鼻尖坐标;
所述人脸关键点检测网络包括依次连接的16层网络,其中第一层为普通卷积层;第二层到第十三层为深度卷积层与逐点卷积层交替连接的6个深度可分离卷积单元;第十四层为池化层,第十五层为全连接层,第十六层为softmax层;1‑13层为特征提取子网络,用于提取图像局部特征;14‑16层为特征分类子网络,根据局部特征得到人脸关键点;
深度卷积的计算为:
步骤一:把一幅大小为M*M*N图像拆分成N个M*M*1的图像;
步骤二:为每一个单通道图像定义1个F*F*1的卷积核,F为奇数;一共需要定义N个;
步骤三:为了使卷积过后的输出图像与输入图像大小相等,需进行补白,上下左右补白的大小为P=(F‑1)/2;
步骤四:把每个单通道图像中的每一个像素点与相对应的单通道的卷积核进行卷积,由于卷积核尺寸为奇数,假设F=2a+1,则计算公式如下:式中,w(i,j)为F*F*1的卷积核中的系数,f(x,y)是图像中任意一点像素,g(x,y)是f(x,y)的卷积运算输出,其中x,y是可变的,以便w中的每个像素可访问f中每个像素;
逐点卷积的计算为:
利用1*1*N卷积,把N个卷积运算后的结果相加,得到一个M*M*1的输出;
先把三通道图像变成三个单通道图像,再对每个单通道进行卷积运算;在一个单通道图像中的任意一点f(x,y),输出g(x,y)是卷积核系数与卷积核所包围的图像像素的乘积之和:g(x,y)=w(‑1,‑1)f(x‑1,y‑1)+w(‑1,0)f(x‑1,y)+...........+w(1,1)f(x+1,y+1)然后由一个1*1*3的卷积核把三个单通道图像输出g(x,y)加起来,得到最后输出z(x,y);
(2)将Kaggle上的Facial Key‑points Detection的人脸数据集作为样本图像,对步骤(1)构建的人脸关键点检测网络进行训练,得到训练好的人脸关键点检测网络;
所述检测阶段包括如下步骤:
(3)采集待检测人脸的图像;对采集到的待检测图像采用OpenCV的级联分类器获取人脸区域;
(4)将步骤(3)获取到的人脸区域输入到训练好的人脸关键点检测网络中,得到左眼和鼻尖坐标;
(5)计算待检测图像中人脸右眼及左右嘴角的坐标,并进行关键点标注;
其中(Xleft_eye,Yleft_eye),(Xnoise,Ynoise),(Xright_eye,Yright_eye),(Xleft_mouth,Yleft_mouth),(Xright_mouth,Yright_mouth)分别为左眼、鼻尖、右眼、左嘴角、右嘴角的坐标;
所述步骤(2)中还包括对训练样本预处理,包括:(2.1)剔除数据缺失的训练样本;
(2.2)对训练样本进行标准化:样本图像A中像素i标准化后的灰度值 为:其中gi为样本图像A中像素i标准化前的灰度值,gmin为所有样本图像中像素灰度的最小值,gmax为所有样本图像中像素灰度的最大值;
所述人脸关键点检测网络中第一层到第十三层中,每一层的输入先通过BatchNormalization做批量标准化后再进行卷积运算;
所述步骤(2)中,将样本图像分为训练集和验证集,在训练集上进行训练人脸关键点检测网络,并用验证集验证人脸关键点检测网络的误差;训练步骤如下:(3.1)初始化最佳验证集误差为第一次训练结束后验证集的误差,并将最佳验证集误差训练次数初始化为0;
(3.2)每次训练结束后,用验证集验证人脸关键点检测网络的误差,并比较当前的验证集误差与最佳验证集误差;如果当前验证集误差小于最佳验证集误差,则将最佳验证集误差更新为当前验证集误差,并将最佳验证集误差训练次数置为0;如果当前验证集误差大于最佳验证集误差,将最佳验证集误差训练次数加一;
(3.3)如果最佳验证集误差训练次数达到预设的最佳验证集误差训练次数阈值,或总的训练次数达到预设的总训练次数阈值,则停止训练,并将最佳验证集误差所对应的人脸关键点检测网络参数作为训练结果;
当人脸关键点检测网络在验证集上的误差比上一次训练结果的误差大时,停止训练,并采用上一次训练结果的参数作为人脸关键点检测网络的最终参数。