周报(0104-0107)

        2023年第1周学习小结:本周三开始阅读文献了解人脸识别领域,首先阅读了有关人脸识别的综述论文,之后学习了MTCNN、FaceNet两种人脸识别方法,通过阅读文献已经对人脸识别领域有了初步了解。

论文:《Face Recognition: From Traditional to Deep Learning Methods》

        这篇论文主要是对传统的和基于深度学习算法的人脸识别方法进行全面的综述,我认为这篇论文对于我想要入门人脸识别领域提供了较大帮助,通过阅读这篇论文我学习到许多传统的(比如基于几何的、整体的、基于特征的)和基于深度学习算法的人脸识别方法。

一、简介

        人脸识别是指能够识别或检测图像或视频中对象身份的技术。人脸识别的非侵入性使得它比其他生物特征识别方法更加便利,人脸识别系统只需识别对象处于摄像头的视野范围内就可完成识别。近年来随着科技发展,传统的人脸识别方法已经被基于卷积神经网络的深度学习方法所取代。基于深度学习方法的主要优势是它们可以用海量的数据集进行网络训练,以学习表示数据的最佳特征,具有很强的鲁棒性。

人脸识别系统通常由以下构件组成:

(1)人脸检测。通过人脸检测器查找图像中人脸的位置,并(如果有的话)返回每个人脸的边界框的坐标。

(2)面部对齐。面部对齐的目标是使用位于图像中固定位置的一组参考点以相同的方式缩放和裁剪面部图像。

(3)人脸表征。在人脸表征阶段,将人脸图像的像素值转换为一个紧凑且具有判别性的特征向量(称为模板)。在理想情况下,同一对象的所有面应该映射到相似的特征向量。人脸表征可以说是人脸识别系统中最重要的组成部分。

(4)人脸匹配。在人脸匹配构建块中,比较两个模板以产生一个相似度评分,该评分表明它们属于同一对象的可能性。

二、人脸识别技术的发展

2.1 几何方法

        几何方法主要思想:人脸由眼睛、鼻子、嘴巴、下巴等部件构成,正因为这些部件的形状、大小和结构上的各种差异才使得世界上每个人脸千差万别,因此对这些部件的形状和结构关系的几何描述,可以做为人脸识别的重要特征。基于几何特征的识别方法速度很快,而且所需内存较少,然而相比于基于比较梯度图像的方法,精度较差。由于它的识别速度很快,基于几何特征的方法可以作为更高级识别方法的快速替代方法(或与之结合使用)

2.2 整体方法

        整体方法包含主成分分析(PCA)线性判别分析(LDA)等统计子空间方法,使用整个面部区域作为输入。PCA对于主成分的分析判断是影响实验结果的重要因素:投影最大化了训练集中所有图像的方差,顶部特征向量可能会对识别精度产生负面影响,因为有些特征向量可能对应于与识别任务不相关的个人内部变化(例如照明、姿势或表情等)。LDA利用了样本的类别(数据)标签,是为有监督学习,PCA则为使用是无监督学习。LDA被认为是比PCA更适合人脸识别的方法,但当不能正确估计类内散度矩阵S_{w}时,纯基于LDA的识别方法容易过拟合。


PCA:主成分分析,以最小重构误差为导向,通过投影,用数据中最主要的信息代替原始数据,从而达到降维的目的。算法步骤:数据的导入与处理(把人脸拉成一行或者一列)、计算数据均值并对数据中心化、计算协方差矩阵、分解协方差矩阵得到按特征值从大到小排序的特征向量、取出前k个特征向量作为投影,使原数据降维到对应投影方向,实现由原本n维数据降到k维。

