人脸识别算法_基于深度学习的人脸识别算法

>>>>

度量学习

基于深度学习的人脸识别算法,如何让神经网络从训练数据中学习到有效、鲁棒的生物特征是至关重要的。在这个过程中,一个良好的学习向导是不可或缺的。因此,在模型训练的过程中,通常使用度量学习的方式,将人物面部特征间的距离,作为神经网络特征学习的向导,来实现区分不同人物的目的。

为了让神经网络能够更加有效的学习,合理的设计损失函数来度量和映射人物特征之间的距离,成为了提高人脸识别精度的主要研究方向之一。许多在分类任务中常用的损失函数,如Softmax Loss,在经过一系列的改进之后,更好的适应了人脸识别的任务。像Arcface这样的损失函数(下图),利用了一种附加角度对cos值进行加法约束,使得模型能够在学习过程中合理的压缩相同人物特征间的余弦距离的同时增大不同人物特征间的余弦距离,以此达到精准区分人物的目的。

人脸识别算法_基于深度学习的人脸识别算法_第1张图片

图示展示在利用损失函数arcface训练一个深度卷积神经网络过程中的计算流程。其中的改进在于,给角度加入了加性间隔m作为惩罚项来减小类间间距,并对其余弦值加入放缩s进行放缩,让网络变得易于训练。

另一些损失函数,如Triplet Loss(下图),则是通过以特定规则从训练集中选择样例,提取特征,比较这些特征之间的距离,来达到聚类相同人物特征和离散不同人物特征的目的。可以看到,这种方法因为要逐次比对选择样例特征之间的距离并基于此来优化模型参数,所以会延长模型训练的周期。但对于解决一些特殊场景下的困难样例,会有较好的效果。

ee4f18ad1e4a732633c2388f0ccce4ec.png

图示为最初版本的Triplet Loss原理示意图。训练过程中需要从训练集中选择一个Anchor样本以及与Anchor样本同类的Positive样本和与Anchor样本异类的Negative样本,在训练过程中不断的拉近同类样本的距离并远离异类样本。

选择不同的损失函数,会对模型进行识别任务时选用的距离公式(相似度计算方法)产生影响。例如,Triplet Loss在早期优化的是欧氏距离,所以在后期进行特征比对时,利用欧式距离来计算特征之间相似度就是更加自然的。此外,通过对这些损失函数进行变形,来统一各损失函数的优化距离,从而使不同的损失函数能够运用在训练模型的不同阶段,或将不同损失函数对不同的样例分配进行结合,从而达到更高效的训练效率,也是目前的工作方向之一。

>>>>

网络结构

根据使用场景和计算设备的不同,通常需要选择不同规模的神经网络结构。随着人脸识别在移动端的普及以及识别规模的增大,选用计算量更小、更高效的网络结构成为了重要的研究方向。

标准的卷积神经网络结构,以VGG16为例,通常由卷积层,池化层,全连接层和激活函数组成。该网络通过反复堆叠3*3的小型卷积核和2*2的最大池化层,不断加深网络结构来提升性能。

但随着网络结构的进一步加深,网络参数会随之增多,运算开销会变得很大,增加运算成本。同时,网络结构的加深也会让网络发生退化现象,以至于在进一步训练时无法达到预期的精度。

为解决这些问题,设计出参数少,深度深,运算快,易于训练的轻量级网络网络,各种卷积结构和模块被逐步引入到了卷积神经网络的基础构架中。

残差模块:为解决加深网络后的网络退化问题,使深度网络变得可训练而提出的结构(见下图)。这种跳跃连接的结构让网络有能力在需要的时候拟合一个潜在的恒等映射函数,从而避免了在极深网络中出现的难以训练的问题。

人脸识别算法_基于深度学习的人脸识别算法_第2张图片

分组卷积:在标准的卷积操作中,其参数量与输入特征图通道数,卷积核尺寸和输出特征图通道数有关。如图,若输入特征图尺寸为H*W*c1,卷积核尺寸为h1*w1*c1,输出特征图尺寸为H*W*c2,标准卷几层的参数量则为:h1*w1*c1*c2。

人脸识别算法_基于深度学习的人脸识别算法_第3张图片

 若使用分组卷积(见下图),事先将输入的特征图按照通道数分为g组,分组卷积的参数量为则会变成标准卷积参数量的1/g:h1*w1*c1*c2/g。

人脸识别算法_基于深度学习的人脸识别算法_第4张图片

分组卷积能够在一定程度上降低卷积的参数量,但也会减弱各通道之间的相关性。

深度可分离卷积:深度可分离卷积操作是将普通卷积拆解成深度卷积和逐点卷积。深度卷积负责滤波,逐点卷积负责转换通道。

如图(a),对于标准卷积,其参数量为Dk*Dk*M*N。如图(b),对于深度卷积,其参数量为:Dk*Dk*1*M。    如图(c),对于逐点卷积,其参数量为:1*1*M*N。将两项操作合并,可知深度可分离卷积参数量         是标准卷积的:(1/N)+(1/Dk**2)。

人脸识别算法_基于深度学习的人脸识别算法_第5张图片

弃用池化层:池化层分为平均池化和最大池化,通过制定规则对池化核覆盖范围内的像素进行运算,达到学习图像边缘及纹理结构,同时压缩特征图的效果。但池化层常常会导致较多的信息损失,因此,通常使用控制卷积核在特征图上的滑动步长(如设定stride=2),来达到压缩特征图,提取图像特征的目的。

减少全连接层:因为全连接层需要将每个神经元节点与其前后层的神经元分别连接,其通常会占据卷积神经网络的大部分参数。为了减少模型的参数,会尽量减少全连接层的使用,通常利用全剧平均池化或大尺寸卷积核取代全连接层,来融合学到的特征。

同时,为了让模型能够更好的提取人物面部的特征,专门的人脸识别网络在这些方面进行了优化,例如mobilefacenet在卷积网络的尾部加入7*7卷积核压缩特征图,直接将特征图转化成相应维度的面部特征并送入全连接层这样的操作。对于一些特殊场景下的识别任务,则会根据需求,定制出相应的结构模块。例如,在面对面部遮挡的任务中,融入空间注意力机制,实现事先为特征热力图的空间分布的加权,就变得相对重要。

人脸识别算法_基于深度学习的人脸识别算法_第6张图片

你可能感兴趣的:(人脸识别算法)