论文阅读笔记:Deep Face Recognition: A Survey
论文阅读笔记:Deep Face Recognition: A Survey
- 1 介绍
- 2 总览
- 2.1 人脸识别组件
- 2.1.1 人脸处理
- 2.1.2 深度特征提取
- 2.1.3 基于深度特征的人脸对比
- 3 网络结构和损失函数
- 3.1 判别损失函数的演化
- 3.1.1 基于欧式距离的损失
- 3.1.2 基于角度/余弦边距的损失
- 3.1.3 Softmax损失及其变种
- 3.2 网络结构的演化
- 3.2.1 主干网络
- 3.2.1.1 轻量级网络
- 3.2.1.2 自适应架构网络
- 3.2.1.3 联合对齐识别网络
- 3.2.2 集成网络
- 3.2.2.1 多输入网络
- 3.2.2.2 多任务网络
- 3.3 通过深度特征来人脸匹配
- 3.3.1 人脸验证
- 3.3.2 人脸识别
- 4 用于训练和识别的人脸处理
- 4.1 一对多增广
- 4.1.1 数据增广
- 4.1.2 3D模型
- 4.1.3 自编码器模型
- 4.1.4 GAN模型
- 4.2 多对一归一化
- 4.2.1 自编码器模型
- 4.2.2 CNN模型
- 4.2.3 GAN模型
论文阅读笔记
1 介绍
人脸识别( Face Recognition,FR )是一种重要的生物特征识别技术,在军事、金融、公共安全和日常生活等领域有着广泛的应用。FR一直是CVPR界长期存在的研究课题。20世纪90年代初,随着历史特征脸方法的提出,FR研究开始流行。图1展示了基于特征的人脸识别在过去几年的里程碑,其中突出了四个主要技术流的时间。整体方法通过一定的分布假设得到人脸特征的低维表示,如线性子空间,流形,稀疏表示等。这一思想在20世纪90年代和21世纪初主导了人脸识别技术。然而,一个众所周知的问题是,这些理论无法处理不受控制的面部变化。在21世纪初,为了解决这个问题,产生了基于局部特征的人脸识别,通过局部滤波的一些不变特性实现了鲁棒性能。不幸的是,手工制作的特征缺乏独特性和紧凑性。在2010年早起,基于学习的局部描述符被引入到人脸识别中,其中局部滤波器被学习以获得更好的区分性,编码码本被学习以获得更好地紧凑性。然而,这些浅层表示对于复杂的非线性面部外观变化,仍然具有不可避免的鲁棒性限制。

一般来说,传统的方法试图通过一两层的表示来识别人脸,例如过滤响应,特征码的直方图或字典原子的分布,研究界对预处理、局部描述符和特征变换分别进行了大量的研究,但这些方法对人脸识别精度的提高缓慢。更糟糕的是,大多数方法只针对无约束面部变化的某一方面,如光照,姿势,表情或伪装。没有任何集成的技术来完整的解决这些无约束的挑战。因此,经过十多年的不懈努力,浅层方法仅将LFW基线的准确率提高到95%左右,这表明浅层方法不足以提取对现实世界变化具有不变性的稳定身份特征。由于这项技术的不足,在现实应用中,人脸识别系统通常性能不稳定或有无数误报的故障。
但这一些在2012年发生了变化,AlexNet使用一种名为深度学习的技术大幅度地赢得了ImageNet的竞争。深度学习方法,如卷积神经网络,使用多层处理单元的级联来进行特征提取和转换,他们学习对应于不同抽象层次的多个层次的表示。层次之间形成概念的层次结构,对人脸姿态、光照、表情变化表现出很强的不变性,如图2所示。从图中可以看出,深度神经网络的第一层与具有多年经验的人类科学家发现的Gabor特征有一定的相似性。第二层学习更复杂的纹理特征。第三层的特征较为复杂,一些简单的结构已经出现,如高鼻梁,大眼睛等。第四,网络输出足以解释某种面部属性,可以对一些明确的抽象概念如微笑、吼叫,甚至蓝眼睛等做出特殊的反应。综上所述,在深度卷积神经网络中,低层自动学习类似Gabor和SIFT设计多年甚至几十年的特征,高层进一步学习更高层次的抽象。最后,这些更高层次的抽象的结合代表了具有前所未有的稳定性和面孔身份。

2014年,DeepFace在著名的LFW基线上测试达到了SOTA精度,通过在400万上人脸图像上训练一个9层模型,首次接近人类在无约束条件下的表现(DeepFae 97.35% vs 人类 97.53%)。收到这项工作的启发,研究重点转向了基于深度学习的方法,并且在短短三年内,准备率大幅度提升至99.8%以上,深度学习技术在算法设计、训练、测试数据集、应用场景甚至评估等几乎所有方面重塑了研究图景。因此,回顾近年来的突破和快速发展历程具有重要意义。已经有一些关于人脸识别及其子领域的研究,他们主要总结和比较了一系列与特定FR场景相关的技术,如光照不变,姿态不变FR 。不幸的是,由于它们的出版日期较早,没有一个涵盖了目前最成功的深度学习方法。这项调查只关注识别问题,可以参考Ranjan等人对具有检测和对齐的全深度FR管道的简要回顾,或参考Jin等人对人脸对齐的调查。具体来说,这项调查的主要贡献是:
-
对深度FR的网络结构和损失函数的烟花进行了系统综述。各种损失函数氛围基于欧氏距离的损失,基于角度/余弦边距的损失和softmax损失及其变体。即涵盖了主流的网络架构,如Deepface,DeepID系列,VGGFace,FaceNet和VGGFace2等。也涵盖了其他为FR设计的框架。
-
本文将基于深度学习的新的人脸处理方法,分为“一对多增强”和“多对一归一化”两类,并讨论了新兴的生成对抗网络如何促进深度FR。
-
本文对公开数据集进行了比较和分析,这些数据库对模型训练和测试都至关重要。对LFW,IJB-A/B/C,Megaface,MSCeleb-1M等主要的FR基准从训练方法,评估任务与指标、识别场景4个方面进行了综述和比较,为深度FR的训练和测试提供了有益的参考。
-
除了主要数据集定义的通用任务,本文总结了十几个场景特定的数据集和深度学习仍然具有挑战性的解决方案,例如抗攻击,交叉姿态FR和跨年龄FR。通过回顾针对这些尚未解决的问题而专门设计的方法,作者试图揭示未来深度FR研究的重要问题,如对抗样本,算法/数据偏差、模型可解释性等。
2 总览
2.1 人脸识别组件

