一、人脸识别流程
(一)对齐
通过确定人脸中的标定点(landmark)的位置进行人脸对齐。(找3个点即可,一般找5个点:鼻子、眼睛、嘴角两端)对齐后可以找到一个二维坐标平面,进行下一步仿射变换。
(二)仿射变换
原理
- 二维坐标到二维坐标之间的线性变换
- 不共线的三对对应点决定了一个唯一的仿射变换
其中,平移——\(c_1\)、\(c_2\)为平移量;缩放——\(a_1\)、\(b_2\)为缩放量;旋转——θ是旋转角度。
(三)回归
使用神经网络(下面使用的DCNN)进行回归对标定点进行检测。
其中,输入原始画像后,进行4*4卷积后,在进行池化,卷积....最后使用两个全连接得到最终结果。这里面采用了一个级联思想实现CNN组合,级联思想实现细节如下图:
论文:Deep Convolutional Network Cascade for Facial Point Detection
(四)特征学习
1. 分类模型
- Deepface
- DeepID
- VGG
- ResNet
2. 度量学习模型——FaceNet为例
下图是FaceNet的简略示意图,例如,输入三张图片:Anchor、与Anchor不同类的Negative、与Anchor同类的Positive,通过一系列学习后实现同类相近,异类相远。
论文:FaceNet- A Unified Embedding for Face Recognition and Clustering
距离计算公式(前半部分为与同类positive之间的距离,后半部分计算与不同类negative的距离。):
最终实现效果如下图所示,距离>1.1即可认为相互之间为不同人,即使一个人不同角度也可以被识别为同一人。
二、人脸识别
(一)人脸验证
人脸识别中的人脸验证问题即是验证两张图片是否来自同一个人。主要有以下三种方法,欧氏距离和余弦距离方法是工业中常用的验证方法,Joint Bayesian方法常用在学术研究中。首先假定两张人脸图片提取的特征向量为 \(\overrightarrow{x_j}\) 和 \(\overrightarrow{x_k}\) 。
1. 欧氏距离:
距离差越大,相似度越大。
\overrightarrow{x_j}-\overrightarrow{x_k}
\end{Vmatrix}
\]
2. 余弦距离
\]
3. Joint Bayesian 方法
其中,????(∆) 是差异 ∆ 的函数,????(\(H_1\))为先验概率,????(\(∆|????_1\)) 为似然概率,????($????_1|∆)是后验概率,是人脸相似性的度量。
(二)人脸搜索
深度网络 + hashing [Deep Learning of Binary Hash Codes for Fast Image Retrieval]
在预训练好的网络倒数第二层和最终的任务层中间,插入一个新的全连接层,这个层使用sigmoid激活函数来提供范围约束,节点数即为目标二值码的码长。通过端到端的finetune,可以将语义信息嵌入到这个新加入的全连接层输出之中。
(三)人脸识别数据集
主要有以下几种数据集,其中仅MultiPIE需要购买,其余的申请即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习之人脸识别——2020.2.9 - Python技术站