python人脸比对算法_人脸比对算法-人脸比较(1:N)

第1章前言

设计一个1:N的人脸,随着N的增加,最小化精度降低的解决方案具有很强的现实意义。人脸1:N的框架大致可分为:人脸检测,人脸对齐,人脸映射和人脸识别LOSS设计,其结构如下图所示:

图1:人脸1的主帧:N

面孔1:N在学术界有着广泛的研究。人脸检测和人脸对齐(MTCNN,TCDCN等)在行业中已经取得了不错的成绩。当前的主要性能改进包括:DeepFace,DeepID,框架为CNN + Softmax,并且网络在用于人脸识别的第一个FC层中形成了高度区分性的人脸特征。对于人脸识别的特征映射,不能满足人脸比较的需求; DeepID2,DeepID2 +,DeepID3均使用Softmax +对比损失,使得相似特征的L2距离尽可能小,不同类型特征的L2距离大于一定间隔。 FaceNet是目前引用最多的人脸比较方法。提出了三重损失,它以三重的形式进行了优化,以获得类内部的紧凑性和类间的差异。 SphereFace是L-Softmax的改进,它对权重W进行了归一化人脸比对算法,使训练的重点更多地放在优化深度特征映射和特征矢量角度上,并减少了样本数量不均匀的问题。中心损失为每个类别学习一个中心,并将每个类别的所有特征向量拉到相应类别的中心,并将其与Softmax结合使用; COCO损失对权重c进行归一化,对特征f进行归一化并相乘。LFW的比例因子达到99.86%;损失函数设计还包括:L2-Softmax,附加边际损失,CosFace,ArcFace等。

基于FaceNet框架,本文对MTCNN进行了改进,以实现更准确的面部对齐结果。同时人脸比对算法,增强了训练样本,并通过使用随机旋转,随机裁剪以及变换人脸色相和饱和度来扩展样本,以进一步减少训练错误。将Triple Loss(三次损失)更改为最新的COCO损失,设置正则化因子以最小化结构风险:10 ^ -3,使用RMSPROP进行梯度下降,将mini-batch设置为100,实验环境:GT1080TI,训练时间:48-55h,准确性华为训练集上的面部1:N的比例在99.92%-99.97%之间。

第2章的功能和原理

2.1面部对齐

检测并切割面,对齐并标准化它们。通过Landmark获得人脸的特征点,并通过与正人脸进行比较来学习单应性矩阵。通过单应矩阵旋转人脸图像,其旋转效果明显优于MTCNN的对准。

python人脸比对算法_人脸比对算法-人脸比较(1:N)_第1张图片

图2:面部特征点的定位结果

图3:(a)原始图像(b)MTCNN对齐结果(c)本文对齐结果

2.1.1面部特征点定位

面部特征点可用于将面部与平均面部对齐,因此对齐后所有图像中面部特征点的位置几乎相同。直观地讲,用对齐图像训练的面部识别算法更有效。这种观点已被许多论文证实。

本文使用最新的TCDCN模型。该模型的思想是通过各种详细的任务来优化和提高特征点的定位精度。在面部特征点检测过程中要同时学习多个任务。这些任务包括:性别,是否戴眼镜,是否微笑和脸部姿势。使用这些辅助属性有助于更好地定位特征点。根据论文的结果,这确实有助于面部特征点的检测。该模型的优点:1)比现有方法更好,尤其是在处理某些遮挡和大姿态的面部图像时。2)与现有的最先进的级联深度模型方法相比,它动态地降低了模型的复杂性。

图4:TCDCN的结构

损失函数是不同任务的损失函数的直接加法。在人脸特征点检测任务中,不同的任务有不同的损失,特征点检测是平方误差之和,其他分类任务是交叉熵损失,因此最终损失为:

python人脸比对算法_人脸比对算法-人脸比较(1:N)_第2张图片

(1)

2.1.2单应性矩阵

平面的单应性是从一个平面到另一个平面的投影映射。如果从成像器上的Q点到q点的映射使用齐次坐标,则单应性(如图13所示)可以表示为:

(2)

其中

,s是任意比例的比率。 H由两部分组成:用于定位和观察的物平面的物理转换以及使用相机中的参数矩阵进行投影的

图5:平面单应性示意图

python人脸比对算法_人脸比对算法-人脸比较(1:N)_第3张图片

物理变换部分是与观察到的图像平面相关的部分旋转R和部分平移t的影响之和,可以表示为:

([3)

M是摄像机中的参数矩阵,即:

([4)

然后可以将单应性重写为

([5)

因为单应性是对从一个平面到另一个平面的映射的研究。因此,我们可以设置z = 0,即物平面上的点由x,y表示,可以简化为

在平面坐标

,可以推导为:

python人脸比对算法_人脸比对算法-人脸比较(1:N)_第4张图片

([6)

其中

,因此最终的单应性矩阵可以表示为:

([7)

因此,您可以使用规范化的面部并存储其特征点,然后计算面部特征点与标准面部的面部特征点之间的单应矩阵,从而使人可以将面部标准化为统一的标准。通常只需要4对点即可估算矩阵。为了更准确地估计图像的变换关系,将所有面部的特征点添加到计算中可以列出68组方程。方程组的数量大于要求解的系数。使用RANSAC算法求解该超正定方程,一次计算4个点,然后选择内部点数最大的一个作为最终结果。

([8)

效果如下:

图6:单应矩阵估计(a)标准人脸和特征点(b)-(d):通过变换获得标准人脸

2.2嵌入

根据FaceNet的想法,选择不同的卷积神经框架作为前级输入,对特征进行L2归一化后,执行特征映射以将特征映射到128维向量中。

图7:FaceNet的框架图

ResNet有效地解决了深度卷积神经网络难以训练的问题。这是因为在误差反向传播的过程中,梯度通常变得越来越小,因此权重更新量也变得越来越小。这导致远离损失函数的层的缓慢训练,并且随着层数的增加,这种现象变得更加明显。通过比较效果,最终选择图8(d)中的结构作为深度结构,并将在CASIA上的训练结果用作预训练模型。

图8:不同卷积神经网络的框架图

2.3相似度计算(LOSS选择)

通过相似度计算功能获得人脸之间的距离,并通过交叉验证方法设置最佳阈值,以将人脸与非人脸分开。 “ COCO损失”产品经理论坛,其目的还在于:

2.4梯度下降法

由于在调节学习速率时分母中的变量s一直在累积元素平方的最小批量随机梯度,因此目标函数自变量的每个元素的学习速率在迭代过程中一直在减小(或不变)。因此,当学习速率在迭代的早期阶段下降得更快并且当前解决方案仍然不好时,由于学习速率太小,Adagrad可能难以在迭代的后期阶段找到有用的解决方案。为了解决此问题,RMSProp算法对Adagrad进行了少量修改。 RMSProp算法使用小批量使用元素平方随机梯度的指数加权移动平均变量s,并将每个元素初始化为0。给定超参数γ和0≤γ

第3章功能摘要放大样本,设置模型参数并具有较高的识别稳定性。选择“损失”并在FaceNet的基础上提高识别率。更好的人脸对齐和预处理效果,强大的环境适应性。

第4章开发工具和技术

编译环境:Python3.5(anaconda3),Tensorflow 1.2、Scikit学习,opencv-python,h5pyAPP产品原型,Matplotlib,Pillow,请求,psutil。

硬件环境:I7-7700K,1080TI免费原型,64G内存。

技术:人脸对齐,单应矩阵估计,Facenet,COCO损失,梯度下降法,深度学习(卷积神经网络设计)。

你可能感兴趣的:(python人脸比对算法)