FR系统需要三个模块,如图3所示。首先,使用人脸检测器定位图像或视频中的人脸。其次,通过人脸特征点检测器,对人脸对齐到归一化坐标。第三,利用这些对其后的人脸图像实现FR模块。本文只关注FR模块。
在将人脸输入到FR模块之前,使用识别人脸是活体还是伪造人脸的反欺骗检测,可以避免不同类型的攻击。然后进行识别。如图3©所示,一个FR模块由人脸处理,深度特征提取和人脸匹配组成,可以描述如下:

其中 I i I_i Ii 和 I j I_j Ij 分别是两幅人脸图像。 P P P 表示面孔加工,在训练和测试之前处理个体内的变化,例如姿势,光照,表情和遮挡。 F F F 表示特征提取,对身份信息进行编码。该特征提取器在训练时通过损失函数进行学习,在测试时用于提取人脸的特征。 M M M 表示一种人脸匹配算法,用于计算特征的相似度分数,以确定人脸的特点身份。与物体分类不同,FR中测试身份通常与训练数据不相交,这使得学习到的分类器不能用于测试人脸。因此,人脸匹配算法是FR中必不可少的一部分。
2.1.1 人脸处理

尽管基于深度学习的方法已经得到了广泛的应用,但有论文实验证明了如姿势,光照,表情和遮挡等各种条件下,依然会影响深度FR的性能。因此,引入了人脸处理来解决这个问题。人脸处理方法分为“一对多增强”和“多对一归一化”,如表I所示。
-
一对多增强方法:这些方法从单张图像中生成许多姿态变化的块或图像以使深度网络能够学习姿态不变的表示。
-
多对一归一化方法:这些方法从非正面视角的一副或多幅图像中回复人脸的规范视图,然后FR可以像再受控条件下一样执行。
值得注意的是,由于姿态被广泛认为是自动FR应用中的主要挑战,而其他方法可以通过类似的方法来解决,因此本文主要针对姿态变化设计的深度人脸处理方法。
2.1.2 深度特征提取
网络结构方面如表II所示,深度网络结构可分为骨干网络和组装网络。受到ImageNet挑战上非凡成功的启发,典型的CNN架构,例如AlexNet,VGGNet,GoogleNet,ResNet和SENet被引入并广泛作为FR中的基线模型。除主流网络外,一些组合网络,如多任务网络和多输入网络,也被应用到FR中。研究表明,与单个网络相比,累积组装网络的结果可以提高性能。

损失函数方面如表III所示,Softmax损失是物体识别中常用的监督信号,它鼓励了特征的可分性。然而,softmax损失对于FR来说是不够有效的,因为在识别不同的人时,类内差异可能比类间差异还大,并且需要更具有区分性的特征。许多工作致力于创建新的损失函数,以使特征不仅更加可分,而且具有判别性。

2.1.3 基于深度特征的人脸对比
FR可以分为人脸验证和人脸识别。在这两个场景中,一组已知的受试者最初被纳入系统图库,在测试期间,一个新的受试者被呈现。在合适的损失函数的监督下,深度网络在海量数据上进行训练后,将每张测试图像通过网络得到深度特征表示,利用余弦距离或L2距离,人脸验证通过计算测试人脸和图库中所有人脸的一对一相似度来判断两幅图像是否为同一主体,而人脸识别通过计算一对多的相似度来判断测试人脸的身份。除此之外,还引入了其他方法对深度特征进行后处理,以便高效准确地进行人脸匹配,如度量学习、基于稀疏表示的分类器(SRC)等。
人脸验证就是回答“你是不是某人”的问题,例如手机人脸解锁功能,而人脸识别就是回答“你是谁”的问题,例如门禁。
综上,作者在图4中介绍了FR模块及常用的方法。

3 网络结构和损失函数
对于大多数应用来说,在训练阶段很难包含候选人脸,这使得FR成为了一个零样本的学习任务。幸运的是,由于所有的人脸都具有相似的形状和问题,因此从一小部分人脸中学习到的表示可以很好的概括其余的人脸。基于该理论,提高泛化性的直接方法是在训练集中包含尽可能多的ID。例如,Facebook和Google等互联网巨头已经报道了他们的深度FR系统由 1 0 6 10^6 106 ~ 1 0 7 10^7 107 个ID训练。
不幸的是,这些个人数据集,以及用于分布式模型训练的先决GPU集群都无法被学术界访问,目前用于学术研究的公开训练数据集只有 1 0 3 10^3 103 ~ 1 0 5 10^5 105 个ID。相反,学术界致力于设计有效的损失函数,并采用有效的架构,利用相对于较小的训练集使深度特征更具判别性。例如表IV所示,在过去的四年中,大多数SOTA的LFW基线精度已经从97%提高到99.8%以上。在这一部分中,作者总结了对深度FR方法有显著改进的不同损失函数和网络结构的研究工作。