LDA:线性判别分析,以最小化类内方差、最大化类间方差为导向,通过投影,达到降维的目的。算法步骤:将数据集分类,计算每个类的均值、计算类间散度矩阵S_{b}与类内散度矩阵S_{w}、构造目标函数并对其进行特征分解、取出一定数量的特征向量得到投影矩阵、将测试数据投影到子空间中,使用KNN进行分类。


        还有与PCA和LDA相关的一种方法是局部保持投影(LPP)方法。PCA和LDA保留了图像空间的全局结构(最大化方差和判别信息),而LPP则是保留图像空间的局部结构,这意味着LPP学习的投影将具有相似局部信息的图像映射到LPP子空间中的相邻点。另一种整体方法是基于人脸的稀疏表示,基于稀疏表示的分类(SRC)的思想是使用训练图像的线性组合来表示人脸。为了增加鲁棒性和降低计算复杂度,已经提出了的许多基于SRC的变体方法。

2.3 基于特征的方法

        基于特征的方法是指利用人脸图像中不同位置提取的局部特征的方法。基于几何的方法可以被视为基于特征的方法的特殊情况,不同的是基于特征方法比较侧重于提取鉴别特征,而不是计算人脸图像的几何。在处理呈现局部变化(例如面部表情或光照)的面部时,基于特征的方法要优于整体方法。因为对于基于特征方法提取的局部特征相对应的特征向量的系数在两幅图像之间会有所不同,而基于整体方法的特征向量的所有系数都可能不同。

        最早的基于特征的方法之一是特征脸方法,它是原始特征脸技术的扩展。该方法将主成分分析法独立应用于人脸图像的不同局部区域,生成特征特征集。之后陆续提出了利用二元边缘特征和弹性束图匹配(EBGM)的基于特征的方法。随着局部特征描述符在其他计算机视觉应用中的发展,基于人脸识别的方法增加了许多。尺度不变特征变换(SIFT)描述符也被广泛应用于人脸识别,而一些基于特征的方法侧重于从训练样本中学习局部特征,例如使用了无监督学习技术(PCA树、K-means、和随机投影树)来计算局部描述符。经过不断研究,基于特征的方法已被证明比整体方法对不同类型的变化提供更强的鲁棒性。

2.4 混合方法

        混合方法结合了整体方法和基于特征的方法,在深度学习普及之前,大多数先进的人脸识别系统都是基于混合方法。最流行的混合方法是提取局部特征(如LBP,SIFT),并将其投射到低维和判别子空间(如使用PCA或LDA),如下图所示。经过研究,提出了几种使用Gabor小波特征结合不同子空间方法的混合方法。在这些方法中,不同方向和尺度的Gabor核与图像进行卷积,并将其输出连接成特征向量,然后对特征向量进行下采样以降低其维数。

       混合方法提供了最好的整体和基于特征的方法,它们的主要限制是在于选择能够完全提取识别人脸所需信息的良好特征。通过研究,一些方法试图通过组合不同类型的特征来克服这一问题,而另一些方法则引入了一个学习阶段来提高特征的辨别能力。

2.5 深度学习方法

        深度学习方法的主要优势是,它们可以用大量数据进行训练,以学习对训练数据中存在的变化具有鲁棒性的面部表示。在早期就有人提出利用神经网络进行人脸识别,1997年提出了一种基于概率决策神经网络(PBDNN)方法,另一种方法是使用卷积神经网络和自组织映射(SOM)的组合。由于早期所使用的网络容量较低,以及当时可供训练的数据集相对较小,早期的研究没有取得突破性的结果。随着科技发展,网络模型被放大变得更加复杂,数据集容量也比以前增加,深度学习方法成为最先进的识别技术。卷积神经网络(CNN)是端到端可训练的系统,不需要与任何其他特定的方法相结合,是人脸识别中最常见的深度学习方法。影响基于CNN的人脸识别方法准确性的主要因素有三个:训练数据、CNN架构和损失函数。

        CNN应用于人脸识别的灵感来自于ImageNet大规模视觉识别挑战(ILSVRC),人们研究了两种不同类型的CNN架构:VGG风格和GoogleNet风格的网络。两种网络识别准确性相差无几,但GoogleNet类型的网络的参数比VGG的少了20倍。残差网络(ResNets)已成为许多物体识别任务的首选,它的创新点在于引入了一个构建块,该构建块使用快捷连接来学习残差映射。选择损失函数来训练基于CNN的方法已经成为人脸识别研究的热门领域,但也有研究发现使用此损失函数并不能很好地推广到训练集中不存在的对象。为缓解这个问题,人们提出了使用判别子空间方法优化瓶颈特征和使用度量学习两种方法。

