方法动机

目前在人脸识别领域中,有研究尝试在软最大化损失中加入边距来提高样本的可分离性。其中基于大规模训练和进行设计的DCNN架构、软最大化损失、三元组损失方法都可以获得出色人脸识别性能。不过各自都有一些缺点,
软最大化损失:

  • 对于封闭分类问题可以有效分类,但对开放集表现不佳,对人脸的新颖性检测效果不佳
  • 线性变换矩阵随着类别数线性增加

三元组损失:

  • 对于大规模数据集三元组数量快速增加,显著降低训练速度
  • 挖掘模糊样本信息来训练模型十分困难

用于深度人脸识别的附加角边距损失 - 图1

简介

本文提出了一种加性角边距损失(Additive Angular Margin Loss,ArcFace),增强判别力的同时还有着清晰的解释。具体来说,计算DCNN输出的当前特征和中心特征的余弦距离,利用反余弦函数得到当前特征和特征中心的角度,为不同类之间附加角度边距,然后重新得到余弦函数。用这种方法处理所有特征后再进行分类。
ArcFace容易收到噪声数据的影响,本文进一步提出了子中心ArcFace,每个类包含K个子中心,训练样本只要靠近K个子中心的任意一个即可。所以子中心ArcFace鼓励一个主要的子类,噪声信息则靠近不同的子类,从而提高本方法的稳健性。
除了可以进行分类和判别,AceFace也可以通过特征向量生成人脸图像,为主体身份生成保留信息,通过实验表明,只需要少量先验约束,ArcFace可以增强判别特征并加强人脸合成。在数十个大规模图像和人脸识别数据集上,ArcFace达到了最先进水平,精度达到了97.27%

方法核心

ArcFace

目前最常用的交叉熵损失是在软最大化操作上计算的,用于计算预测概率和目标概率之间的差距

其中软最大化函数并没有明确优化特征分布,从而强制类内样本更加相似,类间样本更具有多样性,导致在类内差距大、类间差距小的人脸设备的性能降低
本位提出在计算软最大化时为各个类之间的边距加入额外损失,为了简单起见,令偏置。
根据向量运算$\vec a \cdot \vec b =|\vec a||
\vec b|\cos \theta W{j}^{T} x{i}=\left|W{j}\right|\left|x{i}\right| \cos \theta_{j}x_i\ell_2$范数s替换特征的模,这使得预测只关注特征和权重之间的角度,将学习到的特征嵌入到超球面上

将损失表示为向量之间的夹角后便可以加入本文提出的边距了,因为每个特征都处在权重向量的周围,所以加入了边距损失,同时增强类内的紧凑型,增大类间的差异性。由于附加的角边距等于超球面的距离损失,所以命名为ArcFace

边距可视化

通过一个8个类别的二维特征归一化后嵌入到一个固定半径的弧中进行可视化,ArcFace保证了各个类别之间强制增加边距
用于深度人脸识别的附加角边距损失 - 图2
通过加入约束,在训练开始时特征和类特征之间的夹角约为90度,在训练结束后集中在35°左右。和之前的方法相比,使用二分类问题作为可视化观察ArcFace和其他方法的差别,由于边界的微小差距也会影响最后分类精度,本文的方法在任何位置都可以保证边距相同,保证了收敛的稳定性。
用于深度人脸识别的附加角边距损失 - 图3

其他类内类间损失

将原始方法转换为角度表示后可以很容易的加入其他损失,比如可以通过为样本和真实类别的中心夹角附加损失来减少类内差异,可以通过为不同类中心的夹角附加损失增加类间差异。

子中心ArcFace

尽管ArcFace可以高效的进行人脸特征进行有效嵌入,不过在由噪声影响的情况下,保证模型的稳健性是一大挑战。本文提出子类的思想,可以直接应用在ArcFace上。
用于深度人脸识别的附加角边距损失 - 图4
本方法为每个类别中心设置了K个子中心,在归一化的过程中,对每个子中心计算相似性得分,每个子中心得分都可以通过之前的公式计算得到,使用子中心对同一类别的各个样本进行聚类,可以发现,大部分样本都靠近某一个中心,成为主导子类,只有一小部分离群的噪声样本,这些样本会被分在同一类的其他子中心里。通过这种方法可以在不需要人为干涉的情况下将干净样本和噪声样本分开来。
不过尽管这种方法可以增加稳健性,不过也减少了类内紧凑性,最好的办法肯定是在干净的数据集上进行训练,不过非主导子类已经将这些样本区分开来,通过统计子类中样本的数量,作者将同一类的样本分为四类:

  • 57% 主导子类的易清洁样本
  • 12% 主导子类的硬噪声样本
  • 4.2%非主导子类的易清洁样本
  • 26% 非主导子类的硬噪声样本

通过不同的角度分布可以在训练集中区分这些样本,从而找到一个合适的阈值来区分高置信度噪声样本。在子中心ArcFace中,这些非主导子类的样本被推到非主导子中心中,从而保证网络的稳健性。为了保证类内紧凑性,在网络具有足够判别力之后,可以直接丢弃非主导子中心,并使用恒定角度阈值来丢弃高置信度的噪声数据,然后在干净的数据集上重新开始进行训练。

反向生成

用于深度人脸识别的附加角边距损失 - 图5
为了保证模型的可解释性,只需要使用损失的梯度和存储在BN层的信息,ArcFace还可以协助生成视觉上合理的人脸图像,避免出现高置信度的错误判断。首先随机生成噪声图,然后进入卷积神经网络中提取特征,使用损失函数来让提取特征的均值方差和之前训练的储存在批量规范化层中的对应的均值和方差的先验分布相匹配,在和之前的ArcFace联合优化过若干轮后就可以反向生成该类别的图像。

总结

本文提出了针对人脸识别的损失函数,ArcFace十分有效的提高对人脸识别的判别力,同时能对噪声样本产生稳健性,并可以识别出高置信度的噪声样本。最后还可以通过网络中的先验知识反向生成图像数据。
本文的方法在细粒度识别中十分有用,人脸识别面对的困难和细粒度图像识别几乎相同。本文提出的几个要点都可以作为细粒度图像的突破口,比如通过对类间加边距,从而加大类间距离,缩小类内距离。也可以反向生成每个类别的数据,从而提高网络的可视化能力。
在本文方法的基础上,我认为可以动态调整各个类别之间的距离,比如有些类别之间的确实十分相似,只有极少数特征不相同,如果强行要求他们类间距离变大,可能会赋予某些特征过高的权重从而影响精度,所以可以根据软最大化输出的结果,动态生成各个类别之间的间距。在网络反向生成上,可以结合最新的注意力机制,找出最具有判别力的区域特征,将其反向生成,并可以尝试多次生成该类的样本从而增加训练样本数。