ArcFace 论文大颗粒粗读笔记(一)

为什么看Arcface? 应为实习要看啊。。。 这篇文章相当于不严谨的翻译,看到此博文的同学们要带着批判的精神。

摘要,:以叙事的角度拆开看

作者开门藏山,只是露出了山的一角,告诉你最近使用深度卷积神经网络(DCNN)进行大规模人脸识别的特征学习中的主要挑战之一是设计适当的损失函数增强判别能力

缓缓拨开云雾,发现几个对手走在前面,都是要登顶的好手。走在最前面的是我们的Center Loss(这个链接有各个人脸识别的损失函数解析)选手,它会惩罚欧式要素空间中深层特征与其对应的类中心之间的距离,以实现类内紧凑性;后面紧跟的是SphereFace,SphereFace假定最后一个完全连接的层中的线性变换矩阵可用作角度空间中类中心的表示,并以乘法方式惩罚深部特征及其对应权重之间的角度。最近,一种流行的研究方向是将边距合并到公认的损失函数中,以使面部类别的可分离性最大化。

作者看到登山芝士们的身法,知己知彼,悟出了自己的一套无相剑骨,整装待发。提出了“相加角余量损失”(ArcFace),以获取用于面部识别的高判别特征。由于与超球面上的测地距离精确对应,因此拟议的ArcFace具有清晰的几何解释。

整个过程降维来说就是,俺也提了个损失函数,叫Arcface,效果拔群。

介绍:

ArcFace 论文大颗粒粗读笔记(一)_第1张图片

这张图要表达什么意思?

幼儿园化来说,现在我有两个人的照片,每个人的照片为一个类别,我尝试用四种不同的损失来区分它们,A方法最好。

详细来说,基于中心[18]和特征[37]归一化,所有身份都分布在超球面上。 为了增强类内紧凑性和类间差异,我们考虑了四种测地距离(GDis)约束。 (A)余量损失:在样本和中心之间插入测地距离余量。 (B)类内损失:减小样品与相应中心之间的测地距离。 (C)类间损失:增加不同中心之间的测地距离。 (D)三重态损失:在三重态样本之间插入测地距离裕度。 在本文中,我们提出了一个加法角余量损失(ArcFace),它与(A)中的测地距离(Arc)余量罚分完全对应,以增强人脸识别模型的判别能力。 大量的实验结果表明(A)的策略是最有效的。

前面讲历史,DCNN是现在FR(face recognition)的主流,主流方法可分为基于Softmax Loss与Triplet Loss的方法都算是比较成功的。

接下来是一大段翻译

但是,softmax损失和三元组损失都有一些缺点。对于softmax损失:(1)线性变换矩阵W∈Rd×n的大小随着身份数n线性增加; (2)对于封闭集分类问题,学习到的特征是可分离的,但对于开放集人脸识别问题,则不能充分区分。对于三元组损失:(1)特别是对于大型数据集,面部三胞胎的数量呈组合爆炸式增长,导致迭代步骤数显着增加; (2)对于有效的模型训练,半硬样本挖掘是一个相当困难的问题。已经提出了几种变体[38、9、46、18、37、35、7、34、27],以增强softmax损失的判别能力。 Wen等。 [38]率先提出了中心损失,即每个特征向量与其类中心之间的欧几里得距离,以获得类内部的紧凑性,同时通过联合惩罚softmax损失来保证类间的色散。然而,由于最近可用于训练的面部类别的数量急剧增加,因此在训练期间更新实际中心极为困难。通过观察在softmax损失下训练的分类DCNN的最后一个完全连接层的权重与每个面部类别的中心具有概念上的相似性,[18,19]中的工作提出了乘法角余量罚分以强制执行额外的内部类紧凑性和类间差异同时出现,从而导致训练后的模型具有更好的判别能力。即使Sphereface [18]引入了重要的角度余量概念,它们的损失函数也需要一系列近似值才能计算出来,这导致网络的训练不稳定。为了稳定训练,他们提出了一种混合损失函数,其中包括标准softmax损失。根据经验,softmax损失在训练过程中占主导地位,因为基于整数的乘法角余量使目标logit曲线非常陡峭,从而阻碍了收敛。 CosFace [37,35]直接向目标logit添加余弦余量罚金,与SphereFace相比,它可获得更好的性能,但承认更容易实现,并且免除了softmax损失的联合监管需求。在本文中,我们提出了加法角余量损失(ArcFace),以进一步提高人脸识别模型的判别力并稳定训练过程。如图2所示,DCNN特征和最后一个完全连接的层之间的点积等于特征和权重归一化后的余弦距离。我们利用反余弦函数来计算当前特征与目标权重之间的角度。然后,我们向目标角度添加一个附加的角余量,然后通过余弦函数再次获得目标对数。然后,我们按照固定的特征范数重新缩放所有logit,随后的步骤与softmax损失中的步骤完全相同。提议的ArcFace的优点可以总结如下:
参与。
ArcFace通过归一化超球面中角度和弧线之间的精确对应关系直接优化了测地距离裕度。通过分析特征和权重之间的角度统计数据,我们直观地说明512-D空间中发生的情况。
有效。
ArcFace在十项人脸识别基准(包括大规模图像和视频数据集)上达到了最先进的性能。
简单。
ArcFace仅需要算法1中给出的几行代码,并且在基于计算图的深度学习框架中非常容易实现,例如MxNet [8],Pytorch [25]和Tensorflow [4]。
此外,与[18,19]中的工作相反,ArcFace不需要与其他损失函数结合才能具有稳定的性能,并且可以轻松地收敛到任何训练数据集上。高效。在培训期间,ArcFace仅增加了可忽略的计算复杂性。当前的GPU可以轻松支持数百万个身份进行训练,而模型并行策略可以轻松支持更多身份。

