人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification

简介:

论文地址:https://arxiv.org/abs/1704.06369
代码地址:https://github.com/happynear/NormFace
我们都知道做人脸认证时,使用训练好的模型,测试阶段将特征归一化再做余弦相似度进行比较。而这篇文章主要的想法来源是为什么再训练阶段我们不进行归一化了?本文主要解决的问题就是如何训练的时候增加归一化。
作者分别使用两种策略来训练分析归一化特征:

  1. 修改过的softmax,直接优化余弦相似度。
  2. 重先修改度量学习 的方法。

算法分析

测试阶段将特征归一化并没有研究者能清楚的解释,这种手段如今作为一种trick存在。下表显示了归一化使用前后的对比:
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第1张图片
从表中可以看出将特征归一化可以有效提高识别率。

L2归一化层

作者通过可视化lenet的二维特征。
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第2张图片
从上图中可以看出,当使用欧式距离进行度量时,f1f2距离小于f2f3距离,但f2f3是一类,但使用余弦相似度却能将他们分离。

Proposition 1

人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第3张图片
在使用归一化层时,需要考虑在softmax前的全连接是否需要添加偏置。作者在mnist上做了实验,当使用归一化时特征分布0点附近,如果添加偏置,则一类的特征会变肥,混叠在一起。因此不需要添加偏置。
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第4张图片
实现如下:

layer {
  name: "normalize1"
  type: "Normalize"
  bottom: "last_ip_layer"
  top: "norm1"
}
layer {
  name: "cosine_layer"
  type: "InnerProduct"
  bottom: "norm1"
  top: "cosine"
  param {
    lr_mult: 100
    decay_mult: 0
  }
  inner_product_param{
    bias_term: false
    normalize: true
    num_output: 10572
    weight_filler {
      type: "gaussian_unitball"
    }
  }
}

Layer Definition

首先定义归一化层:
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第5张图片
进行反向传播:
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第6张图片
推导如下:

Reformulating Softmax Loss

作者通过对权重和特征都进行归一化,直接优化余弦相似度。
这里写图片描述
但是仅仅添加归一化进行训练网络不收敛,这是因为添加归一化层后d的取值范围为[-1,1],而正常情况下为[-20,20]和[-80,80]。而在分类任务中,例如1000类,输入图片正确预测的概率为0.007,而在softmax反向传播中,梯度为1-p。因此每一次反向传播时都给较大的梯度给已经正确分类的,所以导致网络难以收敛。
解决的办法就是添加scale层放大d。

实验结果

LFW结果
人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第7张图片

附录推导

人脸识别-NormFace: L2 Hypersphere Embedding for Face Verification_第8张图片

你可能感兴趣的:(人脸识别之损失函数)