3.1 判别损失函数的演化
最初的Deepface和DeepID继承了AlexNet等对象分类网络,采用基于交叉熵的softmax损失进行特征学习。在此之后,人们意识到softmax损失本身不足以学习到具有判别性的特征,更多的研究者开始探索新的损失函数以增强泛化能力。这成为深度FR研究中的热门研究课题,如图5所示。在2017年之前,基于欧氏距离的损失发挥了重要作用;2017年,基于角度/余弦边距的损失以及特征和权重会议华变得流形。值得注意的是,尽管一些损失函数具有相似的基本思想,但新的损失函数通常是通过更简单的参数或样本选择来设计的,以方便训练过程。

3.1.1 基于欧式距离的损失
基于欧式距离的损失是一种度量学习方法,它将图像嵌入到欧式空间中,在欧式空间中,内插减少,互方差增大。对比损失和Triplet损失是最常用的损失函数。对比损失需要人脸图像对,然后拉拢正对并推开负对。

其中 y i j = 1 y_{ij}=1 yij=1 意味着 x i x_i xi 和 x j x_j xj 是匹配样本, y i j = 0 y_{ij}=0 yij=0 意味着他们是非匹配样本。 f ( ⋅ ) f(·) f(⋅)是特征嵌入, ϵ + \epsilon^+ ϵ+ 和 ϵ − \epsilon^- ϵ− 分别控制匹配和非匹配对的边界。DeepID2结合了人脸识别(softmax)和验证(Contrastive loss)监督信号来学习判别表示,并应用联合贝叶斯来获得鲁棒的嵌入空间。DeepID2+在DeepID2的基础上进行了扩展,增加了隐藏表示的维度,并在早起的卷积层中加入了监督。DeepID3进一步将VGGNet和GoogleNet引入其工作中。然而,对比损失存在的主要问题是margin参数难以选择。
与考虑匹配和非匹配对的绝对距离的对比损失不同,Triplet损失考虑匹配对和非匹配对之间距离的相对差异。随着Google提出的FaceNet,Triplet损失被引入到FR中。他需要人脸三元组,然后最小化锚点与同一身份的正样本之间的距离,最大化锚点与不同身份的负样本之间的距离。FaceNet使用硬三元组人脸使 ∣ ∣ f ( x i a ) − f ( x i p ) ∣ ∣ 2 2 + α < − ∣ ∣ f ( x i a ) − f ( x i n ) ) ∣ ∣ 2 2 ||f(x_i^a)-f(x_i^p)||^2_2 + \alpha <-||f(x_i^a)-f(x_i^n))||_2^2 ∣∣f(xia)−f(xip)∣∣22+α<−∣∣f(xia)−f(xin))∣∣22,其中 x i a x_i^a xia, x i p x_i^p xip 和 x i n x_i^n xin 分别表示锚点,正样本和负样本, α \alpha α 为间隔, f ( ⋅ ) f(·) f(⋅) 表示图像嵌入到特征空间的非线性变换。受到FaceNet的启发,TPE和TSE学习了一个线性投影 W W W 来构造Triplet损失。其他方法使用Triplet损失和softmax损失来优化深度模型。他们首先用softmax训练网络,然后用Triplet损失来对网络进行微调。
然而,对比损失和Triplet损失由于需要选取有效的训练样本,偶尔会遇到训练不稳定的情况,一些文献开始探索简单的替代方案。中心损失及其变体是减少类内方差的良好选择。中心损失为每个类学习一个中心,并惩罚深度特征与其对应的类中心之间的距离,这种损失可以定义如下:

其中 x i x_i xi 表示属于第 y i y_i yi 类的第 i i i 个特征, c y i c_{y_i} cyi 表示深度特征的第 y i y_i yi 类的中心。为了处理长尾数据,使用一个范围损失,它是中心损失的变体,用于最小化一个类别中 k k k 个最大范围的调和平均值,并最大化一个批次内的最短类间距离。
3.1.2 基于角度/余弦边距的损失
2017年,人们对深度FR中的损失函数有了更深入的认识,认为应该更加严格地对样本进行分离,避免对困难样本进行错误分类。基于角度/余弦边距的损失被提出,以使学习到的特征具有更大的角度/余弦距离的潜在可分性。softmax损失中的决策边界为 ( W 1 − W 2 ) x + b 1 − b 2 = 0 (W_1-W_2)x+b_1-b_2=0 (W1−W2)x+b1−b2=0,其中 x x x 为特征向量, W i W_i Wi 和 b i b_i bi 分别为softmax损失中的权重和偏置。
将原始的softmax损失重新定义为大间隔的softmax(L-Softmax)损失,并约束 b 1 = b 2 = 0 b_1=b_2=0 b1=b2=0,于是,第1类和第2类的决策边界分别变为 ∣ ∣ x ∣ ∣ ( ∣ ∣ W 1 ∣ ∣ c o s ( m θ 1 ) − ∣ ∣ W 2 ∣ ∣ c o s ( θ 2 ) ) = 0 ||x||(||W_1||cos(m\theta_1)-||W_2||cos(\theta_2))=0 ∣∣x∣∣(∣∣W1∣∣cos(mθ1)−∣∣W2∣∣cos(θ2))=0 和 ∣ ∣ x ∣ ∣ ( ∣ ∣ W 1 ∣ ∣ ∣ ∣ W 2 ∣ ∣ c o s ( θ 1 ) − c o s ( m θ 2 ) ) = 0 ||x||(||W_1||||W_2||cos(\theta_1)-cos(m\theta_2))=0 ∣∣x∣∣(∣∣W1∣∣∣∣W2∣∣cos(θ1)−cos(mθ2))=0,其中 m m m 为引入的角度边距正整数, θ i \theta_i θi 为 W i W_i Wi 和 x x x 的夹角。由于余弦函数的非单调性,在大边距损失中应用了分段函数来保证单调性,其损失函数定义如下:

