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

简介:

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

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

算法分析

测试阶段将特征归一化并没有研究者能清楚的解释,这种手段如今作为一种trick存在。下表显示了归一化使用前后的对比:
这里写图片描述
从表中可以看出将特征归一化可以有效提高识别率。

L2归一化层

作者通过可视化lenet的二维特征。
这里写图片描述
从上图中可以看出,当使用欧式距离进行度量时,f1f2距离小于f2f3距离,但f2f3是一类,但使用余弦相似度却能将他们分离。

Proposition 1

这里写图片描述
在使用归一化层时,需要考虑在softmax前的全连接是否需要添加偏置。作者在mnist上做了实验,当使用归一化时特征分布0点附近,如果添加偏置,则一类的特征会变肥,混叠在一起。因此不需要添加偏置。
这里写图片描述
实现如下:

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

首先定义归一化层:
这里写图片描述
进行反向传播:
这里写图片描述
推导如下:

Reformulating Softmax Loss

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

实验结果

LFW结果
这里写图片描述

附录推导

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值