简介
文章来源CVPR2017。核心思想是修改SoftmaxLoss来增大类间角度距离。
文章地址:https://arxiv.org/abs/1704.08063
代码地址:https://github.com/wy1iu/sphereface
SoftmaxLoss
首先回忆一下softmax。对于二分类的情况,softmaxloss产生的后验概率为:
由最大似然原则,使用如下公式作为loss函数,即softmaxloss.因此softmaxloss主要分为两步,softmax和logloss,softmaxloss定义如下:
将上述公式展开得到:
Modified SoftmaxLoss
将上述公式的权值的模进行归一化,即
b=0
得到Modified SoftmaxLoss。
通过2D特征显示如下:
A-SoftmaxLoss
和Large-Margin文章类似,作者的目的使类间的角度大,因此使用超参m来控制分类边界。
而使用余弦角度是有限制的,范围为为了去掉这个限制条件,重先定义:
只要满足单调递减的限制。
实验
作者使用 CASIA-WebFace 作为训练集,预处理方式使用MTCNN截取人脸,并做相似变换,每个通道减去127.5并处以128。
结果如下:
参数
超参较多,而且以来数据集,因此实验需要大量的调参:
margin_inner_product_param {
num_output: 10572
type: QUADRUPLE
weight_filler {
type: "xavier"
}
base: 1000
gamma: 0.12
power: 1
lambda_min: 5
iteration: 0
}
labmda变量源码设置如下:
lambda_ = base_ * pow(((Dtype)1. + gamma_ * iter_), -power_);
lambda_ = std::max(lambda_, lambda_min_);