三、小结

       在早期基于传统方法的人脸识别技术还能提供最先进的精度,但现在已经被基于CNN的深度学习方法所取代。与其他类型的方法相比,通过增加训练集的大小或网络的容量来扩大这些网络系统,CNN的精度有了显著的提高。然而,收集大量带标签的人脸图像成本很高,而且对于CNN架构较复杂的训练和部署速度很慢,人们提出了生成对抗网络(GANs)来解决这个问题。现如今人们致力于开发更为高效的网络架构,以便应用于实时人脸识别。

论文:《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》

        MTCNN,多任务卷积神经网络,是用于人脸检测任务的多任务神经网络模型,它由三个CNN网络级联组成,可以同时完成人脸检测和人脸特征点提取。这三个级联的网络分别P-Net、R-Net和O-Net,下文将重点介绍这三个网络。

一、MTCNN工作原理

图1.1 模型流程图(来源于论文原文)

         MTCNN整个结构流程如图1所示,首先对图片进行Resize操作,将原始图像缩放成不同的尺度,生成图像金字塔。这种操作可以将不同尺寸的图像输入接下来三个子网络中进行训练,目的是为了可以检测到不同大小的人脸,从而实现多尺度目标检测任务。接下来是三个级联网络的三个阶段,第一是利用P-Net(Proposal Network)获取人脸区域的候选框和边界框的回归向量,第二是利用R-Net( Refine Network)过滤非候选人脸对象,第三是利用O-Net(Output Net-work)优化输出结果,并输出五个面部关键点的位置。


图像金字塔:

        图像金字塔是图像中多尺度表达的一种,最初用于机器视觉和图像压缩,最主要用于图像的分割、融合。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合,层级越高,则图像越小,分辨率越低。

常见的两类图像金字塔:

高斯金字塔:由底部的最大分辨率图像逐次向下采样得到的一系列图像。

拉普拉斯金字塔:用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。


1.1 P-Net

        第一阶段,使用P-Net全卷积网络来获取人脸区域的候选框及其边界框的回归向量,然后利用估计的边界框回归向量校准候选框,然后用NMS对高度重叠的候选框进行合并,去除重复的候选框。(目的:快速排除不含人脸的部分)

图1.2 P-Net网络结构

         由图1.2所示,输入12x12的三通道RGB图像,经过三层卷积后,得到1x1x32的特征图,然后分成三个支路输入,分别输出人脸分类、边框回归、人脸关键点定位。第一个支路输出1x1x2的向量,是用来判断该图像是否存在人脸。第二个支路输出1x1x4的边界框回归向量,分别是边界框左上角的横坐标的相对偏移、框左上角的纵坐标的相对偏移、框的宽度的误差、框的高度的误差。第三个支路是人脸五个关键点的位置,每个位置使用二维坐标表示,所以输出1x1x10的向量,这五个点分别是左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置。

1.2 R-Net

        第二阶段,经过P-Net处理后的所有候选框输入到R-Net,进一步过滤大量虚假候选对象,以及利用边界框回归进行校准、使用NMS合并候选框。(目的:进一步排除不含人脸的部分,并估计含有人脸的位置)

图1.3 R-Net网络结构

        由图1.3所示,输入图像压缩成24x24x3的尺寸,经过三层卷积层生成3x3x64的特征图,再将特征图转化成128的全连接层,再分成三个分路。第一个支路用大小为2的全连接层分类是否存在人脸,第二个支路用大小为4的全连接层输出边界框的回归向量,第三个支路用大小为10的全连接层输出人脸关键点。R-Net相比于P-Net增加了一个全连接层,因此对于输入数据的筛选会更加严格。在图像输入P-Net后,会留下许多预测窗口,我们将所有的预测窗口送入R-Net,这个网络会滤除大量效果比较差的候选框,最后对选定的候选框进行边界框回归和NMS,进一步优化预测结果。

