在阅读论文过程中的一些简单笔记,记下一些重点和方法。

论文:ArcFace: Additive Angular Margin Loss for Deep Face Recognition

Introduction

目前人脸识别的研究主要分为两条主线:

  1. 训练一个多分类器 softmax-loss-based methods

  2. 学习得到一个图嵌入向量,如triplet-loss-based,通过高内聚,低外聚的原则来区分;

不过这两种方法都存在一定的局限和缺点。

  1. softmax-loss-based: 当人脸类别数目增加的时候,线性变换矩阵的大小线性增加,同时学习到的特征仅仅适用于闭集分类问题,而不适合开集人脸识别问题。
  2. triplet-loss-based: 如果人脸数据较多的时候,为了组成足够的三元组来训练时,将会导致组合爆炸,而且semi-hard样本挖掘对于训练有效的模型将是一个困难的问题。

现有的模型:
Sphereface 引入了一个重要的idea: angular margin,但是在loss中添加了许多近似值,并且加了softmax loss(为了训练稳定),但softmax loss在训练过程中会产生梯度统治的情况;
cosFace则是直接添加了余弦距离惩罚到目标对数上,虽然比sphereface取得了更好的性能,并且实现简单,减轻了联合训练中softmax loss的压力。

本文提出的方法 Additive Angular margin loss(arcface)有效地提升了模型的判别能力,同时也稳定了模型的训练。

Approach

仔细梳理一下上面的伪代码,整理如下:

算法输入:特征缩放尺度 s,间隔参数 m,类别 n,真实值ID gt;

算法流程:

  1. 对经过第一个全连接层fc的输入(一维特征)进行 L2 归一化
  2. 对第一个全连接层fc的权重进行L2归一化
  3. 使用归一化后的数据完成第一个fc的计算得到 fc7,该fc没有偏置项,保证运算结果在[0~1]
  4. 计算 gt 所在位置的fc7的值,位于[0,1]之间, 利用该值作为余弦值,计算反余弦值得到真实类别所在位置的x和w之间的theta。
  5. 添加惩罚角度m到theta,返回余弦值 cos(theta + m)-cos(theta),替代原来fc gt位置的值,得到 fc7
  6. fc7 * s = fc7
  7. softmax + CE loss

到这里就可以去实现算法啦!等写完复现代码就来更新。

原理啥的暂时先不管~