考虑到L-Softmax很难收敛,因此将其与softmax损失想结合,以促进和保证收敛。因此,损失函数变为: f y i = λ ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ c o s ( θ y i ) + ∣ ∣ W y i ∣ ∣ ∣ ∣ x i ∣ ∣ ϕ ( θ y i ) 1 + λ f_{y_i}=\frac{\lambda||W_{y_i}||||x_i||cos(\theta_{y_i})+||W_{y_i}||||x_i||\phi(\theta_{y_i})}{1+\lambda} fyi=1+λλ∣∣Wyi∣∣∣∣xi∣∣cos(θyi)+∣∣Wyi∣∣∣∣xi∣∣ϕ(θyi) ,其中 λ \lambda λ 为动态超参数。A-Softmax loss在L-Softmax的基础上,进一步通过L2范数对权重进行归一化,使得归一化后的向量位于一个超球体上,进而可以在具有角度间隔的超球体流形上学习判别性的人脸特征,如图6。

二分类情况下情况下的决策边界如表V所示。

然而,基于角度/余弦边距的损失容易收到噪声的影响,在高噪声区域变得比中心损失和softmax更差,如图7所示。

3.1.3 Softmax损失及其变种
2017年,除了将softmax损失改写成如上所述的于角度/余弦边距的损失外,还有一些工作尝试将损失函数中的特征和权重进行归一化处理,以提高模型性能:

其中 α \alpha α 是一个缩放参数, x x x 是学习到的特征向量, W W W 是最后一个全连接层的权重。之后,可以用归一化的特征和权重来执行损失函数,例如softmax。
一些文献首先对权重进行归一化,然后将角度/余弦边距加入到损失函数中,以使学习到的特征更具有判别性。
3.2 网络结构的演化
3.2.1 主干网络
常用的深度学习FR架构一直沿袭着分类的网络架构,并从AlexNet快速演变为SENet。本文在图8中按照时间顺序展示了最具影响力的分类和深度人脸识别架构。

2012年,AlexNet被报道在ImageNet大规模视觉识别竞赛2012中取得了SOTA识别准确率,大幅超越了之前的最佳结果。AlexNet由5个卷积层和3个全连接层组成,并集成了多种技术,如修正线性单元(ReLU),Dropout,数据增强等。然后2014年,VGGNet提出了一种标准的网络架构,并在整个过程中使用了非常小的3×3卷积滤波器,并在2×2池化后,将特征图的数量增加一倍。它将网络的深度增加到16-19个权重层,进一步增强了通过深层结构学习渐进非线性映射的灵活性,2015年,22层的GoogleNet引入了一个“Inception”模块与混合特征图的级联,以及两个额外的中间softmax监督信号。它并行地执行若干个具有不同感受野的卷积,并将他们的特征图拼接,以融合多分辨率信息。2016年,ResNet提出让层学习一个参考层输入的残差映射,而不是直接学习一个期望的底层映射,以缓解非常深的网络的训练。作为ILSVRC 2017的冠军,SENet引入了SE模块,通过显式地建模通道之间的相互依赖关系,自适应地重新校准通道特征响应。
随着架构的演化和先进的训练技术,如批次归一化,网络变得更深,训练变得更可控。在遵循这些分类架构的同时,深度FR中的网络也在逐步发展,深度FR的性能也在不断提高。本文在图9中展示了这些主流的深度FR架构。在2014年,DeepFace首次使用了具有几个局部连接层的九层CNN,通过3D对其进行人脸处理,在LFW上达到了97.35的准确率。在2015年,FaceNet使用了一个大型的私有数据集来训练一个GoogleNet。它采用了一种新颖的在线三元组挖掘方法生成的基于粗对齐匹配、非匹配人脸块三元组的Triplet损失,取得了99.63%的良好性能。同年,VGGface设计了一个从互联网上手机大规模数据集的方法,它在该数据集上训练VGGNet,然后通过类似于FaceNet的Triplet损失对网络进行微调。VGGface获得了98.95%的准确率。2017年,SphereFace使用了64层的ResNet架构,并提出了角度Softmax损失来学习具有角度边距的判别性人脸特征,在LFW上取得了99.42%的效果。在2017年底,一个新的大规模人脸数据集,即VGGface2被引入,该数据集包含了姿态,年龄,光照,种族和职业等方面的巨大差异。

3.2.1.1 轻量级网络
使用具有数百层和数百万个参数的更深层神经网络来达到更高的精度是有代价的,需要功能强大的GPU和更大的内存,这使得在移动设备和嵌入式设备上的应用变得不切实际。为了解决这个问题,轻量级网络被提出。Light CNN提出了最大特征映射(MFM)激活函数,将全连接中maxout的概念引入到CNN中。MFM获得了紧凑表示并降低了计算成本。后续提出了基于权重选择策略,从先前学习的稠密模型中迭代地稀疏化深度网络。MobiFace采用了快速下采样和带瓶颈残差块的扩展层,在LFW数据集上取得了99.7%的性能提升。虽然其他轻量级CNN,如SqueezeNet,MobileNet,ShuffleNet和Xception在FR中的应用仍不广泛, 但它们值得更多注意。
3.2.1.2 自适应架构网络
考虑到人工设计架构是一个耗时且容易出错的过程,性能良好的自适应架构网络越来越引起人们的兴趣。例如,每层执行的操作类型(池化,卷积等)与操作相关联的超参数(如滤波器数量,卷积层的核大小和步距长度等)相关联的超参数,根据训练和测试数据的具体要求而定。目前神经架构搜索(NAS)是很有前途的方法之一,它在一些任务上优于手工设计的架构,例如图像分类或语义分割。有研究将NAS技术集成到人脸识别中。他们使用强化学习算法来指导控制器网络训练最优的子架构。除了NAS,还有其他一些探索可以自适应地学习最优架构。例如,条件卷积神经网络(c-CNN)根据样本的模态动态地激活核函数。还有研究提出了一种新的对比卷积,他有一个主干CNN和一个核生成器组成,这得益于它基于被比较的人脸动态的生成对比核。
3.2.1.3 联合对齐识别网络
最近,一个端到端的系统被提出来联合训练FR和几个模块(人脸检测,对齐等)。相比于现有的方法一般根据不同的目标对每个模块分别进行优化,这种端到端的系统根据识别目标对每个模块进行优化,从而为识别模型提供更充足、更鲁棒的输入。例如,受空间转换器的启发,Hayat等人提出了一种基于CNN的数据驱动方法,该方法学习同时注册和表示人脸(图10 ),而Wu等人为CNN设计了一种新颖的递归空间转换器( ReST )模块,允许人脸对齐和识别进行联合优化。

