摘要:人脸识别利用CNN获得了很多的提升,这个问题的核心在于特征的可分性。为了解决这个问题,一部分人试着探索基于挖掘的策略(困难样本挖掘和focal loss),聚焦于样本的可提供的信息。另外一部分人设计了基于margin的损失函数(angular, additive和 additive angular margin)来增加特征和在ground truth上的投影之间的margin。这两个方法都被验证是学习可分特征的方法。但是,这两个方法要么会遇到困难样本的随意性的问题,要么会遇到其他的类别的可分性不强的问题。在这篇文章中,我们设计了一个新的损失函数(SV-Softmax),把重点放在错误分类的点(支持向量)上,来指导可分特征的学习。所以,SV-Softmax可以抑制难样本的随意性,同时可以汲取其他的类别的可分能力,得到更加好的可分特征。据我们所知,这是第一次尝试同时将基于挖掘和基于margin的方法放到一个框架里。我们在几个benchmarks做了实验,实验表明我们的方法做到了业界最佳。
1. 介绍
人脸识别是计算机视觉和模式识别的基础任务。人脸识别任务包括两类,人脸身份验证和人脸比对。对于人脸识别来说,仍然有很多的挑战,特别是在大型的数据集上,例如MegaFace Challenge和Trillion Pairs Challenge。
最近几年,人脸识别常常是使用深度神经网络来构建。训练深度模型的时候,通常使用分类损失函数,度量学习损失函数。度量学习损失函数有对比损失和三元组损失,常常需要非常大的计算开销。为了避免这个问题,需要非常仔细的设计minibatch的采样的策略,所以度量学习的performance对于这些策略非常的敏感。所以,越来越多的学者开始转向重新构建基于分类的损失函数。
直观上看,如果类内的聚合性和类间的可分性都优化到最大的话,人脸特征就是可分的。但是,最近的研究指出,当前最常用的分类损失(Softmax),对于深度学习人脸识别来说,特征缺乏可分性。为了解决这个问题,一部分人提出了基于挖掘的损失函数,如hard mining softmax,通过在minibatch中构建高loss的样本来得到更好的特征可分性。沿着这个思路更近一步,通过先验知识得到困难样本的比例,丢掉全部的容易样本。另一方面,有人设计了soft mining softmax,也就是Focal loss,聚焦于在一个困难样本的稀疏集上进行训练。还有人基于模型的复杂性来选择困难样本,训练了一个集成模型,为不同的困难程度的样本分别训练了一个模型。另外有一部分人趋向于设计基于margin的损失函数,包括center loss,为每个类别学习一个类中心,来增强同一个类别的内聚性,还有通过一个缩放参数来控制softmax的温度,对区分的很好的样本产生高的梯度,来削弱类间的变换。还有提出了angular margin,对于ground truth和其他的类别,在两者之间增加一个margin,这样可以增加类别之间的可分性。但是,这样常常不是很稳定,参数很难优化。所以提出了AM-Softmax,使得优化更加的稳定,得到了更好的结果。然后又提出了arc-softmax,给出了更加清晰的几何解释。
尽管这两个方向都很好的验证了人脸识别需要学习更好的可分性特征。基于挖掘的损失聚焦于困难的样本,而基于margin的损失聚焦于增加不同类别之间的特征margin。目前,这两个方向是独自发展的,各有各的优缺点。对于基于挖掘的损失来说,对于困难样本的定义是很随意的,通常是更加经验来选取的。如何决定困难样本仍然是一个开放性的问题。对于基于margin的损失,大部分通过增加特征之间的margin来得到可分性的特征,只对于ground truth的投影向量来说。他们往往忽略了其他的非ground truth的类别的投影的可分能力。更进一步,基于挖掘和基于margin的损失的相互关系还不明朗。
为了克服上面的缺点,这篇文章尝试设计了一个新的损失函数,自适应的重点关照了那些具有更多信息的支持向量,来为基于挖掘的损失基于margin的损失之间搭起一座桥梁,将两者纳入同一个框架中。总结一下,这篇文章主要的贡献有:
-
我们提出了新的SV-Softmax损失,削弱了困难样本的随意性同时通过支持向量汲取了其他类别的可分能力。据我们所知,这是首次试图将基于挖掘的损失基于margin的损失纳入同一个框架中。
-
我们深入的分析了我们的SV-Softmax损失和基于挖掘的损失基于margin的损失之间的关系,进一步开发了一个增强版的sv-x-softmax损失来增强特征的可分性。我们代码在:https://github.com/xiaoboCASIA/SV-X-Softmax
-
我们在LFW,MegaFace,Trillion Pairs上做了实验,验证了我们的方法的优越性。
2. 预备知识
Softmax. Softmax损失在最后一层全连接之后定义。在人脸识别中,权重w_k和最后一层出来的特征x通常会进行归一化,然后用一个缩放参数s进缩放。连起来就是,给定一个输入特征向量x,对应的ground truth是y,softmax的公式如下:
其中,是余弦相似度,是和x之间的角度。这样学出来的特征只是具有区分性(seperable),并不具有人脸识别所需要的可分性(discriminative)。
Mining-based Softmax. 难样本挖掘已经成为了深度学习的一个非常有效的实用的技术。它的思想是聚焦于训练包含有效信息的样本,得到更加可分的特征。最近有很多的工作都是基于损失或者是模型复杂性来选择困难样本。通用的公式如下:
其中:
是对ground truth类别进行预测的概率,g(p_y)是指示函数。基本上,对于Focal loss,,γ是调制因子,对于HM-Softmax,当容易样本的时候,,当是困难样本的时候,g(p_y)=1。不管怎样,困难的定义是很随意的,通常导致了比较敏感的performance。
Margin-based Softmax: 为了直接增加特征的可分性,最近几年提出了几个margin-based softmax loss,总结一下,可以定义成如下:
其中,是仔细设计的margin函数。基本上,对于A-Softmax,其中m是大于1的整数,对于AM-Softmax,,其中m2>0。对于Arc-Softmax,,更加一般的,有:,所有的方法都是通过对ground truth的投影进行修改来实现的。
3. 问题的公式化
3.1 朴素的Mining-Margin Softmax Loss
将mining-based的损失函数和margin-based损失函数结合到一起的朴素的想法是这样的:
但是,这个式子只是集合了两者的优点,并没有克服他们的缺点。说的详细一点,就是这个损失函数只是对于ground truth的类别的投影特征增加了margin,而且选择困难样本的时候,也是很随意的,没有语义的指导。
3.2 使用支持向量指导的Softmax Loss
从直观上说,对于可分性很好的特征,在学习的时候是没什么用的。这意味着,错误分类的特征向量对于增强可分性是更加重要的。基于这个启发,难样本挖掘和最近的Focal loss技术都是聚焦于在一个困难样本的稀疏集上进行训练,忽略了大量的简单样本。但是,选择困难样本时候,他们是基于损失值和经验上的调制因子来实现的。换句话说,对于困难样本的定义是很随意的,没有什么直观上的可解释性。
为了解决这个问题,我们介绍了一种更加优雅的方式来聚焦于训练包含更多信息的特征(支持向量)。我们定义了一个二值化的掩模来只适应的指示在当前的步骤中,对于指定的分类器,这个样本是否被选为了支持向量。二值化掩模定义如下:
从这个定义可以看出,如果样本被错误分类了,那么指示向量的值为1,表示要重点关注。在这种情况下,困难样本的概念很清晰的定义好了,我们只要关注这样一组稀疏的支持向量就可以了。连起来,我们的支持向量Softmax(SV-Softmax)的公式就是:
其中,t是预设的超参数,只是函数定义为:
很明显,当t=1的时候,SV-Softmax的损失就是原始的Softmax损失,图1,给出了SV-Softmax的几何解释。
3.2.1 和Mining-based Softmax损失的关系
为了说明SV-Softmax的优越性,我们使用了二元分类的例子,假设我们有两个样本x1和x2,两个样本都来自于类别1,图二给出了一个图,其中x1是比较难的,x2是比较简单的。传统的mining-based Focal loss是很难给这两个样本分配权重的,比如:
这样的话,把重点放在困难样本的重要性上。这个策略是直接从损失的角度来看的,定义困难样本具有随意性。然而我们的SV-Softmax损失使用不同的方式。首先,我们根据决策边界从语义上定义了困难样本(支持向量),然后,对于支持向量x1,我们减小了它的概率,比如:
总结一下,SV-Softmax和mining-based Focal loss的差别如图2所示:
3.2.2 和Margin-based Softmax Losses的关系
同样的,假设我们有一个样本x来自于类别1,距离它的ground truth的距离有点远(图4中的红圆圈)。原始的softmax目的是让,为了让目标更加严格,margin-based的损失往往对于ground truth的投影引入一个margin函数:
相对应的,我们的SV-Softmax对于其他的非ground truth的类别,也增大了特征的margin。我们引入一个margin函数:
其中,
我们的SV-Softmax损失从语义上提升了其他的非ground truth的类别的margin。对于多个类别的情况,我们的SV-Softmax损失是指定类别的margin。图4给出了几何上的对比。总结一下,图3显示了SV-Softmax的pipeline和mining-based和margin-based损失的关系。
3.2.3 SV-X-Softmax
根据上面的讨论,我们的SV-Softmax损失将mining-based和margin-based损失综合到了一个框架里,但是是从不同的角度来看的。我们也可以吸收他们的优点到我们的SV-Softmax中,为了增加挖掘的范围,我们对margin-based的决策边界进行了自适应的调整,来指示支持向量。连起来,我们的SV-X-Softmax损失的公式为:
其中X是margin-based损失,可以是A-Softmax,AM-Softmax和Arc-Softmax。指示向量是基于margin-based决策边界重新计算得到的:
图5,给出了几何的描述。这样是最好的,从margin-based的损失中收到启发,因为SV-X-Softmax不仅仅是从ground truth的类别中提升了特征的margin,还从非ground truth的类别中提升了特征的margin。从mining-based损失中受到启发,从语义上增大了挖掘的范围。
4. 优化
在这个部分,我们显示了提出的SV-Softmax是可训练的,可以使用经典的梯度下降算法进行优化。和传统的Softmax的差别在于最后的全连接层。
前向传播的时候,当k=y,就和原始的softmax一样,k≠y,有两种情况,如果特征向量对于特定的类别是简单样本,就和原始的softmax一样(),否则,需要重新计算一下。反向传播的时候,我们使用链式法则来计算偏导数。
1546500294998.png其中,的计算方式和原始的softmax一样。完整的算法流程如下:
5. 实验
5.1 数据集
训练数据** Ms-Celeb-1M,高质量的版本Ms-Celeb-1M-v1c,清洗过的。
验证数据 LFW
测试数据 MegaFace和Trillion Pairs
5.2 实验设置
数据预处理 我们使用Face-boxes做人脸检测,使用一个6层的简单cnn做5个特征点的检测,检测到的人脸剪裁缩放成120x120,每个像素点减去127.5,除以128,所有的图像以0.5的概率水平翻转。
CNN结构 在人脸识别中,有很多很好的结构,我们使用了Attention-56作为我们的主干网络,这个主干网络最终得到一个512维的向量,缩放参数我们设为30。
训练 所有的模型使用SGD进行训练,从头开始训练,使用4块P40的GPU,每个的batch size为32,总共是128.weight decay为0.0005,momentum为0.9,学习率初始值为0.1,在100k,160k,220k的时候除以10,240k时候结束。
测试 测试的时候,只用到了512维的特征向量。
为了进行度量,使用余弦距离作为相似分数。CMC曲线用来自适应的评估Rank-1的人脸识别的准确性。对于人脸验证,使用ROC曲线来进行度量。
5.3 参数t的作用
为了了解参数t的作用,我们将t从1.0变化到1.3(如果超过1.4就不收敛了)。具体结果如下图6。在t=1.2的时候,准确率最高。我们在MegaFace上进行测试,也是1.2时最好,后面的实验我们就把t设为1.2。
5.4 LFW上的实验
表1提供了LFW上的对比结果。从表上看,6000对样本的比对比较简单,我们的方法提升不大,BLUFR的比较方法,我们的方法也是最好的。
[图片上传失败...(image-f63981-1548591349491)]
5.5 在MegaFace上的实验
表2显示了在MegaFace上的比较的结果。可以看出,我们的方法比其他的方法提升的比较多。只是SV-Softmax比其他的低,原因是有Softmax决定的决策边界不足以学到可分的特征。使用了SV-Arc-Softmax和SV-AM-Softmax,立刻提升了很多。
图7中,我们画出了CMC的曲线和ROC的曲线来评估人脸比对的performance。从图中可以看出和表格中同样的趋势。
5.6 在Trillion Pairs上的实验
表3显示了在Trillion Pairs上的对比结果。趋势也是和之前的一样。
6. 设计结构的提升
为了进一步提升performance,我们修改了Attention-56的模型,我们将stage[1,1,1]改成了stage[3,6,2],我们还使用了IRSE模块。结果显示在表4-6。从数据来看,我们的模型是非常具有竞争力的。因为我们的模型只是基于MS-Celeb-1Mv1c上进行训练,而且只用了单个模型。
7. 结论
这篇文章提出了一简单有效的损失函数,叫做支持向量softmax,用作人脸识别。SV-Softmax把优化的重点放在支持向量上。因为它从语义上受到了mining-based和margin-based损失的启发,将这两个放到了同一个框架中。它比当前的mining-based损失和margin-based损失以及它们的简单组合都要好。我们在好几个benchmark上都做了实验,验证了我们的方法的,我们的方法达到了业界最优。
请长按或扫描二维码关注本公众号
网友评论