1.3 O-Net

         第三阶段,O-Net是一个较为复杂的卷积神经网络,相对于R-Net来说多了一个卷积层。O-Net输入图像是48x48x3,经过4层卷积层,连接一个256的全连接层,之后也分成三条支路。O-Net的效果与R-Net的区别在于这一层结构会通过更多的监督来识别面部的区域,而且会对人的面部特征点进行回归,最终输出五个人脸面部特征点。(目的:确定人脸的位置,重叠的框用NMS去除,并标记人脸的左眼、右眼、左嘴角、右嘴角、鼻子5个特征点的位置)

图1.4 O-Net网络结构

        从P-Net到R-Net,再到最后的O-Net,网络输入的图像越来越大,卷积层的通道数越来越多,网络的深度也越来越深,因此对于人脸识别的准确率应该也是越来越高。

 二、损失函数

2.1 对于人脸分类问题

        使用交叉熵损失函数,其中p_{i}是为人脸的概率,y_{i}^{det}是为背景的真实标签。


交叉熵:

        交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。交叉熵在分类问题中常跟softmax搭配,softmax将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。


2.2 对于边界框回归

         利用欧氏距离计算回归损失,\hat{y}_{i}^{box}是网络预测的坐标,y_{i}^{box}是真实的背景坐标,其中y是边界框的左上角x、右上角y、框高、框宽组成的四元组。

2.3 对于人脸关键点的回归

         这部分和边界框回归一样,损失函数还是计算网络预测的坐标位置和实际真实坐标的欧式距离,并最小化该距离。\hat{y}_{i}^{landmark}是网络预测得到的,y_{i}^{landmark}是实际真实的关键点坐标,这里的y包含左眼的位置、右眼的位置、鼻子的位置、左嘴角的位置、右嘴角的位置,而且每个点两个坐标,y是十元组。

2.4 总损失函数

 

         N是训练样本数量,\alpha _{j}是表示任务的重要性,\beta _{i}^{j}是样本标签,L_{i}^{j}是前面的损失函数。作者在P-Net、R-Net网络中设置\alpha _{det}=1,\alpha _{box}=0.5,\alpha _{landmark}=0.50,而在O-Net网络中设置\alpha _{det}=1,\alpha _{box}=0.5,\alpha _{landmark}=1。

三、小结

图3.1 与其他模型对比结果(来源于原论文)

         可以看出MTCNN在保持实时性能时,对于人脸检测效果是优于其他识别方法的。MTCNN有许多优点,如使用了级联思想,将复杂问题分解,使得模型能够在小型设备上运行;三个级联网络都较小,训练模型时容易收敛;精度较高,它使用了级联思想,逐步提高精度。但也有缺点,它的误检率较高,因为采用了级联的思想,使得模型在训练过程中的负样本偏少,学到的模型不够百分百准确。因为它是几年前就发表的模型,随着技术发展,有很大的改进空间。

论文:《FaceNet: A Unified Embedding for Face Recognition and Clustering》

        FaceNet是谷歌提出的一种新的人脸识别的方法,该方法在LFW数据集上的准确度达到了99.6%,在YouTube Faces DB上达到了95.12%。传统CNN先通过网络进行处理,然后将处理后的结构利用SVM方法进行分类。 FaceNet不同于传统CNN方法,它有两个亮点:一是利用全连接网络(DNN)直接学习从原始图像到欧氏空间上点的映射,使得在欧式空间里的距离的度量直接关联着人脸相似度;二是引入triplet损失函数,使得模型的学习能力更高效。

一、FaceNet模型结构

图1.1 FaceNet

        FaceNet模型结构如上图所示,输入层后就是DNN,然后再运用L2正则化避免模型的过拟合,最后连接triplet损失函数。这里的关键就是triplet损失函数的确定,论文最大创新点就是提出不同的损失函数,直接优化特征本身,用特征空间上的点的距离来表示两张图像是否是同一类。模型各部分具体含义如下:

