人脸验证,是指将一张人脸图像与数据库中已存的另一张人脸图像比对的过程,回答“是”或“不是”的问题,这是人脸识别问题中的其中一类:确认(verification);另一类是辨认(identification),是指人脸图像与数据库中已存的所有图像匹配的过程,回答“你是谁”的问题。其中,这两类问题都要经历人脸检测(face detection)、特征提取(feature extraction)和特征识别(face recognition)3个过程,只是在第三个过程中有所差异,验证是1∶1的特征比对,而识别是1∶n的特征比对。因此,人脸验证的问题可以看做是特征提取之后进行1∶1特征比对,然后根据相似度判断“是”或“不是”给出答案的过程。在这个过程中,提取的特征的好坏是影响后续环节的关键因素。
早期的人脸特征提取算法主要是通过特征模板和几何约束来实现的,即通过提取出眼睛、鼻子和嘴角等面部特征和外观轮廓,计算这些面部特征之间的几何关系,如距离、面积和角度等。这类算法的特征直观、计算量小,但容易受到光照、遮挡和表情变化等影响,实践证明无法在实际中应用。之后,在20世纪90年代,以“Eigenface”为代表的子空间分析法在人脸识别领域占了半壁江山,衍生出Fisherfaces,Laplacianfaces以及2D PCA,2D LDA等不计其数的子空间分析方法。这些方法直接采用人脸图像中所有像素的颜色或亮度值作为初始特征,然后对它们进行“变换”得到更具区分力的人脸表示。这类方法假设存在一个最优的投影子空间。这个子空间的每个区域对应唯一的一个人。然而,事实上在人脸空间中许多人经常会映射到相同的区域中,因此这种假设并不成立。2000年之后,涌现出很多对邻域像素亮度或颜色值进行局部特征提取的方法,其中既包括在图像分类领域取得极大成功的SIFT、HOG等局部特征,也包括尤其适用于人脸分析的LBP和Gabor特征。这类方法的共同特点是汇聚局部邻域像素团的亮度值形成局部特征,再采用子空间分析等方法对局部特征进行特征变换。这类方法在人脸识别领域最真实的3个数据库——FERET、FRGC V2.0和LFW上均取得很高的性能。例如,在美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)发布的FERET和FRGC V2.0上,性能最优的方法包括中科院计算所视觉信息处理与学习(Visual Information Processing and Learning,VIPL)研究组提出的局部Gabor幅相融合二值特征,并配合特征判别分析的方法。再如,在LFW数据集上,在允许利用有标签外部数据且非限定的测试条件下,性能最好的方法之一为微软亚洲研究院提出的关键特征点上的高维LBP特征,并配合稀疏回归判别特征提取的方法。在上述测试条件下,该方法取得了95.17%的平均分类精度。
随着深度学习和大数据技术的不断发展,在2014年国际计算机视觉与模式识别会议(Conference on Computer Vision and Pattern Recognition 2014,CVPR 2014)上,两个采用深度学习的团队——来自Facebook团队和香港中文大学的团队,在允许利用有标签外部数据且非限定的测试条件下,分别报告了97.35%和97.45%的平均分类精度,比前述高维LBP特征方法的分类错误率降低了50%。上述两个团队均采用了卷积神经网络(Convolutional Neural Network,CNN)的变种架构。自此,人脸识别的准确率一路飙升,来自香港中文大学的DeepID系人脸识别将LFW数据集上的准确率刷到了99.47%。他们的系统和方案能够取得优异性能是由于深度学习模型提取的特征具有高度的非线性,使得人脸比传统的低维特征能够更好的表达,另一个重要原因则是采用了大规模的标注人脸数据进行训练,而且其训练图像的分布与LFW测试图像有一定的相似性。由此看来,人脸识别领域的应用拥有相当大的发展潜力。而人脸验证作为其中的一类相对比较容易的问题可以用于诸如面向银行支付、公共交通机场车站等地方的人脸验证。下面我们将结合近两年深度学习的发展情况,将深度学习应用于人脸验证的方法做详细介绍。
如果将每个人的人脸看作是一个类别的话,那么人脸识别也可以看作是一个分类问题。上面曾提到,深度学习之所以能够取得突破性进展,很大程度上得益于训练模型数据的爆炸式增长。而人脸数据由于涉及个人隐私,往往很难收集到大量的样本进行训练,和其他分类任务不同的是,人脸的样本数据多呈现类别多而样本少的问题,这也是制约深度学习在人脸识别发展的一个重要问题。除此之外,处于不同场景下得到的人脸,呈现的分布也不尽一致,因此,在现实应用中,为了满足不同的需求,往往需要根据不同的场景训练不同的模型,这将花费更多的时间和精力去收集不同场景下的人脸数据。况且,人脸验证在提取人脸特征之后还需要通过一个相似度(或距离)函数去判别是否是同一个人,如何选择更优的相似度(或距离)也是一个难题,下面我们将一一解释这类问题的解决方案。
1)人脸特征提取的基础模型
首先介绍两种分类模型作为人脸特征提取的基础模型,也就是大家比较常用的VGG和Resnet模型,它们分别是2014年和2015年ImageNet分类任务竞赛的冠军。其模型参数结构分别如图5-5和图5-6所示。
VGG继承了LeNet以及Alexnet的一些框架,尤其是跟Alexnet框架非常相似,也有5组卷积层、2个全连接层图像特征、1个全连接分类特征,可以看做和Alexnet一样总共8个部分。根据前5个卷积group,每个group中的不同配置,VGG论文中给出了A~E这5种配置,卷积层数从8到16递增。相比Alexnet模型,VGG这类更深层的网络结构,其准确率有非常大的提升。
Resnet(深度残差网络)是根据VGG网络理论(图5-7(a)),设计一个平原网络(图5-7(b)),其卷积层主要有3×3的过滤器并遵循两个简单的设计规则:①对于相同的输出特征映射大小,图层有相同数量的滤波器;②如果特征映射的大小被减半,过滤器的数量增加一倍,以保持每层的时间复杂度。我们通过有一个跨度为2的卷积层,直接进行下采样。网络以一个全局平均池层和有着最温和的1 000路全连接层结尾。图5-7(b)中加权层的总数是34。值得注意的是,这个模型比VGG网络(图5-7(a))有着更少的过滤器和更低的复杂度。34层基线有3.6亿个触发器(乘加),是VGG-19的18%(19.6亿触发器)。
图5-5 VGG-net模型参数结构
图5-6 Resnet模型参数结构
基于上面的平原网络,插入快捷连接(图5-7(c)),将网络转变成其对应的残差版本。当输入/输出大小相同的时候(实线的捷径在图5-7),快捷连接(式(5-1))可以直接使用。当尺寸增加时(虚线的捷径在图5-7),则考虑两个选项:①快捷方式仍然执行身份映射,用额外的零条目填充以便增加尺寸。该选项不会引入额外的参数;②式(5-2)中的投影捷径,用于匹配尺寸(完成1×1卷积)。当快捷键以两个选项在功能地图上进行时,这两个选项进行了2跨度。
图5-7 三种深度学习网络结构
最近,排序学习(learning to rank)的思想逐渐被应用到很多领域,比如人脸识别、person-reid等。在上文中曾提到,人脸验证最后一个步骤是通过相似度来判断待验证的人是否是同一个人,由此找到一个好的相似度函数是很重要的一个步骤,Triplet loss是用得非常广泛的一种。它是基于度量学习的误差函数,其目的是通过学习,最小化目标和其同类之间的距离,最大化目标和异类之间距离,如图5-8所示。
图5-8 排序学习
Triplet是一个三元组,如图5-9所示,这个三元组是这样构成的:从训练数据集中随机选一个样本,该样本称为Anchor,然后再随机各选取一个和Anchor(记为xa)属于同一类的样本和不同类的样本,这两个样本称为Positive(记为xp)和Negative(记为xn),由此构成一个(Anchor,Positive,Negative)三元组。
图5-9 Tripletloss学习示意图(www.xing528.com)
有了上面的Triplet的概念,Tripletloss就好理解了。针对三元组中的每个元素(样本),训练一个参数共享或者不共享的网络,得到三个元素的特征表达,分别记为:f(xa),f(xp),f(xn)。Tripletloss的目的就是通过学习,让xa和xp的特征表达之间的距离尽可能小,而xa和xn的特征表达之间的距离尽可能大,并且要让xa与xn之间的距离和xa与xp之间的距离之间有一个最小的间隔alfa。公式化的表示就是:
式中xai表示参考样本,xpi表示同类样本,xni表示异类样本,a表示特定阈值。该不等式本质上定义了同类样本和异类样本之间的距离关系,即所有同类样本之间的距离加上阈值a要小于与异类样本之间的距离。当距离关系不满足上述不等式时,可通过求解下列误差函数,通过反向传播算法来调节整个网络:
从式(5-4)可以看出只有括号内公式的值大于0时才计算误差。利用该公式可分别计算出xai,xpi,xni的梯度方向,并根据反向传播算法调节前面的网络使得网络模型提取的特征能够更好地区分同类和异类。Tripletloss距离学习的具体应用流程如图5-10所示。
图5-10 CNN+Tripletloss模型
图5-10中 的DEEP ARCHITECTURE可以是上述所提到的VGG,ResNet或GoogleNet等其他模型。通过深度学习的网络结构和Tripletloss相结合的方法可以有效地提升人脸验证的精度,这里利用VGG,ResNet模型和Tripletloss相结合的方式进行了实验。
2)模型训练
有了基础网络模型结构,就可以搭建人脸特征提取的模型框架进行训练,根据上述所介绍的两个模型预处理训练样本。这里输入的训练图像均为224×224的RGB图像,且需要减去每个像素的平均值,为了增加样本的多样性,也可以设置图像进行水平翻转,图5-11是部分训练和测试样本。为了使训练的模型尽快收敛,采用预训练模型初始化网络参数的方法被证明是非常有效的。因此,可以先在ImageNet数据集上预训练一个模型,然后在此基础上进行参数的重调整。分别采用了VGG16(图5-5中的D模型)和ResNet50(图5-6中的50-layer)的模型进行训练。其中VGG模型采用的batchsize为64,基础学习率为0.005;由于ResNet模型需要消耗较大的内存,因此需要根据自己的显卡配置,设置合理的batchsize(28for TitanX)。
图5-11 测试样本
基础模型训练好之后,根据图5-10,在模型的后端接入L2归一化和Tripletloss模块去重新调整这个模型,通过式(5-4)的优化使得模型提取的特征满足式(5-3)的要求。在这个过程中,选择合适的三元组(xa,xp,xn)是Tripletloss学习的关键,如果选择特征距离较远的负样本作为xn,那么可能导致局部快速收敛而达不到目的。所以,这里设置一个边界阈值a作为选择负样本的参考,如图5-12所示,选择当样本之间距离在边界范围之内的作为负样本。这个过程的训练一般采用固定的学习率。
图5-12 三元组选择示意图
3)测试效果
由于人脸验证需要一个阈值来判断“是”或“不是”,如何设置合理的阈值来评价模型的优劣呢?我们引入ROC曲线来评价这类问题。ROC曲线源于“二战”中用于敌机检测的雷达信号分析技术,常被用于心理学、医学检测应用中,此后被引入机器学习领域。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值,分别以它们的横纵坐标画图,就得到了ROC曲线。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。在比较不同的分类模型时,可以将每个模型的ROC曲线都画出来,比较曲线下的面积作为模型优劣的指标。
图5-13 人脸验证在4种模型下的ROC曲线
图5-13是4种模型在人脸验证任务中采用同一批测试数据得到的ROC曲线图。相比基础网络模型,在网络中接入Tripletloss距离学习的模型提取的特征能明显提升人脸验证的准确率。在False Positive和True Positive相等的情况下,两者的准确率分别为94%和93.7%,不分伯仲。
在速度方面,采用VGG模型作为基础网络的耗时会比ResNet50的多,在普通CPU的电脑中运行,运行一次比对的时间约为1s。因为ResNet加入了快捷连接的方式,其在相同配置下时间约为550ms。但是ResNet网络的在训练模型时的内存开销比较大,需要较大的显存去支持模型的训练。读者可以根据情况合理选择不同的模型。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。