概括的说,介绍了Softmax Loss两个不足,一个是随着类别的增多,参数量暴增,另一个是在开集上效果不好。Triplet Loss的两个不足,一个是image2image的compare太耗时,另一个是semi-hard sampling。再者是Softmax, Sphereface ,CosFace ,Arcface的出发点。最后是Arcface的特点。 

提出的算法:

 作者原话 The most widely used:Softmax Loss

ArcFace 论文大颗粒粗读笔记(一)_第2张图片

其中 xi 表示第i个样本的深层特征,与类别yi相关联,嵌入特征尺寸d设置为512

        j表示权重W的列, bj就是Wj对应的偏置

       n为类别的数量,N为Batch size的大小

所以Softmax Loss在人脸识别中的看出来的不足就是: 。。。。又说Softmax Loss的不足了

但是,softmax损失函数并未明确优化嵌入的功能,以使类别内样本具有更高的相似度,而类别间样本具有更高的多样性,这会导致在类别间内部出现较大的外观变化和年龄差距以及较大的情况下,用于深层人脸识别的性能差距 规模的测试方案。

这一段用Google翻译的乱七八糟的,我看了一个B站的视频,估摸着这一段里面大致意思是 Sofrmax虽然能区分类别,但是对年龄,光照,化妆的因素造成的类内区分不好。所以呢,基于这个点出发,作者开始修改上面的Softmax Loss了。

简单地说,参考文献[18]将bj修改为0,参考文献[26],把WjXi修改为||Wj||||Xi||cosθj,按照[18,37,36]把每个W,做归一化,并且加上了L2正则,按照[28 , 35 , 36 , 37],对X也做归一化,L2正则,最后re-scale到s。特征和权重的归一化步骤使预测仅取决于特征和权重之间的夹角。 因此,所学习的嵌入特征分布在半径为s的超球面上。

作者在这段并没有指出s大小,查阅资料发现这里s的值是64,目的在于舍弃X的值大小对分类的影响,使得网络更关注角度的因素。

ArcFace 论文大颗粒粗读笔记(一)_第3张图片

经过上述的替换,原Softmax Loss损失函数可以写为公式2的形式。而分母拆分成两个部分,这样显得之前的解释变得直观?

重要的一个部分来了,也算是最核心的部分。

由于嵌入特征分布在超球面上的每个特征中心周围,因此我们在xi和Wyi之间添加了一个附加的角余量罚分m,以同时增强类内部的紧凑性和类间的差异。 由于拟议的加法角余量罚分等于在非最小化超球面中的测地距离余量罚分,因此我们将方法命名为ArcFace。

ArcFace 论文大颗粒粗读笔记(一)_第4张图片

最后这个损失函数的公式长这样。

 

你可能感兴趣的:(...)