1、模型前面采用一个CNN结构提取特征;

2、CNN之后接一个L2正则化(对嵌入函数f(x)的值,做了限制\left \| f(x)) \right \|_{2}=1,即使所有图像的特征都映射到一个超球面上);

3、之后接embedding层(嵌入函数),嵌入过程可以表达为一个函数f(x)\epsilon \mathbb{R}^{d},即把图像x通过函数f(x)映射到d维欧式空间;

4、最后,再去优化这些特征,论文提出了一个新的损失函数——triplet损失函数来优化特征。


L2正则化:L2是正则化项,又叫做惩罚项,是为了限制模型的参数,防止模型过拟合而加在损失函数后面的一项。

embedding层:嵌入层将正整数(下标)转换为固定大小的向量。


二、Triplet Loss(三元组损失函数)

图2.1 Triplet Loss

         三元组损失函数,就是有三张图片输入的损失函数,上图意思就是说通过学习,使得类间的距离要大于类内的距离。由上述网络结构中嵌入函数的值做了\left \| f(x)) \right \|_{2}=1限制,我们需要使得配对人脸间的距离比任何其他人脸之间的距离都要小。所以构建一个约束条件:

        其中\alpha表示正样本对(x_{i}^{a}(anchor)x_{i}^{p}(positive))和负样本对(x_{i}^{a}(anchor)x_{i}^{n}(negative))之间的一个约束范围;\tau表示训练集里的任何可能的三元组的集合,它的基数是N,这个约束需要在所有的三元组上都成立。 把上式写成损失函数,通过优化(减小)损失函数的值,来优化模型,得到如下损失函数, 即最小化(类内距离-类间距离+边际):

       在论文中,如果严格的按照上式来进行学习的话,它的\tau(穷举所有的图像三元组)是非常大的。为了确保模型快速收敛,选择违反约束条件中的公式1的三元组非常重要。对于给定的x_{i}^{a} ,我们要:

(1)选择一个x_{i}^{p},使得argmax_{x_{i}^{p}}\left \| f(x_{i}^{a})-f(x_{i}^{p}) \right \|_{2}^{2}

(2)选择一个x_{i}^{n},使得argmin_{x_{i}^{n}}\left \| f(x_{i}^{a})-f(x_{i}^{n}) \right \|_{2}^{2}

        在整个训练集上寻找argmax和argmin是非常困难的,找不到的话会导致训练效果不佳,难以收敛。对此论文提出两种解决方案:

(1)在数据子集上利用网络最近的检测点计算argmin和argmax,并且每n步线下生成triplets。
(2)通过从小批量样本中选择hard positive/negtive样例来生成triplets。

三、深度卷积网络

         论文中的CNN采用了两种结构,ZF-Net和GoogleNet。

图3.1 ZF-Net网络结构

         ZF-Net网络结构由图3.1所示,在前几个卷积层中加入了1x1xd的卷积层, 有效的减小了参数的个数。相比于GoogleNet(网络结构如图3.2所示),ZF-Net的参数量还是很大。为了使得模型可以嵌入到移动设备中,本文中也对模型进行了优化,NNS1即只需要26M的参数和220M的浮点运算开销,NNS2则只有4.3M的参数和20M的浮点运算量,NN3和NN2的模型一样,但输入图片大小只有160x160,而NN4则是96x96,经过对模型的优化极大程度降低了模型对CPU的需求。

图3.2 GoogleNet网络结构

 四、小结

         三元组的损失函数在FaceNet模型中效果很好,它比softmax相比具有较大优势。三元组是直接优化距离,softmax不直接,性能不够好;一般softmax产生的特征向量都很大,超过1000维。triplet损失函数的提出极富创新力,对于实际应用十分有效。对于FaceNet还可以进行优化:

(1)分析错误的样本,进一步提高识别精度,特别是增加模型在现实场景中的识别精度;

(2)减少模型大小,减少对CPU计算量的消耗,以及减少训练时间(作者在CPU集群上需要1000-2000小时的训练)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值