AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

第一次写博客,写博客的念头早就有了,但迟迟因为拖延症没有实现。今天打铁趁热,刚看完这篇论文,顺势来写一个博客!

写博客的原因是想回头看这篇论文的时候,看一下博客就可以想起这篇论文的要点了。

希望陆陆续续把接下来看的论文都在博客上和大家进行分享,也希望和大家一起交流。也想回头把之前看的论文的笔记也post上来,先立个flat吧!

本人目前在研究不平衡数据的分类,接下来的博客估计大多与此相关,希望同道中人一起交流交流。

写的博客,才疏学浅,一起探讨!

 

Let‘s begin!

 

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

1 Motivation

对于以往的Margin based Softmax Loss,都有一个前提假设:即所有的类别都有足够多的样本来描述该类别的分布,因此一个预设的常量margin就足以缩小每一个类别的类内差异。但是,实际上人脸数据集的样本很不平衡,类别的样本数量之间有很大差异。这和长尾分布差不多,数据集的描述如下图所示:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

因此,作者提出了Adaptive Margin Softmax来自适应地调整不同类的边距。

并且,还从两个方面对采样过程进行了自适应:

首先,论文中提出了Hard Prototype Mining,自适应地选择少量的hard类参与分类;

其次,在数据采样方面,还引入了自适应数据采样来寻找有价值的样本进行自适应训练。

这三部分组合在一起作为最终的AdaptiveFace。

 

2 Hightlight

论文的亮点在于:

1.考虑了人脸识别数据集中的不平衡数据问题,针对以往提出的Margin based Softmax Loss进行改进,将固定的margin改进为自适应的margin,即根据类别包含的数据size学习出一个特定的边距,使得最终少数类(样本稀少且类内方差大)获得大的边距。

2.论文中的hard mining有两个,第一个是从数据采样出发,建立了一个反馈机制,使得模型在后期可以更关注hard sample,以求学习有价值的样本。

3.第二个hard mining从类层次进行,同样地建立了一个反馈机制,让模型在训练过程关注相近的类别。

 

3 Introduction

在介绍Adaptive margin Softmax Loss之前,先介绍另外一篇论文《CosFace: Large Margin Cosine Loss for Deep Face Recognition》中提出的Large Margin Cosine Loss,Adaptive margin Softmax Loss是在它的基础上改进的。

提到了CosFace,又不得不提SphereFace,它们是角空间softmax一系列的论文。

3.1 SphereFace

首先对于SphereFace,这里就不作详细的介绍了,希望接下来可以再写一篇博客补充一下。这里就给出loss的推导过程。

对于传统的softmax损失:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

为了简化计算,把偏置b设置为0,然后权重和输入的内积可以用下面式子表示:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

然后使用L2正则化处理Wj使得||Wj||=1,L2正则化就是将Wj向量中的每个值都分别除以Wj的模,从而得到新的Wj,新的Wj的模就是1:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

根据权重和输入的内积公式可以将softmax loss损失函数变换为只与角度相关的公式:||x|| (cos(θi) - cos(θj)) = 0,其中,θiWix之间的角度。通过这样的损失函数学习,可以使得学习到的特征具有更明显的角分布,因为决策边界只与角有关。这样修改后的损失函数modified softmax loss为:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

为了拉大类间距离,并且使得类内差异减少,作者将参数m增加到角度中去,使得决策边界为cos(θ1) = cos(mθ2)。这样两个类的分布中间就会隔着一个比较大的角度边距,因为各自的角度都要乘以m才能到达边界。于是,A-softmax loss(angular softmax)损失函数定义为:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

3.2 CosFace

CosFace是针对SphereFace改进的。SphereFace里面提出的angular softmax loss中的margin是以一种相乘cos(m*θ)的方式出现的,这样带来的一个问题就是反向传播计算比较复杂,loss优化也不是很容易。而cosface为了弥补了这个缺陷,将margin设置为cos(θ) - m,这样优化会比较简单。同时,因为在角空间中,人脸识别是根据两个特征向量之间的余弦相似度计算的,于是特征向量x的范数发挥的作用不大,因此将||x||设定为固定的 缩放值s。而且,这样可以使得模型的学习只依赖余弦值去提升判别能力,将同一类的特征向量聚在一起,将不同类的特征向量在超球面上拉开。