3.2.2 集成网络
3.2.2.1 多输入网络
在"一对多增强"中,为了增强训练数据,从一幅图像中生成多幅具有多样性的图像。将这些多幅图像作为输入,多个网络也被组合在一起,以提取和组合不同类型输入的特征,这可以优于单个网络。通过裁剪不同的人脸块来构建组合网络,然后将不同类型的块输入到不同的子网络中进行表示提取。通过合并子网络的结果,可以提高性能。其他论文使用组合网络来识别不同位姿的图像。例如,Masi等人将姿势调整到正面( 0 ° ),半侧面( 40 ° )和全轮廓法视角( 75 ° ),然后通过组合姿势网络来解决姿势变化。多视图深度网络( Multi-View Deep Network,MvDN ) 由特定视图子网络和公共子网络组成;前者去除视图特定的变化,后者获得共同的表示。
3.2.2.2 多任务网络
FR与姿势、光照、年龄等多种因素交织在一起。为了解决这个问题,引入多任务学习,从其他相关任务中迁移知识,并解耦干扰因素。在多任务网络中,身份分类是主要任务,辅助任务包括姿态、光照和表情估计等。低层在所有任务之间共享,高层被解耦到不同的子网络中,以产生特定任务的输出。任务特定的子网络被分支出来学习人脸检测,人脸对齐,姿态估计,性别识别,微笑检测,年龄估计和FR。Yin等人提出为每个边任务自动分配动态损失权重。Peng等人使用特征重构度量学习将CNN解耦成子网络,用于联合学习身份和非身份特征,如图11所示。

3.3 通过深度特征来人脸匹配
在测试过程中,通常使用余弦距离和L2距离来衡量深度特征x1和x2之间的相似性;然后,使用阈值比较和最近邻( NN )分类器进行决策,以进行验证和识别。除了这些常见的方法,还有一些其他的探索。
3.3.1 人脸验证
度量学习也可用于基于提取的深度特征的人脸匹配,其目的是寻找一种新的度量使两类更加可分。JB 模型是一种著名的度量学习方法,Hu等人证明了它可以大大提高性能。在JB模型中,一个人脸特征 x x x 被建模为 x = μ + ε x = μ + ε x=μ+ε,其中 μ μ μ 和 ε ε ε 分别是身份和个体内变化。相似度得分 r ( x 1 , x 2 ) r( x1 , x2) r(x1,x2) 可以表示如下:

其中, P ( x 1 , x 2 ∣ H I ) P(x_1, x_2 | H_I) P(x1,x2∣HI)为两张面孔属于同一身份的概率, P ( x 1 , x 2 ∣ H E ) P(x_1, x_2|H_E) P(x1,x2∣HE) 为两张面孔属于不同身份的概率。
3.3.2 人脸识别
在计算余弦距离后,Cheng等人提出了一种在相似度分数水平上的启发式投票策略来组合多个CNN模型的结果,并在MSceleb - 1M 2017的Challenge 2中获得了第一名。Yang等人从人脸图像的局部区域提取局部自适应卷积特征,并使用扩展的SRC进行单样本人脸识别。Guo等人结合深度特征和SVM分类器进行识别。Wang等人首先使用乘积量化( Product Quantization,PQ )直接检索topk最相似的人脸,并通过结合深度特征和COTS匹配器对这些人脸进行重排序。此外,当训练集和测试集身份重合时,也可以使用Softmax进行人脸匹配。例如,在MS - celeb - 1M的挑战赛2中,Ding等人训练了一个21000类的softmax分类器,通过条件GAN增强特征后直接识别单样本类和正常类的人脸;Guo等人结合欠表示类提升( UP )损失项训练了softmax分类器,以增强在单样本类别上的性能。
当训练数据分布和测试数据分布相同时,上述人脸匹配方法是有效的。然而,两个数据域之间总是存在分布变化或域偏移,这会降低对测试数据的性能。迁移学习最近被引入到深度FR中来解决域迁移问题。它使用一个标记的源域(训练数据)和一个未标记的目标域(测试数据)来学习可迁移的特征,从而减少领域差异,并且在源域上训练的模型也将在目标域上表现良好。有时,这种技术被应用到人脸匹配中。例如,克罗斯怀特等人和Xiong等人通过将CNN特征与模板特定的线性SVM相结合,对模板中的媒体集合进行模板自适应。但是大多数时候,仅仅在人脸匹配阶段进行迁移学习是不够的。迁移学习应该嵌入到深度模型中,以学习到更多可迁移的表示。Kan等人提出了一种双迁移自编码网络( BAE ),用于跨视角、种族和成像传感器的域适应;而Luo等人利用多核最大均值差异( MMD )来减少域差异。Sohn等人使用对抗学习将知识从静态图像FR迁移到视频FR。此外,使用目标训练数据集从预学习的模型中微调CNN参数是迁移学习的一种特殊类型,并且通常被许多方法所使用。
4 用于训练和识别的人脸处理
按照时间顺序展示了面孔加工方法的发展,如图12所示。从图中可以看出,在2014和2015年大多数论文都试图通过autoencoder进行面孔处理。而3D模型在2016年发挥了重要作用。GAN自古德费洛等人首次提出以来,引起了深度学习和计算机视觉界的广泛关注。它可以用于不同的领域,并于2017年被引入到人脸处理中。GAN可以进行"一对多增强"和"多对一归一化",突破了人脸合成需要在监督方式下进行的限制。虽然GAN还没有被广泛应用于人脸处理中进行训练和识别,但其在预处理方面具有很大的潜力,如双Agent GANs ( DA-GAN )在NIST IJB - A 2017 FR竞赛中获得了第1名的验证和识别轨迹。

