人脸识别的过程
人脸识别的流水线包括四个阶段:检测⇒对齐⇒表达⇒分类。
其中,特征提取与度量,是人脸识别问题中的关键问题,也是相关研究的难点之一。人脸对齐同样是难以解决的问题,特别是在无约束的环境下。
文章目录
前言
1.传统人脸识别的缺点
传统人脸识别方法,主要利用了手工特征对面部信息进行归纳提取,将人脸图像变换到新的空间进行辨识比对。
而实际场景中人脸的多样性(妆容、光照、角度、配饰、表情、年龄变化等)信息,导致了手工特征无法稳健地获取人脸识别的特征。
对此,传统方法的解决方案多为对图像进行预处理,包括去噪、白平衡、人脸对齐等等,但由于特征的表达能力较弱,因此性能较为受限。
2.人脸识别在深度学习中是一个什么问题?
首先,CNN的经典模型,如Resnet,VGG等,是一个典型的分类模型。
例如,手写数字识别问题中,共60000张训练图像,和10个类别。
用这些图像,将模型训练为一个十分类的问题。
然而,这种模型适合用于人脸识别吗?
3.人脸识别在分类问题中的局限性
在实际场景中,人脸识别往往不能作为一个分类问题看待。
其中主要原因是,我们很难为每个人都采集足够多的训练图像作为训练
而且,即便我们为每个人都采集了大量的训练图像,也很难训练一个大规模的分类模型–因为类别太多了,特征空间太拥挤。
以CelebA为例,该数据集和mnist的对比如下
可以看到这里CelebA数据中有10177个类别,且最小的类别图像数据和最大类别图像数据相差过大。
显然,这样的数据集我们不能够用分类模型训练一个分类器。
4.人脸识别过程注重的关键因素
在人脸检测环节中,我们主要关注检测率、漏检率、误检率三个指标,其中:
检测率:存在人脸并且被检测出的图像在所有存在人脸图像中的比例;
漏检率:存在人脸但是没有检测出的图像在所有存在人脸图像中的比例;
误检率:不存在人脸但是检测出存在人脸的图像在所有不存在人脸图像中的比例。
检测速度:如果投入使用但过于耗时他也就失去了原本开发的意义
5.人脸识别过程的应用场景
在人脸识别环节,其应用场景一般分为1:1和1:N。
1:1就是判断两张照片是否为同一个人,通常应用在人证匹配上,例如身份证与实时抓拍照是否为同一个人,常见于各种营业厅以及后面介绍的1:N场景中的注册环节。而1:N应用场景,则是首先执行注册环节,给定N个输入包括人脸照片以及其ID标识,再执行识别环节,给定人脸照片作为输入,输出则是注册环节中的某个ID标识或者不在注册照片中。可见,从概率角度上来看,前者相对简单许多,且由于证件照通常与当下照片年代间隔时间不定,所以通常我们设定的相似度阈值都是比较低的,以此获得比较好的通过率,容忍稍高的误识别率。
而后者1:N,随着N的变大误识别率会升高,识别时间也会增长,所以相似度阈值通常都设定得较高,通过率会下降。这里简单解释下上面的几个名词:误识别率就是照片其实是A的却识别为B的比率;通过率就是照片确实是A的,但可能每5张A的照片才能识别出4张是A其通过率就为80%;相似度阈值是因为对特征值进行分类是概率行为,除非输入的两张照片其实是同一个文件,否则任何两张照片之间都有一个相似度,设定好相似度阈值后唯有两张照片的相似度超过阈值,才认为是同一个人。所以,单纯的评价某个人脸识别算法的准确率没有意义,我们最需要弄清楚的是误识别率小于某个值时(例如0.1%)的通过率。不管1:1还是1:N,其底层技术是相同的,只是难度不同而已。
据此的问题在于:在无法充分训练CNN的前提下,如何利用它得到一个精确的特征提取器?
这里有2014年的deepface深度学习来做出了一个新的突破
人脸识别在深度学习中的第一个里程碑DeepFace
DeepFace是Facebook CVPR2014年发表,主要用于人脸验证,是深度学习人脸识别的奠基之作,超过了非深度学习方法Tom-vs-Pete classifiers、high-dim LBP、TL Joint Bayesian等
1.DeepFace主要思想
3D人脸对齐:采用显式的3D人脸建模并应用分段仿射变换,并实现人脸正面化。
人脸表示(人脸识别):利用9层深度神经网络导出人脸表示,还使用了3个无权重共享的局部连接层。人脸表示特征向量是4096维,Softmax分类。开了先例,后面再也不用LBP了。
人脸验证:无监督(两个向量的内积);有监督(卡方相似度或孪生网络)。
将基于模型的精确对齐与大型人脸数据库相结合的学习表示方法可以很好地推广到无约束环境下的人脸。在人脸数据集Facebook的SFC 上训练网络模型。LFW达到97.35%的准确度,YTF上91.4%,将当前技术水平的误差减少了27%以上,接近人类水平的表现。
2.人脸对齐
人脸对齐仍然被认为是难以解决的问题,特别是在无约束的环境下
DeepFace是将检测的人脸投射到3维模型上,再对齐到正脸。这个方法比较复杂,后面不用它也能取得很好的效果。
对齐的步骤是:找6个landmarks–>进行2D对齐–>重新找6个landmarks–>重新进行2D对齐……直到收敛–>找67个landmarks–>3D-2D映射建模–>逐段仿射变换变成正脸。
- (a)检测人脸及检测6个初始基准点:由训练有素支持向量回归器(Support Vector Regressor)+LBP 来检测剪切块内的6个基准点,其中眼睛中心2个,鼻尖1个和嘴部位置 3个。
- (b)2D对齐的剪切块:6个基准点用于通过缩放、旋转和平移将图像转换成6个锚点位置,然后在新的warped图像上迭代直到没有显著变化,最终构成2D相似性变换,生成了2D对齐的剪切块。然而,相似变换不能补偿平面外旋转,这在无约束条件下尤为重要。
- ©在2D剪切块上定位67个基准点并做相应的Delaunay三角剖分:为了对齐经平面外旋转的人脸,使用通用的3D形状模型并注册3D仿射相机,相机用于将2D剪切曲线扭曲到3D形状的图像平面。使用第二个SVR在2D对齐的剪切块中定位另外的67个基准点。在轮廓上添加了三角形以避免不连续。
- (d)将三角化后的人脸转换成3D形状:手动在3D参考形状(USF Human-ID数据库的3D扫描的平均值)上放置67个锚点,并且以这种方式实现基准点与3D参考点之间的完全对应。
- (e)相对于拟合的3D-2D相机的三角形可视图:然后使用广义最小二乘解和一个已知协方差矩阵Σ来拟合一个仿射3D到2D的相机P,大小为2×4的仿射相机P由8个未知数的向量P->表示。较暗的三角形能见度低。
- (f)分段仿射变换:最后的正面化是通过由67个基准点衍生的Delaunay三角剖分引导的分段仿射变换(piece-wise affinewarping)实现的
- (g)最终的正面化的剪切块
3.模型结构
该工作具有典型的早期CNN的研究风格,采用分类的思路来训练模型 使用的数据集为SFC(social face
classification),共440万张图像,4030个类别,每个人都有800至1200张图像。
这样的数据集足够训练一个CNN模型(一百万级参数)
通过一个大型的深层网络学习面部图像的一般表示(Representation)。将DNN训练成一个多分类的人脸识别任务,即对人脸图像的身份进行分类。
- 3D对齐后的152x152像素的3通道RGB人脸图像被送入具有32个11×11×3的滤波器的卷积层(C1)。
- 然后将得到的32个特征图馈送到最大池化层(M2),对3×3空间邻域最大池化,步幅为2, 每个通道分别执行。
- M2之后是具有16个9×9×32的滤波器卷积层(C3)。
- 局部连接层(locally connected layers)(L4, L5和L6)应用类似卷积层的滤波器组,但是特征图中的每个位置都学习不同的滤波器组,Local的意思是卷积核的参数不共享。LCN不同于卷积层,LCN每个点的卷积核都不一样。
这是因为对齐图像的不同区域具有不同的局部统计特征,卷积的局部稳定性假设并不存在,所以使用相同的卷积核会导致信息的丢失。局部连接层的使用不会影响特征提取的计算负担,但会影响需要训练的参数数量。 - F7和F8是全连接,能够捕获在人脸图像特征之间的较远部分的相关性,例如,眼睛的位置和形状以及嘴的位置和形状。
- F7的输出将用作原始人脸表示特征向量,4096维。
这与基于lbp的表示形成了对比,它通常汇集非常局部的描述符(通过计算直方图),并将其用作分类器的输入。
7.F8上人脸表示被送到了 K-way Softmax 来产生在类别标签上的概率分布,用于分类。4030维,是因为SFC训练数据集有4030个人,每个人具有800到1200张人脸图片.
训练的目标是最大限度地提高正确类别(人脸id)的概率。最小化每个训练样本的交叉熵损失来实现,并使用随机梯度下降(SGD)更新参数,使各参数的损失最小化。使用了ReLU激活。
只对第一个全连接层应用了dropout,由于训练集较大,我们在训练过程中没有观察到明显的过拟合。
7. 人脸表示归一化:将人脸表示特征归一化为0到1之间,以降低对