SphereFace: Deep Hypersphere Embedding for Face Recognition
(>< 表示不等于)
本文是发表在CVPR2017年的论文,作者院校:乔治亚理工学院,卡耐基梅隆大学,中山大学
算法核心思想很简单,将原始的距离度量的方法转换成了角度度量。
人脸识别的基本方法和难点
基本方法就是将同类的特征映射距离拉近,将异类特征映射推远,
难点在于同类图片的内部差异性很大,而人脸识别相当于是细粒度分类,对于不同人的图片对于差异性也很小,如何调节这种矛盾非常关键。
那么引入一个观点,能抛弃基本方法,找到一个更合适的方法,让整个问题避开这个难点呢
相关算法探讨
(作者在文中对于之前算法的评价真的很到位),首先,一些文章引入的是基于softmax loss 的方法,众所周知基于softmax loss的算法其实都是从基本的分类得来的,但是这种算法只能得到有分类能力的特征,而这些特征的识别能力比较欠缺(这句话不是非常清楚什么意思),这种算法只使用了类别标签学习,对于不同类别之间的关系问题没有特别的关心,但是要突出一下类间的差异性会更适合识别这个任务,打个比方,就是只使用标签信息提取特征能学到人和其他物种的区别,但是由于区分度特征不够,不能分别这个人脸到底是谁的人脸,综上,没有类间类比信息的算法只能实现粗粒度分类无法实现细粒度分类,只有通过比较才能得到更细节的信息 那么是否只有通过比较才能得到更细节的信息呢加入attention看看,针对这个问题,后面的文章就采用了triplet loss,contrastive loss,center loss 结合softmax 来提高算法的区分能力,对于center loss 只能让类内距离缩小,然而却没有对类间的距离做相应的处理,contrastive loss 和triplet loss 是可以在增加类间距离的同时让类内距离更小的,(triplet loss 达到了the start of the art),但是contrastive loss,triplet loss 不可能对每一个样本都做约束(穷举后是指数级),同时,如果没有做特殊的处理,简单样本多学习,困难样本学习的少,会导致整体效果不是很好,甚至导致不收敛。对于这种情况,精调和算法的设计细节就显得尤为重要了,而这些是会造成时间的浪费和performance-sensitive(不好翻译,直接理解为敏感吧)
将数据映射到一个球面,而球面是封闭的,对开集处理并不好。
想法
有些算法将基于欧几里得度量的损失算法和softmax loss 相结合共同构建出了了一个联合的监督信息,然而,事实证明,(A discriminative
feature learning approach for deep face recognition. In ECCV这篇论文应该是本篇论文的主要启蒙论文)其实通过softmax loss 学习到的特征本质上是一种角分
布,这就意味着将欧几里得度量的损失和softmax损失结合不是一种空间上的结合,效果不会很好。
相关工作
关于人脸开集处理的论文最早是在2014年提出来的。
关于softmax的演变
本文的主要方法就是A-softmax loss 我们看看是怎么慢慢从softmax慢慢演变过来的,(只针对binary-class case分析)。
原始的softmax表达式:
p i = e x p ( W i T x + b i ) ∑ j e x p ( W j T x + b j ) p_i = \frac{exp(W^T_ix + bi)}{\sum_{j}{exp(W^T_jx + bj)}} pi=∑jexp(WjTx+bj)exp(WiTx+bi)
由于向量点积的形式可以用向量角度和模的方式换算,
对应的
W i T x + b i = ∣ ∣ W i T ∣ ∣ ∣ ∣ x ∣ ∣ c o s ( θ i ) + b i W^T_ix + bi = ||W^T_i|| ||x|| cos(\theta_i) + b_i WiTx+bi=∣∣WiT∣∣∣∣x∣∣cos(θi)+bi
θ i \theta_i θ