4.1 一对多增广
收集一个庞大的数据库是极其昂贵和耗时的。"一对多增广"的方法可以缓解数据收集的挑战,它们不仅可以用来增广训练数据,还可以用来增广测试数据集。我们将它们分为四类:数据增广、3D模型、自编码器模型和GAN模型。
4.1.1 数据增广
常见的数据增强方法包括光度变换和几何变换,例如对图像进行过采样(在不同尺度下裁剪得到的多个斑块),镜像和旋转。最近,数据增强在深度FR算法中得到了广泛的应用。例如,Sun等人裁剪了400个在位置、尺度和颜色通道上变化的人脸块并镜像。Liu等人在人脸区域上生成了7个以不同特征点为中心的重叠图像块,并用7个结构相同的CNN进行训练。
4.1.2 3D模型
三维人脸重建也是丰富训练数据多样性的一种方式。它们利用3D结构信息来建模姿态之间的转换。三维模型首先利用三维人脸数据获得可变形的位移场,然后应用这些位移场获得不同姿态角下的二维人脸数据。关于这个领域有大量的论文,但我们只关注使用深度方法或用于深度FR的3D人脸重建。Masi等人生成了具有新的类内面部外观变化的人脸图像,包括姿态,形状和表情,然后用真实和增强数据训练了一个19层的VGGNet。Masi等人使用通用的3D人脸和渲染固定视图来减少大量的计算工作量。Richardson等人使用了一个迭代的3D CNN,通过使用第二个输入通道将前一个网络的输出表示为图像,以重建3D人脸,如图13所示。Dou等人使用多任务CNN将3D人脸重建分为中性3D重建和表情3D重建。Tran等人通过一个很深的CNN结构直接从输入照片回归3D可变形人脸模型( 3DMM )参数。An等人使用3DMM方法合成了具有各种姿态和表情的人脸图像,然后借助MMD缩小了合成数据与真实数据之间的差距。

4.1.3 自编码器模型
自编码器模型可以直接生成2D目标图像,而不是从2D图像中重建3D模型并将其投影回不同姿态的2D图像。以人脸图像和编码目标姿态的姿态码作为输入,编码器首先学习姿态不变的人脸表示,然后解码器利用姿态不变的表示和姿态码生成在目标姿态下观看的具有相同身份的人脸图像。例如,给定目标姿态编码,多视角感知器( MVP ) 训练一些确定的隐层神经元来学习姿态不变的人脸表示,同时训练一些随机的隐层神经元来捕获姿态特征,然后解码器通过结合姿态不变的表示和姿态特征来生成目标图像。 如图14所示,Yim等人和Qian等人引入了一个辅助CNN,以生成在目标姿态下观看的更好的图像。首先,一个自动编码器生成期望的姿态图像,然后辅助CNN从生成的目标图像中重建原始输入图像,这保证了生成的图像是保身份的。编码器和解码器之间嵌入了两组单元。标识单元保持不变,通过在每个时间步对位姿单元采取行动实现图像的旋转。

4.1.4 GAN模型
在GAN模型中,生成器的目的是通过生成与真实图像相似的图像来欺骗判别器,而判别器的目的是将生成的样本与真实样本进行区分。通过生成器和判别器之间的minimax博弈,GAN可以成功地生成不同姿态的照片级真实感图像。在使用3D模型生成侧面人脸图像后,DA - GAN通过一个GAN对图像进行优化,该GAN结合了数据分布的先验知识和人脸(姿势与身份感知损失)的知识。 CVAE-GAN将变分自编码器与GAN相结合进行数据增强,同时利用统计和成对特征匹配的优势,使训练过程收敛更快、更稳定。除了从噪音中合成多样化的面孔之外,一些论文还探索通过交换不同人的身份和变化来解开身份和变化的纠缠,合成新的面孔。在CG - GAN中,生成器直接将输入图像的每个表示分解为一个变化码和一个身份码,并将这些码重新组合以交叉生成,同时判别器确保生成图像的真实性。Bao等人提取了一幅输入图像的身份表示和任意一幅输入人脸图像的属性表示。这项工作在生成具有真实感和身份保持的人脸图像方面表现出卓越的性能,即使对于训练数据集之外的身份也是如此。与以前的方法将分类器视为旁观者不同,FaceID-GAN提出了一个三人GAN,其中分类器与判别器合作,分别从面部身份和图像质量两个不同的方面与生成器竞争。
4.2 多对一归一化
与"一对多增广"不同,"多对一归一化"方法产生正面面孔,减少测试数据的外观变异性,使面孔更容易对齐和比较。它可以分为自动编码器模型、CNN模型和GAN模型。
4.2.1 自编码器模型
自编码器也可以应用于"多对一归一化"。与"一对多增广"中的自动编码器模型借助姿态码生成期望的姿态图像不同,这里的自动编码器模型通过编码器学习姿态不变的人脸表示,并通过解码器直接归一化人脸而不需要姿态码。Zhu et al 根据人脸图像的对称性和清晰度选择标准视角图像,然后采用自动编码器通过最小化重建损失误差来恢复正面视角图像。提出的堆叠渐进自编码器( SPAE ) 通过多个自编码器的堆叠,将非正面人脸逐步映射到正面人脸。SPAE的每个浅层自编码器被设计用于将大姿态下的输入人脸图像转换为小姿态下的虚拟视图,因此姿态变化沿着姿态流形逐层缩小。Zhang等人通过使用多个随机人脸作为多个编码器的目标值,构建了一个稀疏的多对一编码器来增强姿态无关特征的判别性。
4.2.2 CNN模型
CNN模型通常直接学习非正面人脸图像和正面图像之间的2D映射,并利用这些映射在像素空间中对图像进行归一化。归一化图像中的像素要么是直接的像素,要么是非正面图像中像素的组合。在LDF - Net中,位移场网络学习两个像素的平移关系,平移层将输入的非正面人脸图像转换为具有该位移场的正面人脸图像。在如图15所示的GridFace中,纠偏网络首先根据计算得到的单应矩阵,通过将原始图像中的像素向正则表达式转换,对图像进行归一化处理,然后利用隐式正则表达式先验对归一化输出进行正则化,最后,以归一化后的人脸作为输入,识别网络通过度量学习来学习判别性的人脸表示。

