美文网首页人工智能
关于人脸的各种loss

关于人脸的各种loss

作者: Junr_0926 | 来源:发表于2018-09-01 21:05 被阅读166次

    1. 前言

    人脸识别本身是一个很复杂的系统,从人脸的检测,定位,提取到识别,都有很多需要仔细研究的内容。单从人脸的识别来说,我们可以暂时简单地把目标定为,为人脸学习到一个好的特征表示。什么是好的特征呢?简单来说就是,同一个人的人脸特征是相近的,不同的人的人脸特征是远离的。

    2. Deep Learning Face Representation by Joint Identification-Verification

    为了更好地学习特征,这篇论文提出将IdentificationVerification都作为训练的目标,也就是使用两个loss的组合,使得学习的特征能够不仅用于分类,同时用于判断是否是同一个人。相应地:
    Identification的loss,它用于判断属于哪一个类,使用softmax计算概率:

    分类
    Verification的loss,它使得同一个人的不同人脸的特征倾向于类似,不同人的人脸特征趋向于分开。使用L2 Norm,使得不同人的特征大于 verification

    作者还使用了cosine similarity,如下d是两个特征向量的cosine 相似度:

    verification

    训练算法如下:


    algorithm

    很显然,该算法需要每次选取两个样本。

    3. Deeply learned face representations are sparse, selective, and robust

    在这篇论文中,作者提出三个对神经网络效果非常重要的因素:稀疏性,选择性,鲁棒性。
    作者提出了DeepID2+,如下图:


    DeepID2+
    1. 最终的特征维度为512维
    2. 作者将每一层卷积层的特征输出接FC层,加入到loss中。作者认为这样提高了监督信号的传递,以及在较低层的作用。
      如下图,是每层的准确率


      acc

    4. SphereFace: Deep Hypersphere Embedding for Face Recognition

    在这篇论文中,作者对常用的欧几里得距离提出了质疑。在常见的分类任务中,我们都会对特征进行处理,最终经过一个fc层得到每个类别的一个评分,评分最大的,就是我们预测的类。假设一个二分类任务,分类的边界就是:(\textbf{W}_1 - \textbf{W}_2)\textbf{x} + b_1 - b_2 = 0。其中\textbf{W}, b就是分类层的参数。
    倘若对\textbf{W}进行归一化,是长度为1,将b置为0。边界变为:||x||(cos(\theta_1) - cos(\theta_2)) = 0,其中\theta_i\textbf{W}_ix的夹角。如下图:

    Loss
    1. (图a,b)原始的softmax loss的边界是一条直线,它关注的是特征向量和\textbf{W}_i的内积哪个更大。
    2. (图c, d)对\textbf{W}进行归一化后,就相当于在一个球面,现在关心的是特征向量和\textbf{W}_i的角度大小。
    3. (图e, f)由于之前的边界在和两个类都过于接近,因此,得到的特征不会是分类效果好的特征,因此作者提出了A-Softmax。将分类边界变为:||x||(cos(m\theta_1) - cos(\theta_2)) = 0||x||(cos(\theta_1) - cos(m\theta_2)) = 0 。其中m控制的两个边界之间的区域的大小。如果你要问,那中间是什么?我认为,中间属于错分类区域。也就是说,在分类的时候,必须使得特征向量在正确区域的里面,这个正确区域比原来的softmax要小,这就是loss要完成的事情。
      论文中还特地提到了hypersphere manifold,之前看过一些流形的内容,在这里,感觉只是提了一个高大上的概念而已。

    5. NormFace: L2 Hypersphere Embedding for Face Verification

    在这篇论文中,作者对分类层(FC)的特征和参数都进行了归一化处理,却发现在很多轮的训练后,网络依旧没有收敛,因此,作者探究了这个现象的原因,并提出了可以训练这种网络的方法。
    作者回答了如下问题

    1. 为什么对特征归一化处理在测试阶段会很有效?
    2. 为什么仅仅优化cosine相似度无法收敛?
    3. 怎样在使用softmax loss的时候来优化cosine相似度?
    4. 既然归一化后无法收敛,那么针对归一化特征是否有其他合适的loss?

    回答

    1. 对于问题一,参考下图:
      normalization
      左图可以看到如果使用欧几里得距离,f_2f_1更近,和f_3相距较远,但是f_2f_3属于同一类。右图可以看到,用softmax分在类别0的区域。作者发现特征向量之间角度比欧式距离,内积更好。
      作者解释了为什么softmax会出现右图的样子。当使用softmax进行分类的时候,结果就是\textbf{W}_i \textbf{f}最大的那个i。并且,对于最大的那个iP_i(s\textbf{f}) \ge P_i(\textbf{f}) 对于s\lt 1 总是成立的。这说明softmax总是倾向于增大特征的绝对值。对于加了偏置的分类层,作者同样进行了分析,并且发现有些类会聚集在零点附近。因此,倘若进行归一化,就会使得这些类分散在四周,得到非常差的效果。

    论文中,作者对特征和参数使用如下归一化方式:


    normalization

    梯度如下图:


    梯度
    因此,向量正则化后进行反向传递,总会导致向量的长度增加。
    1. 为什么不收敛呢?正则化后,相当于优化余弦距离:
      cosine
      这主要是因为,正则化后的d(\textbf{f}, \textbf{W_i})在-1 到 1之间,然而如果使用内积 和 softmax loss常常是(-20,20)(-80, 80)。这使得概率P_{y_i}(\textbf{f};\textbf{W}) = \frac{e^{W_{y_i}^Tf}}{\sum_j^ne^{W_j^Tf}}很难接近1,即使它已经分的很好了。同时由于softmax loss总会给予ground truth那一类 1-P_i的梯度,使得模型总会给分得很好的样本很大的梯度,然而,分得不好的的梯度却很小。
      作者证明了,即使在所有样本被很完美地分类(每个样本的特征和对应的类的weight 完全一样)时,正则化后的softmax loss也会有一个较大的下限。
      那么解决方法就是,不要正则化到1,而是一个大于1的值(下限)。如下图:
      lower bound

    5.1 REFORMULATING METRIC LEARNING

    作者研究了正则后的metric learning,例如:contrastive loss,triplet loss。由于正则后,内积可以看作欧几里得距离,如下式:

    loss
    loss

    // TODO
    这样的loss有一些不好的地方,就是对于边界内的负样本没有作用。如下图:


    loss

    阴影的红点是没有被loss作用到的点。

    6. Large-Margin Softmax Loss for Convolutional Neural Networks

    L-softmax设计了一个新的分类层,用于增大特征的表达性能。如下图:


    lsoftmax

    7. FaceNet: A Unified Embedding for Face Recognition and Clustering

    在这篇论文中,作者使用了一个神经网络(Inception,ResNet等)作为特征提取器,将输出的特征用triplet loss进行训练。这样的结构不需要分类层,模型会非常小。
    Triplet Loss

    loss
    loss
    训练的时候会选择一个三元组,anchor,negative,positive,其中anchor和positive属于同一个类,negative是其他类。loss就是拉大anchor negative距离,减少anchor和positive距离。
    这样的方法关键在于如何选择三元组。

    8. ArcFace: Additive Angular Margin Loss for Deep Face Recognition

    ArcFace的loss如下:

    loss
    需要注意的是 m 的选择决定了 \theta 的取值范围,如果 m=0.5 ,那么 \theta 仅仅在 \theta \lt 151.35^o 的时候单调,但是作者调查发现, \theta 根本不那么大,因此就没有考虑。
    阅读ArcFace的源码会发现,对于 cos(\theta) 小于0的样本来说,作者并没有进行 cos(\theta + m) 的变换,而是按照原来的fc层进行操作。这样做的原因,猜想是对于 \theta \lt 90^o 来说,本身已经是一个hard example了,也就是说本身的loss已经会很大了,就没有必要加个 m 弄得更大了。在具体的实验中,我也发现如果没有这样的考虑,一视同仁的话,会导致loss很难收敛。

    后记

    还有很多关于人脸,metric learning的文章没有仔细读,即使是介绍的这几篇也不是全部理解。为了在大规模的人脸识别中学习到discriminative的特征,需要在很多地方做文章 。即使是一个更有效的loss,如果参数没有选择好,很可能得到的效果还不如普通的fc。

    相关文章

      网友评论

        本文标题:关于人脸的各种loss

        本文链接:https://www.haomeiwen.com/subject/jrfuwftx.html