于是,Loss 公式变成了如下:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

 

AdaptiveFace

AdaptiveFace的overview如下,由模型的损失函数AdaM-Softmax、反馈采样分支ADS和类别权重hard mining HPM三部分组成:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

4.1 Adaptive margin Softmax Loss

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

在不平衡的数据集中,多数类因为样本比较多,因此所描述的特征空间与真实特征空间几乎相同。而少数类样本少,且类内差异小,因而其实际特征空间是更大的,实际的类内方差也更大,类间方差也会比上图相对减小。因此固定的margin在数据不平衡的数据集中达到的增大类间距离,缩小类内距离的效果并不会很好。于是,作者提出的Adaptive margin Softmax Loss引入自适应边距,使模型学习特定于每个类的边距,自适应地挤压类内的差异。修改后的margin Softmax Loss定义如下:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

注意,这个margin my(j)和CosFace的m是不一样的,my(j)是特定于类别y(j)的margin。

然后为了获得较大的m来减少类内部的差异,引入了一个正则项来约束边距:

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

这是所有类的平均边距,如果边距越大,那么损失就越小。

结合这两部分就是作者提出的Adaptive margin Softmax损失(AdaM-Softmax):

AdaptiveFace: Adaptive Margin and Sampling for Face Recognition 阅读笔记

其中,λ控制margin约束Lm的强度。

4.2 Adaptive Data Sampling(ADS)

在AdaptiveFace这个模型的第二个部分,作者提出了Adaptive Data Sampling(ADS),该算法通过从分类层到数据层的反馈通道来寻找有价值的样本进行网络训练。具体来说,就是给每个样本分配采样概率,在训练过程中,当样本在本次迭代中被正确分类时,将信号反馈给数据层,降低其采样概率。否则,增加它的采样概率,使得那些经常被正确分类的样本会随着训练的进行而逐渐被忽略。同时还设置了最小采样概率smin,以防那些简单的样本永远不会被抽样。

此外,为了减轻噪声数据的影响,还对噪声样本进行了反馈。对于mini-batch中的每一个样本,如果其特征与对应的原型之间的分数低于一个阈值,我们就会将消息传递给数据层,从而大大降低该样本的采样概率。

4.3 Hard Prototype mining(HPM)

除此之外,人脸识别数据集的类别数量往往成千上万,也就是说其往往包含非常多的人(identity),但是对每个人(类别)而言,和他长得比较像的(类间方差较小的)人是很少的,那么在训练时其实不必和所有类进行比较来计算 Softmax loss。

于是,论文使用了困难原型挖掘,即在类别层次进行困难挖掘,将每个类的权值wi作为其原型,然后为所有类的原型构建一个ANN(angle nearest neighbor)图,找到与每个类最相似的k个类,并将它们放入与类别i相对应的队列Qi中。那么在每一次迭代中,先找出batch 中所有样本对应的类Ca,再根据各自的队列Qi找出所有与batch 中的类最相关的类Cb,最终用Cb的W作为这次迭代的权重矩阵进行计算。

对于这个队列Qi,是动态更新的,首先,对于一个特征xj,如果它的预测结果cp是它对应的类y(j),则不需要更新。其次,如果cp≠ y(j),就通过排序所有类分数大于cos(θy (j) j)的类来更新该优势队列。

 

个人总结

总得来说,对于不平衡数据的处理,AdaptiveFace的模型还是很典型的,首先设计一个模型针对不平衡的损失函数,然后在采样层级对模型进行修改,再加上一个权值的处理。

有一个疑问:HPM的原型(权值矩阵)在模型的初始阶段是怎么得到的?

 

参考博客:

https://zhuanlan.zhihu.com/p/71155683

https://www.cnblogs.com/wanghui-garcia/p/12567817.html

https://zhuanlan.zhihu.com/p/45153595