返回主目录
返回 人脸识别 目录
下一章:深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解
目录内容:
深度篇——人脸识别(一) ArcFace 论文 翻译
深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解
论文地址: 《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》
源码地址: InsightFace: 2D and 3D Face Analysis Project
本小节,ArcFace 论文 翻译,下一小节 人脸识别代码 insight_face_pro 项目讲解
一. ArcFace 论文 翻译
1. 概述
使用深度卷积神经网络(Deep Convolutional Neural Networks, DCNNs) 来学习大规模人脸识别特征 的一个主要挑战是设计一个适当的损失函数来增强识别的能力。中心损失弥补(惩罚,类似于正则项) 了欧氏空间中深度特征与对应类别中心之间的距离,从而使得类内紧凑而简洁。SphereFace 假设在最后全连接层对矩阵进行线性变换可以作为在角空间中类中心的代表,并对深度特征和其对应权重之间的角度进行乘法补偿(惩罚,类似于正则项)。最近,一个流行的方向是将边缘信息纳入到已确定的损失函数中,并以此来最大限度地提高面类可分性。在本论文中,我们提出一种 边缘夹角附加损失(Additive Angular Margin Loss, AAML) (ArcFace) 来获得人脸识别的高可辨特征。我们所提出的 ArcFace 由于在超球面精确对应其球面距离, 所以其具有清晰的几何可解释性。我们使用超过 10 个目前最好的人脸识别方法(有争议的) 进行最广泛的评估实验,其中包括 一个拥有万亿级配对的新型大规模图像数据库和一个大规模视频数据集。通过这些实验,我们证明了 ArcFace 始终超越那些目前最好的人脸识别方法,并且它的实现非常简单,而计算开销基本可以忽略不计。我们开源所有优化过的训练数据,训练代码,预训练模型和训练日志,这将有助于别人对本论文进行探索,并获得更好的结果(开源,鼓励大家去探索,并在这个方向获得更好的研究结果)。
2. 介绍
使用嵌入式的深度卷积神经网络(DCNNs) 是人脸识别的首选方法。人脸图像的 DCNNs map 通过一个姿态归一化步骤处理后,变成一个内类小距离和内类大距离的特征。
对于训练人脸识别的 DCNNs ,目前有两条主流研究方向。一种是使用一个 softmax 分类器来训练能够在训练集上区分不同的身份的多类分类器,另一种则是直接学习一个嵌入式分类器,例如 triplet loss (三重损失,即 3 个损失函数)。基于大规模训练数据集和精细的 DCNN 结构,这两者都是基于 softmax-loss 和 基于 triple-loss 的方法,它们在人脸识别上获得卓越的性能。然而,无论是 softmax loss 还是 triplet loss 都有一些缺点。
对于 softmax loss:
(1). 线性变换矩阵 的大小随着常数 n 线性递增(d 为维度,n 可以理解为 n 分类,分类数大,矩阵必然大)。
(2). 所学习到的特征对于闭合分类问题是可分离的,但对于开放类型的(即识别类别不是固定的,而是无限大的) 人脸识别问题是识别能力欠缺的。
对于 triplet loss:
(1). 人脸 triplets 数量会出现一个组合爆炸,特别是对于大规模数据集,它会导致迭代步骤显著增加。
(2). 而有效训练模型的一个非常困难的问题是: semi-hard 样本采样(semi-hard 样本采样: negative example 与 anchor 距离大于 anchor 与 positive example 的距离,但还不至于使得loss, 即 )。
现在已经提出了几种变体函数来提升 softmax loss 的分类能力。Wen 等人首创 的 centre loss,它通过每个特征向量与其类中心之间的欧氏距离来获得类内的紧凑性,而通过对 softmax loss 联合惩罚项来控制类间的离散性。然而,在训练期间更新真实的中心是极其困难的,因为可供训练的人脸类别数量会急剧增加
通过观察,最后一个全连接层关于 DCNN 训练分类的 softmax loss 的权重 承担与每一个人脸类别中心概念的相似性,并提出一个乘法的边缘夹角惩罚项来执行额外的类内的紧凑和类间的差异,从而导致训练模型具有更好的辨别能力。尽管 Sphereface 引入了边缘夹角这一重要思想,但是它的损失函数需要一系列的近似值才能被计算出来,这就导致该网络的训练波动很大。为了能稳定训练,它们提出了包含标准 softmax loss 的混合损失函数。按照以往的经验,softmax loss 在训练过程中起着主导作用,因为基于整数乘法的边缘夹角会使得目标对数曲线非常陡峭,从而使得它难以收敛。与 Sphereface 相比,CosFace 直接在目标对数中加入余弦距离惩罚项来获得更好的性能,但实现起来更容易,并使得联合监督摆脱了对 softmax loss 的需要。
在本论文,我们提出一种 边缘夹角附加损失(Additive Angular Margin Loss, AAML) (ArcFace) 来进一步提升人脸识别模型辨别能力和训练过程的稳定性。DCNN feature 和 最后一个全连接层的点积等于 feature 和 weight 归一化之后的余弦距离,如下图Figure 2 所示:
我们利用反余弦函数来计算当前的 feature 和 目标 weight 之间的角度。然后,我们给目标角度添加一个附件的边缘夹角,并通过余弦函数来恢复得到目标对数。之后,我们根据固定 feature norm 来重新调节所有的对数,并且随后的步骤在 softmax loss 中恰好相同。我们提出的 ArcFace 方法优点总结如下:
Engaging. ArcFace 利用 归一化后的超球面的角度和弧度之间精确的对应关系来直接优化球面距离的边缘。我们通过分析 feature 和 weights 之间的角度统计来直观说明在 512-D 空间中发生了什么。
Effective. ArcFace 在 包括 大规模图像和视频数据集 的 10 个人脸识别基准上获得了最佳性能。
Easy. ArcFace 对于上图 Figure 2 中的 Algorithm 1 只需几行代码就搞定,并且对基于计算图形的深度学习框架(如,MxNet, Pytorch 和 TensorFlow 等) 是非常容易实现的。此外,ArcFace 不需要与其他损失函数结合就获得稳定的性能,并且对于任何训练数据集都很容易收敛。
Efficient. ArcFace 在训练过程中只增加了一点微不足道的计算复杂度。当前 GPUs可以很容易支持训练百万级身份(意思是,百万级个不同人脸训练),而模型并行策略可以很容易支持更多的身份。
3. 提议方法
(1). ArcFace
使用最广泛的分类损失函数 softmax loss 表示如下:
, 表示第 个样本特征的深度, 它属于第 个类别。 本论文将嵌入特征的维度 设置为 512。
表示 权重 中的 第 列,而 则是它的 bias 项。
表示 batch size 大小。
表示 类别数。
传统的 softmax loss 在深度人脸识别中得到了广泛应用。然而,softmax loss 函数并不能明确对类内样本的相似性和类间样本的差异性 执行更高的特征嵌入优化,从而导致在大量的类内外观变化(例如,姿态变化、年龄差异) 和 大规模的测试场景(例如 百万、万亿 个 匹配) 下深度人脸识别性能存在巨大的差异。
为了简洁明了,我们固定 bias 。之后,我们将对数转换为: ,其中 为权重 和 特征 之间的夹角。 紧接着,我们通过 归一化处理来固定个别权重 。再之后,我们同样通过 归一化处理来固定嵌入特征 ,并将其缩放到 。feature 和 weight 的归一化步骤使得预测值仅依赖于 feature 和 weight 之间的夹角。因此,学习到的嵌入 feature 分布在半径为 的超球面上(意思是,将人脸特征分布到半径为 的超球面上)。
由于嵌入特征是围绕着超球面上的每个特征的中心分布的,我们在 和 之间增加一个边缘夹角附件惩罚项,来同时增强类内的紧凑性和 类间的差异性。由于提出的边缘夹角附件惩罚项等于规范化超球面上的球面距离边缘惩罚,我们将该方法命名为 ArcFace。
我从 8 个包含足够样本的不同身份人脸数据(意思是不同人的人脸图像数据,大概 每个人有1500 图像)选择人脸图像,分别使用 softmax loss 和 ArcFace loss 训练 2-D 特征嵌入网络。 softmax loss 提供大致可分离的嵌入特征,但在决策边界却会产生明显的模糊;而 ArcFace loss 则能使最相近的类之间产生明显的差异(即能使相似而不同的类产生明显的差异,有利于区分)。具体如下图 Figure 3. 所示:(softmax loss 的类与类之间相接,边界模糊,不容易区分;而 ArcFace loss 类与类之间不相接,没有模糊边界,容易区分)
(2). CosFace 与 SphereFace 的比较
数值相似. 在 SphereFace、ArcFace 和 CosFace 中,提出了 3 种不同的边缘惩罚项,即分别为 边缘夹角乘法惩罚 、边缘夹角附加惩罚 、边缘余弦附加惩罚 。从数值分析角度看,无论是增加夹角空间还是余弦空间,不同的边缘惩罚项上都是通过目标对数惩罚项来增强类内的紧凑性和类间的差异性。下图 Figure 4(b) 是我们分别在 SphereFace、ArcFace 和 CosFace 的最佳边缘设置下所绘制的目标对数曲线。
而上图 Figure 4(a) 是目标对数曲线在 [20°, 100°] 的展示,因为在 ArcFace 训练期间 与 之间的夹角从 90° 附近开始 (随机初始化) ,并在 30° 附近 结束。在直观上,在目标对数曲线中有 3 个因素会影响它的性能:即 起点、斜率 和 终点。
通过结合所有的边缘惩罚项,我们在一个统一的框架下实现 SphereFace, ArcFace 和 CosFace,并以 , 和 作为超参数:
如上图 Figure 4(b) 所示,通过结合上述所有的动态边缘 ,我们很容易就能够达到其他一些高性能的目标对数曲线(即获得与那些高性能目标一样的性能)。
几何差异. 尽管 ArcFace 与之前的工作在数值上相似,但由于边缘夹角可以准确的对应球面距离,因此所提出的附件边缘夹角具有更好的几何特性。我们将 softmax、SphereFace、CosFace 与 ArcFace 的二分类情况下的决策边界进行比较,如 下图 Figure 5 所示:
通过比较发现,SphereFace 和 CosFace 只有一个非线性的夹角边缘。
在模型训练时,边缘设计尽管只是微小的差异,也会产生 "蝴蝶效应" 而导致最后差异悬殊。例如,原始的 SphereFace 使用退火优化策略。为了避免训练开始时出现的差异,SphereFace 使用 softmax 的联合监督来弱化乘法边缘惩罚。我们实现了一个新版本的 SphereFace ,它在边缘上没有要求整数型,而是通过使用反余弦函数来替代复杂的倍角公式。在我们的实现中,我们发现 可以获得与 原始 SphereFace 相似的性能,并在收敛上没有任何困难。
(3). 与其他 losses 的比较
基于 feature 和 weight 向量 的夹角,还可以设计出其他损失函数。例如,我们可以设计一个损失函数来增强超球面上类内的紧凑性和类间的差异性。下图 Figure 1. 中展示的是本论文中 3 个 losses 的比较。
内部损失 的设计是通过缩小样本与 ground truth centre 之间 角度/弧度 来提升类内的紧凑性。
外部损失 的目标是通过增大不同中心点之间的 角度/弧度 来提升类间的差异性。
外部损失在这里只是 最小超球能力(Minimum Hyper-spherical Energy, MHE) 方法中的一个特例。隐藏层和输出层通过 MHE 来正则化。在 MHE 的论文中,通过将网络最后一层的 SphereFace loss 和 MHE loss 结合起来 提出了一种 损失函数的 特例。
三元损失 旨在扩大 triplet samples 之间的边缘弧度。在 FaceNet 中,在归一化 features 上使用欧氏边缘。这里,我们采用 triplet-loss,并通过 features 所代表的角度 表示为 。
4. 实验
(1). 实现细节
数据集. 为了与其他方法相比较时能公平起见,我们分别使用(包括 MS1M-DeepGlint 和 Asian-DeepGlint) 在内的 CASIA、VGGFace2、MS1MV2 和 DeepGlint-Face 来作为训练数据。如下表 Tabel 1 所示:
请注意,前面所提出的 MS1MV2 是 MS-Cele-1M 数据集的半自动优化版本。具我们所知,我们是第一个对大规模人脸图像注释使用特定种群注释器的人,因为如果注释器不熟悉身份(identity) 的话,事物的边界(例如 hard samples 和 noisy samples) 是很难区分的。在训练过程中,我们探索有效的人脸验证数据集(例如,LFW、CFP-FP、AgeDB-30) 来检验不同设置所得到的提升。除了被使用最广泛的 LFW 和 YTF 数据集外,我们同样对 ArcFace 在最近 大姿态和大年龄数据集(如 CPLFW 和 CALFW) 进行了性能报告。我们同样也在大规模图像数据集(例如,MegaFace、IJB-B、IJB-C 和 Trillion-Pairs) 和 视频数据集(iQIYI-VID) 上对所提出的 ArcFace 进行了广泛的测试。
实验设置. 对于数据预处理,我根据最新的论文通过利用 5 个 面部点来生成归一化的人脸裁剪图(112 x 112)。对于嵌入网络,我们采用广泛使用 CNN 架构的 ResNet50 和 ResNet100。在最后一个卷积层之后,我们研究 BN-Dropout-FC-BN 结构来获得最后 512-D 的嵌入特征。在本论文,我们使用([训练数据集,网络结构,损失]) 来帮助理解实验的设置。
我们随后将特征的尺度 设置为 64,并选择 ArcFace 的边缘夹角 为 0.5。在本论文中,我们所有的实验都是通过 MXNet 来实现的。我们将 batch size 设置为 512,并在 4 块 NVIDIA Tesla P40 GPUs(24GB) 上训练模型。对于 CASIA 数据,开始学习率设置为 0.1,当迭代到 20K 和 28K 次时 再分别将学习率 除以 10(即缩小为之前的 十分之一)。当我们训练到 32K 个迭代次数时,结束训练。对于 MS1MV2 数据集,我们分别在 100K 和 180K 个迭代次数时将学习率除以 10,并在 180K 个迭代次数之后结束训练。我们将动量设置为 0.9,衰减率为 5e - 4。在测试时,我们仅保存特征嵌入网络,而丢弃掉全连接层(ResNet50 为 160MB,ResNet100 为 250MB),并对每张归一化的人脸图像提取 512-D 特征(ResNet50 为 8.9ms/face,ResNet100 为 15.4ms/face)。我们只需简单计算模板中所有图像 或 视频中的所有帧 的特征中心,便可获得模板(例如 IJB-B 和 IJB-C) 或视频(l例如,YTF 和 iQIYI-VID) 的嵌入特征。请注意,训练集和测试集之间的重叠身份(identities) 必须被移除,以便于进行严格的评估,并且我们对于所有的测试都仅使用单一的裁剪人脸图像(意思是,测试时,一次只跑一张图像)。
(2). 在 losses 上的对比研究
我们首先探索的是 ArcFace 在 CASIA 数据集和 ResNet50 下的边缘夹角的设置。在我们的实验中,最佳的边缘观察值为 0.5。如下表 Table 2. 所示:
利用公式 (4) 中提出的边缘框架组合,对于 SphereFace 和 CosFace 很容易设置它们的边缘,并且发现当它们的设置分别为 1.35 和 0.35 时可获得最优的性能。我们对 SphereFace 和 CosFace 的实现获得了杰出的性能,在收敛上观察不到任何困难。在 3 个测试数据上,ArcFace 获得了最高的验证精度。此外,通过上图 Figure 4(b) 的目标对数曲线指导下,我们结合边缘框架(观察到在 CM1(1,0.3,0.2) 和 CM2(0.9,0.4,0.15) 时可以获得一些最佳性能) 进行大量的实验。边缘框架的结合比单独使用 SphereFace 和 CosFace 的性能更好,但其上限受限于 ArcFace 的性能。
除了基于边缘的方法进行比较之外,我们对 ArcFace 和 其他损失(旨在增强类内的紧凑性(公式 5) 和类间的差异性(公式 6) ) 做了进一步的比较。我们选择 softmax loss 作为基线,并观察到 CFP-FP 和 AgeDB-30 在 weight 和 feature 在归一化处理之后性能有所下降。而 CFP-FP 和 AgeDB-30 通过将 softmax loss 和 intra-class loss 结合起来后,性能则有所提升。然而,通过将 softmax loss 和 inter-class loss 结合起来后,则只是轻微的提升了一点点精度。事实上,Triplet-loss 比 Norm-Softmax loss 的性能更好,这就表明边缘对于提高性能有着重要的作用。然而,在 triplet 样本中使用边缘惩罚项比在样本和 在 ArcFace 的中心点之间插入边缘 的性能更差。最后,我们可以将 Intra-loss、Inter-loss 和 Triplet-loss 合并到 ArcFace 中去,但通过观察发现,这并没有任何提升,因此这表明 ArcFace 已经增强了类内紧凑性、类间的差异性和边缘分类。
为了更好的理解 ArcFace 的优秀,在不同的损失下,我们对训练数据(SIA) 和 测试数据(LFW) 给出了详细的角度统计,如下表 Table 3. 所示:
我们发现:
①. 与 ArcFace 的嵌入特征中心(14.29°) 几乎同步,但 与 Norm-Softmax 的嵌入特征中心(44.26°) 则有着明显的偏差。因此,在训练数据上, 之间的夹角并不能完全代表类间的差异性。此外,通过训练网络计算出的嵌入特征中心更具代表性。
②. 类内损失能有有效缩小类内变化,但同样会带来微小的类内夹角。
③. 类间损失会略微 直接增加 和 间接增加 嵌入网络 的差异性,但同样会增加类内夹角。
④. ArcFace 已经有很好的 类内紧凑性 和 类间的差异性。
⑤. Triplet-Loss 拥有相似的类内紧凑性,但其 类间差异性却比 ArcFace 的要差一些。此外,在测试集上 ArcFace 比 Triplet-Loss 拥有更明显的边缘。如下图 Figure 6. 所示:
(3). 验证结果
在 LFW、YTF、CALFW 和 CPLFW 上的结果:
LFW 和 YTF 数据集是应用最广泛的无约束人脸验证 图像和视频 的基准。在本论文,我们遵循外部标签无限制的数据协议的性能报告。报告如下表 Table 4 所示:
ArcFace 在 MS1MV2 数据集上使用 ResNet50 训练 通过在 LFW 和 YTF 数据集上显著的边缘 超过了基线(例如,SphereFace 和 CosFace),这表明附加边缘夹角惩罚可以显著地提高深度学习到的特征的辨别能力,这就证明了 ArcFace 的有效性。
除了在 LFW 和 YTF 数据集之外,我们同样报告了 ArcFace 在最近介绍的数据集(例如,CPLFW 和 CALFW 数据集) 上的性能,与 LFW 相同,这些数据显示具有更高的姿态和年龄变化 。在所有开源的人脸识别模型中,ArcFace 模型被评论为最佳的人脸识别模型,其性能明显优于同类模型,如下表 Table 5 所示:
在 LFW、CFP-FP、AgeDB-30、YTF、CPLFW 和 CALFW 数据集的正负样本对的夹角分别(使用 ArcFace 在 MS1MV2 数据集和 ResNet100 下训练的模型来预测),如下图 Figure 7 所示:
我们能明显地发现由于姿态和年龄的差异造成了类内差异,它显著增加了正例对之间的夹角,从而使得人脸验证的最佳阈值的增大,并在直方图上产生更多的混淆区域。
MegaFace 上的结果:
MegaFace 数据集包含 690K 个不同人的 1M 张图像 作为图库集,以及 530 个不同人的 100K 张照片作为调查集。对于 MegaFace 数据集,在两个协议(大型和小型训练集) 下有两个测试场景(识别和验证)。在训练集上,如果它包含的图像超过 0.5M 的话,则定义为大型数据。为了公平起见,我们分别在 CAISA 和MS1MV2 下的 大协议和小协议(即 大型训练集和小型训练集) 训练 ArcFace。ArcFace 在 CASIA 数据上训练获得最佳的 single-model 识别和验证的性能,它不仅超过了强大的基线(例如,SphereFace 和 CosFace),而且也超过了其他已发布的方法。如下表 Table 6 所示:
我们发现识别和验证之间存在明显的性能差异,所以我们在整个 MegaFace 数据集中执行彻底的手动检查,于是发现是一些人脸图像的标签错了,这严重地影响了性能。因此,我们对整个 MegaFace 数据集 进行手动提炼,并报告了 ArcFace 在 MegaFace 上的正确性能。在提炼后的 MegaFace 数据集上,ArcFace 仍然明确的超越了 CosFace,并在 验证和识别上获得了最佳性能。
在大型协议下,ArcFace 明显地超越了 FaceNet,与 CosFace 相比较,ArcFace 在获得可比较的身份结果,并获得更好验证结果。由于在 CosFace 使用了一个私有的训练数据,因此我们将 CosFace 在 MS1MV2 数据集上利用 ResNet100 重新训练。在公平比较下,ArcFace 显得比 CosFace 优越,并在 识别和验证下是 CosFace 的上限,如下图 Figure 8 所示:
在 IJB-B 和 IJB-C 上的结果:
IJB-B 数据集包括 1854 个试验者 的 21.8K 张静态图像和 来自 7011 个视频的 55K 帧视频。总共有12115 个模板 的 10270 个真实匹配和 8M 个冒名匹配 的 。IJB-C 数据集是 IJB-B 数据集的进一步扩展,它拥有 3531 个试验者的 31.3K 张静态图像和 来自 11779 个视频的 117.5K 视频帧。总共有 23124 个模板 的 19557 个真实匹配和 15639K 个冒名匹配。
为了与大量最近的方法公平比较,我们在 IJB-B 和 IJB-C 数据集上,使用 VGG2 数据集作为训练数据,并使用 ResNet50 为嵌入网络来训练 ArcFace。我们将 ArcFace 的 TAR(@FAR=1e-4) 与之前最佳的方法进行比较,如下表 Table 7 所示:
在 IJB-B 和 IJB-C 数据集上 ArcFace 能够明显地提升性能(大概 3 ~ 5%,大大地降低了错误率)。鉴于更多的训练数据(MS1MV2) 和 更深的神经网络(ResNet100) 的支持,ArcFace 在 IJB-B 和 IJB-C 数据集上可以进一步的提升 TAR(@FAR=1e-4),分别为 94.2% 和 95.6%。我们展示 ArcFace 在 IJB-B 和 IJB-C 数据集上完整的 ROC 曲线,即使在设置新基线 FAR=1e-6 下也获得了感人的性能,如下图 Frigure 9 所示:
在 Tripllion-Pairs 上的结果:
Tripllion-Pairs 数据集从 Flickr 提供 1.58M 张图像作为图库集,并以 274K 张 来自 5.7K LFW 数据集身份图像作为调查集。图库集和调查集之间的每一对用于评估(总共 0.4 trillion 对)。我们对 ArcFace 在不同数据集上训练的性能进行比较,如下表 Table 8 所示:
与 CASIA 相比,MS1MV2 数据集明显提高了性能,甚至比具有双重身份号的 DeepGlint-Face 数据集稍微提高了点性能。当将 MS1MV2 的所有身份 和 DeepGlint 的亚洲名人相结合时,ArcFace 获得了最佳的识别性能 84.840%(@FPR=1e-3),并与来自于领导委员会最近大量提交的(CIGIT_IRSEC) 相比较获得相当的验证性能。
在 iQIYI-VID(爱奇艺-VID) 的结果:
iQIYI-VID 视频挑战包含 565372 个视频片段(219677 个训练集,172860 个验证集和 172835 个测试集),其中 4934 个身份来自于 iQIYI 的综艺节目、电影和电视剧。每个视频的长度从 1s ~ 30s 不等。这些数据集提供多模型信息,包括人脸、衣服、声音、步态和用于字符识别的字幕。iQIYI-VID 数据集使用 MAP@100 作为评估指标。MAP(Mean Average Precision, MAP) 是指总的平均精度率,即在测试集中每个人的 ID 对应总的平均精度率对视频中个人 ID 的补偿,在训练集中同样。
ArcFace 在使用 ResNet100 与结合 MS1MV2 数据集和 亚洲数据集训练上设置了一个高的基线(MAP=79.80%),如下表 Table 9 所示:
每个训练视频基于嵌入特征的情况下,我们另外训练一个具有分类损失的 3 层全连接网络,来得到在 iQIYI-VID 数据集上的自定义特征描述器。在 iQIYI-VID 训练集上学习的 MLP 将 MAP 显著地提升了 6.60%。鉴于模型集成的支持,以及现成目标和场景分类器的上下文特征,我们最终结果明显超越了亚军(0.99%)。
5. 贡献
在本论文中,我们提出了 边缘夹角附加损失函数(Additive Angular Margin, AAM)(ArcFace),它能有效地提高人脸识别中通过 DCNNs 学习到的特征嵌入的辨别能力。在大量综合的实验文献报告中,我们证明了我们的方法的性能最终优于当前最好的方法。代码和细节已经在麻省理工学院的许可下发布了。
6. 附录
(1). 并行加速
我们是否可以将 ArcFace 应用于大规模身份?对的,百万级的身份都是没问题的。
在 ArcFace 中,中心() 概念是必不可少的,但是中心() 的参数大小与类别的数目成正比。当训练数据中有百万级的身份时,ArcFace 也面临着大量训练的困难,例如 消耗大量的昂贵的 GPU 内存和大量的计算开销,甚至在一个令人望而却步的水平(指开销过大)。
在我们的实现中,我们采用并行加速策略来解决这个问题。我们将训练代码优化得简单些,通过对 feature (它是用来生成数据并行策略的) 和 中心 (我们将它命名为中心平行策略) 并行加速 来在一台机器上有效地支持 百万级身份。我们在 feature 和 中心 上的并行加速 可以显著地减少 GPU 内存的消耗,并加快训练速度,如下图 Figure 10 所示:
即使在 8 * 1080ti(11GB) 上训练一百万身份,我们使用 ResNet50 ,batch size 为 8 * 64,feature 维度为 512,和 32 位浮点数 来实现,它仍能没每秒钟跑 800 张样本。相比于其他近似的加速方法,我们的实现在性能方面没有下降到。
通过简单的矩阵划分说明了并行加速的主要计算步骤,便于初学者掌握并重现,如下图 Figure 11 所示:
①. 获取 feature ()。人脸嵌入特征是从 8 块 GPU 卡聚合成一个特征矩阵(batch size 8 * 64 x 512 特征维度)。聚合特征矩阵的大小仅有 1MB,并且当我们对特征矩阵进行传输时它的通讯成本可以忽略不计。
②. 获取相似得分矩阵()。我们将特征聚聚复制到每个 GPU 中,同时将特征矩阵与中心子矩阵(特征维度 512 x 身份号 1M/8) 相乘 来得到每个 GPU 上的相似得分子矩阵(batch size 512 x 身份号 1M/8)。
③. 获取中心() 的梯度。我们对每个 GPU 上的特征矩阵进行转置,同时将转置后的特征矩阵与相似得分的梯度子矩阵进行相乘。
④. 获取 feature () 的梯度。我们同时将相似得分的梯度子矩阵与转置后的中心子矩阵和 8 块 GPU 卡输出加和 相乘 来获得的 feature 梯度。
考虑到通讯成本(MB 级),我们对 ArcFace 的实现通过集群可以简单而有效地对百万级身份进行训练。
(2). 特征空间分析
512-d 超球面空间是否足够容纳大规模身份?理论上,是可以的。
我们假设身份中心 服从实际球面均匀分布,最邻近分离期望为:
为空间维度, 为身份号,。我们给出在 128-d、256-d 和 512-d 空间中的 的 类别数在 10K ~ 100M 的范围之间。高纬度空间是非常大的,因此当类别数指数增长时, 慢慢减小,如下图 Figure 12 所示:
7. 相关链接
https://github.com/deepinsight/insightface
https://github.com/deepinsight/insightface/tree/master/Evaluation/IJB
https://github.com/deepinsight/insightface/tree/master/recognition
http://data.mxnet.io/models/
http://trillionpairs.deepglint.com/overview
http://cs231n.github.io/neural-networks-case-study/
返回主目录
返回 人脸识别 目录
下一章:深度篇——人脸识别(二) 人脸识别代码 insight_face_pro 项目讲解