4.2.3 GAN模型
Huang等人提出了一个双通道生成对抗网络(双通道generative adversarial network,TP-GAN ),该网络包含四个路标定位的patch网络和一个全局编码器-解码器网络。通过结合对抗损失、对称损失和身份保持损失,TP - GAN生成正面视图,同时保留全局结构和局部细节,如图16所示。在解耦的表示学习生成对抗网络( Deentangled Representation Learning Generative Adversarial Network,DR-GAN )中,生成器作为人脸旋转器,其中编码器产生身份表示,解码器使用该表示和姿态编码在指定姿态合成人脸。并且训练鉴别器不仅可以区分真实图像和合成图像,还可以预测人脸的身份和姿态。Yin等人将3DMM融入到GAN结构中,以提供形状和外观先验来引导生成器向正面化。

相关文章:
论文阅读笔记:Deep Face Recognition: A Survey
论文阅读笔记:Deep Face Recognition: A Survey 1 介绍2 总览2.1 人脸识别组件2.1.1 人脸处理2.1.2 深度特征提取2.1.3 基于深度特征的人脸对比 3 网络结构和损失函数3.1 判别损失函数的演化3.1.1 基于欧式距离的损失3.1.2 基于角度/余弦边距的损失3.1.3 Softmax损失…...
本地dify绑定notion
需要用到 notion 的“集成”功能。对于个人用户来说,选择使用**内部 internal **集成,公司用户可以考虑使用公开 public 集成。 在下面的 notion 集成网站中申请一个新的集成: Notion – The all-in-one workspace for your notes, tasks, …...
k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
接上文写的Node亲和性调度https://blog.csdn.net/soso678/article/details/144777397 Pod 间的亲和性和反亲和性(Affinity/AntiAffinity)调度 Pod 间亲和性与反亲和性使你可以基于已经在节点上运行的 Pod 的标签来约束 Pod 可以调度到的节点࿰…...
JSON Schema 入门指南:如何定义和验证 JSON 数据结构
文章目录 一、引言二、什么是 JSON Schema?三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例:定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…...
借DeepSeek的风思考:未来可通过AI+视觉识别技术,实现足球比赛中的教练决策指挥系统,以此提高中国足球冲出亚洲夺取世界杯冠军
国家如此强大,必须需要提升国足冲向世界,一雪前耻的了。现在我脑洞大开,提出以下思路寄望国家重视。具体思考如下: 通过AI视觉识别技术实现足球比赛中的教练决策指挥系统,有潜力提升中国足球的竞争力。但要实现这一目标…...
DeepSeek今日连开3源!针对优化的并行策略,梁文锋本人参与开发
DeepSeek开源周第四天,直接痛快「1日3连发」,且全都围绕一个主题: 优化并行策略。 DualPipe:一种创新的双向流水线并行算法,能够完全重叠前向和后向计算-通信阶段,并减少“流水线气泡”。它通过对称的微批…...
【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...
蓝桥杯2024年第十五届省赛真题-传送阵
#include<stdio.h> #include<stdbool.h> #define MAX 100000 int circle[MAX];//记录每个环大小 int parent[MAX];//记录每个传送阵所属的环 int m[MAX]; bool visited[MAX]; int circleIndex0;//当前环的编号 //迭代实现换的查找void findcircle(int start){int c…...
数据存储:一文掌握存储数据到mysql的详细使用
文章目录 一、环境准备1.1 安装MySQL数据库1.2 安装Python MySQL驱动 二、连接到MySQL数据库三、执行基本的CRUD操作3.1 创建(Create):插入数据3.2 读取(Read):查询数据3.3 更新(Update…...
【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录
题目描述 考勤记录是分析和考核职工工作时间利用情况的原始依据,也是计算职工工资的原始依据,为了正确地计算职工工资和监督工资基金使用情况,公司决定对员工的手机打卡记录进行异常排查。 如果出现以下两种情况,则认为打卡异常…...
Java实战:使用HttpClient实现图片下载与本地保存
在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求。其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都显得尤为重要。无论是社交媒体平台、电商平台,还是个人项目,能够高效地…...
【实战】使用PCA可视化神经网络提取后的特征空间【附源码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
DeepSeek05-大模型WebUI
一、说明: 将DeepSeek部署到前台Web界面的方法主要有以下几种推荐方案,涵盖开源工具、第三方客户端及特定场景适配方案: Open WebUIChatbox AICherry StudioSillyTavern 二、Open WebUI 安装配置教程 特点:Open WebUI 是一个开…...
第14天:C++异常处理实战指南 - 构建安全的文件解析系统
第14天:C异常处理实战指南 - 构建安全的文件解析系统 一、今日学习目标 🎯 掌握C异常处理的核心语法与流程🛡️ 理解RAII在资源管理中的关键作用📦 创建自定义文件解析异常体系🚀 实现安全的文件解析器原型 二、C异常…...
JavaScript遍历方式总结
目录 一、数组遍历方法 1.1for循环 1.2for...of循环 1.3forEach 1.4map方法 1.5filter方法 1.6reduce方法 1.7some方法 1.8every方法 二、对象遍历方法 2.1for...in方法 2.2values、keys方法 2.3entries方法 一、数组遍历方法 1.1for循环 最普通的循环…...
Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 身体健康界面 公共书籍界面 借阅信息界面 归还…...
Spring Boot整合WebSocket
目录 ?引言 1.WebSocket 基础知识 ?1.1 什么是 WebSocket? ?1.2 WebSocket 的应用场景 ?2.Spring Boot WebSocket 整合步骤 2.1 创建 Spring Boot 项目 2.2 添加 Maven 依赖 2.3 配置 WebSocket 2.4 创建 WebSocket 控制器 2.5 创建前端页面 引言 在…...
Pycharm使用matplotlib出现的问题(1、不能弹出图表 2、图表标题中文不显示)
Pycharm使用matplotlib出现的问题 问题1:Pycharm调试时出现:AttributeError: module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? 排查原因:可能是由于matplotlib后端设置不正确或与运行环境不兼容引…...
《宇树科技:解锁机器人技术的未来密码》:此文为AI自动生成
走进宇树科技 在科技飞速发展的今天,机器人领域正以前所未有的速度蓬勃发展,成为全球瞩目的焦点。在这个充满创新与挑战的领域中,宇树科技宛如一颗璀璨的明星,闪耀着独特的光芒。它不仅在国内机器人行业占据着重要地位,更是在国际舞台上崭露头角,成为了中国机器人技术的…...
Spark map与mapPartitions算子源码级深度解析
Spark map与mapPartitions算子源码级深度解析 一、核心源码结构差异 1. map算子实现逻辑 def map[U: ClassTag](f: T => U): RDD[U] = withScope {val cleanF = sc.clean(f)new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }实现特征: …...
在 Vue 3 中,如何缓存和复用动态组件
在 Vue 3 中,如何缓存和复用动态组件,这有助于提高应用的性能,避免组件重复创建和销毁带来的开销。下面详细介绍其使用方法和相关配置。 1. 使用 <KeepAlive> 组件缓存动态组件 基本使用 <KeepAlive> 是 Vue 3 内置的一个组件…...
【PromptCoder】使用 package.json 生成 cursorrules
【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中,效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器,正在彻底改变我们的编程方式。但如…...
给博客添加基于百度地图的足迹页面
使用百度地图 api 做的足迹页面一段时间了,经过一番改造,目前已基本能够满足自己需求。 一、添加百度地图 添加百度地图基本思路就是6点: 申请百度AK适当位置添加百度地图容器引入百度地图 api创建地图实例设置地图中心点初始化地图 这里…...
【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField
在Android开发当中,BuildConfig是一个非常有用的功能,它允许我们在构建过程中定义常量,并在运行时使用它们。But!!当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候,有一些细微的差…...
南京来可电子CAN总线数据记录仪在汽车售后服务站的应用
南京来可电子CAN总线数据记录仪在汽车售后服务站的应用 南京来可电子(LaiCore)作为国内领先的车载数据采集设备供应商,其CAN总线数据记录仪凭借高精度、多协议兼容性及智能化功能,在汽车售后服务站中发挥重要作用。以下是其核心应…...
FreeSql + .Net6 多库连接实现
1、安装Nuget包 AutoMapper 2、program.cs里添加如下配置: services.AddSingleton(r >{var str configuration.GetConnectionString("MES");return new FreeSqlBuilder().UseConnectionString(DataType.SqlServer, str).Build<MESFlag>();});s…...
4个小时开发DeepSeek+baiduNaotu一键生成思维导图
一、引言 最近发现AI生成思维导图的解决方案普遍存在两个断层:用户需手动复制模型输出的JSON数据到脑图软件,且缺乏实时可视化反馈。基于日常使用的BaiduNaotu框架(其轻量级架构与简洁的UI设计已满足基础需求),我决定…...
(21)从strerror到strtok:解码C语言字符函数的“生存指南2”
❤个人主页:折枝寄北的博客 ❤专栏位置:简单入手C语言专栏 目录 前言1. 错误信息报告1.1 strerror 2. 字符操作2.1 字符分类函数2.2 字符转换函数 3. 内存操作函数3.1 memcpy3.2 memmove3.2memset3.3 memcmp 感谢您的阅读 前言 当你写下strcpy(dest, s…...
构建动态URL查询字符串以导出报警统计数据
如何构建动态URL查询字符串以导出报警统计数据 在开发Web应用程序时,经常需要根据用户的选择或输入来动态构建URL查询字符串,以便从服务器检索或导出数据。在本文中,我们将展示如何使用JavaScript来构建一个动态URL查询字符串,用…...
SpringBoot集成easy-captcha图片验证码框架
SpringBoot集成easy-captcha图片验证码框架 此项目已经很久未维护,如有更好的选择,建议使用更好的选择!!! 一、引言 验证码(CAPTCHA)是现代应用中防止机器人攻击、保护接口安全的核心手段之一。然而,从零开发验证码…...
