论文地址:https://arxiv.org/abs/1801.07698
github:https://github.com/deepinsight/insightface

摘要

  使用深度卷积神经网络(DCNNs)进行大规模人脸识别的特征学习面临的主要挑战之一是其设计适当的损失函数以增强识别能力。Centre loss 惩罚是指欧氏空间中深度特征与其对应的类中心之间的距离,以实现类内紧致。SphereFace假设最后一个全连接层中的线性变换矩阵可以用来表示角空间中的类中心,并对深度特征与其对应权重之间的角度进行补偿。最近,一个流行的研究方向是将裕度纳入已确定的损失函数,以最大限度地提高面类可分离性。在本文中,我们提出了一个Additive Angular Margin Loss(ArcFace),以获得高度区分特征的人脸识别。由于与超球面测地线距离的精确对应,所提出的ArcFace具有清晰的几何解释。我们展示了所有最近最先进的人脸识别方法的最广泛的实验评估超过10个人脸识别基准,包括一个具有万亿级对的大型图像仓库和一个大型视频数据集。我们证明了ArcFace始终如一地优于最先进的技术,并且可以很容易地实现,而计算开销可以忽略不计。我们发布了所有经过改进的训练数据、训练代码、预训练模型和训练日志,这将有助于重新生成本文的结果。

1 引言

  使用深度卷积神经网络(DCNN)嵌入的人脸表示是人脸识别的选择方法[32,33,29,24]。DCNNs映射人脸图像,通常经过姿态归一化步骤[45]后,成为一个具有小的类内距离和大的类间距离的特征。

图1.基于中心[18]和特征[37]归一化,将所有身份分布在超球面上。为了提高类内紧凑性和类间差异,我们考虑了四种测地线距离约束。(A)Margin-Loss:在样本与中心之间插入测地线距离的边界。(B)Intra-Loss:减小样本与相应中心之间的测地线距离。©Inter-Loss:增加不同中心之间的测地线距离。(D)Triplet-Loss:在三元组样本之间插入测地线距离裕度。为了提高人脸识别模型的识别能力,我们提出了一种与(A)中的测地距离(Arc)边缘惩罚完全对应的加角边缘损失(ArcFace)算法。大量的实验结果表明(A)策略是最有效的。
  目前有两种主要的研究方向来训练DCNNs进行人脸识别。一种是训练一个多类分类器(如使用softmax分类器[33,24,6])来分离训练集中的不同身份,另一种是直接学习嵌入,如triplet loss[29]。基于大规模训练数据和精心设计的cnn体系结构,基于
softmax-loss的方法[6]和基于triplet loss的方法[29]都能获得良好的人脸识别性能。然而,softmax loss和 triplet loss都有一些缺点。对于softmax损失:(1)线性变换矩阵W∈Rd×nW∈R^{d×n}W∈Rd×n的大小随着身份数量 n线性增加;(2)学习到的特征对于缺失集的分类问题是可分离的,但对于开放集的人脸识别问题判别能力不够。对于triplet loss:(1)特别是对于大规模数据集,人脸triplets的数量出现了组合爆炸,导致迭代步骤的显著增加;(2)半硬采样挖掘对有效的建模训练来说是一个比较困难的问题。
  几个变体[38,9,46,18,37,35,7,34,27]已经被提出来增强softmax损失的鉴别能力。Wen等[38]率先提出centre loss,利用每个特征向量与其类中心之间的欧氏距离,通过softmax损失的联合补偿来保证类内的紧致性,同时保证类间的离散性。然而,在训练期间更新实际的训练中心是极其困难的,因为可供训练的人脸类别的数量最近急剧增加。
  通过观察,与每一类人脸中心具有相似度的softmax损失上训练DCNN分类的最后全连接层的权重,[18、19]的工作提出了一个可乘的角边裕度执行额外的的类内紧致性和类间差异,导致训练模型有更好的辨别力。虽然Sphereface[18]引入了角裕度的重要思想,但其损失函数需要进行一系列的近似才能计算出来,导致网络的训练不稳定。为了稳定训练,他们提出了一个混合损失函数,其中包括标准softmax损失。经验上,softmax损失在训练过程中占主导,因为基于整数的乘角裕度使目标logit曲线非常陡峭,从而阻碍收敛。CosFace[37,35]直接在目标logit中添加了余弦余量惩罚,相比SphereFace获得了更好的性能,但实现起来更容易,并且减少了softmax损失对联合监管的需要。
  在本文中,我们提出了一个附加的角裕度进一步提高人脸识别模型的识别能力,稳定训练过程。如图2所示,DCNN feature和最后一个全连接层的点积等于feature和权值归一化后的余弦距离。我们使用arccos函数来计算当前特征和目标权重之间的角度。然后,我们在目标角度上加上一个附加的角裕度,再通过余弦函数得到目标的logit。然后,我们用一个固定的特征范数重新缩放所有logits,随后的步骤与softmax loss中的步骤完全相同。我们提出的ArcFace的优点总结如下:

Engaging。 ArcFace利用归一化超球面中角和弧的精确对应关系直接优化测地线距离余量。我们通过分析特征和权重之间的角度统计数据,直观地说明了512-D空间中发生了什么。
Effective。 ArcFace在10个人脸识别基准上取得了最先进的性能,包括大规模图像和视频数据集。
**Easy。 ** ArcFace只需要算法1中给出的几行代码,并且非常容易在基于计算图形的深度学习框架中实现,例如MxNet [8], Pytorch[25]和Tensorflow[4]。此外,与[18,19]的工作相反,ArcFace不需要与其他损失函数结合就可以获得稳定的性能,并且可以很容易地收敛于任何训练数据集。
Effificient。 ArcFace在训练过程中只增加了微不足道的计算复杂度。当前的gpu可以很容易地支持数百万个身份进行训练,而模型并行策略可以很容易地支持更多的身份。

2.提出的方法

2.1 ArcFace

  使用最广泛的分类损失函数softmax loss表示如下:

其中xi∈Rdx_i∈R^dxi​∈Rd代表第i个样本的特征,它属于第yiy_iyi​类。本文将嵌入特征维数d设为512,像[38,46,18,37]。Wj∈RdW_j∈R^dWj​∈Rd代表权重W∈Rd×nW∈R^{d×n}W∈Rd×n的第j列,bj∈Rnb_j∈R^nbj​∈Rn代表偏置项。批次大小为N,类数量为n。传统的softmax损失被广泛应用于深度人脸识别[24,6]。然而,softmax loss函数并没有明确地优化特征嵌入,以提高类内样本的相似性和类间样本的多样性,这导致在较大的类内外观变化(例如姿态变化)下,深度人脸识别的性能差异[30, 48]和年龄差距[22,49])和大规模测试场景(例如百万[15,39,21]或万亿对[2])。
  为了简单起见,我们将偏差固定为bj=0b_j=0bj​=0[18]。然后,我们将logit[26]变换为WjTxi=∣∣Wj∣∣∣∣xi∣∣cosθjW^T_jx_i=||W_j||||x_i||cosθ_jWjT​xi​=∣∣Wj​∣∣∣∣xi​∣∣cosθj​,其中θjθ_jθj​为权值WjW_jWj​与特征xix_ixi​之间的夹角。在[18,37,36]之后,我们通过L2归一化来固定权重∣∣Wj∣∣=1||W_j||=1∣∣Wj​∣∣=1。随后[28,37,36,35],我们还通过L2归一化来固定嵌入特征$∣∣xi∣∣||x_i||∣∣xi​∣∣,并将其重新缩放到s。特征和权重的归一化步骤使得预测仅取决于特征和权重之间的角度。因此,所学习的嵌入特征分布在半径为s的超球面上。

  由于嵌入特征是围绕超球面上的每个特征中心分布的,我们在xix_ixi​和WyiW_{y_i}Wyi​​之间添加了角裕度惩罚m,以同时增强类内紧性和类间差异。由于所提出的附加角裕度惩罚等于规范化超球面上的测地线距离裕度惩罚,我们将该方法命名为ArcFace。

  我们从8个包含不同身份足够样本的(大约1500个图像/类)中选择人脸图像来训练2-D特征嵌入网络分别采用softmax和ArcFace loss。如图3所示,softmax损失提供了大致可分离的特征嵌入,但在决策边界产生明显的歧义,而提出的ArcFace损失可以明显地在最近的类之间加强更明显的差距。

图3.softmax和ArcFace损失下的小例子,8个身份的2-D特征。点表示样本,线表示每个标识的中心方向。在特征归一化的基础上,将所有的人脸特征推入固定半径的圆弧空间。最近类之间的测地线距离差距变得明显,因为添加了角裕度惩罚。

2.2 与SphereFace和CosFace的比较

数值相似 在SphereFace[18,19]、ArcFace和CosFace[37,35]中,提出了三种不同的裕度惩罚,分别为乘法角裕度m1、加法角裕度m2和加法余弦裕度m3。从数值分析的角度来看,不同的边际惩罚,无论加上什么角度[18]或余弦空间[37],都通过惩罚目标logit[26]来增强类内紧性和类间多样性。在图4(b)中,我们绘制了SphereFace、ArcFace和CosFace在其最佳边距设置下的目标logit曲线。我们只在[20°,100°]内显示这些目标logit曲线,因为WyiW_{y_i}Wyi​​和xix_ixi​的角度从90°开始(随机初始化),在ArcFace训练结束时损坏在30°左右,如图4(a)所示。直观地说,目标logit曲线中有三个因素影响性能,即起点、终点和斜率。

图4.目标分对数分析。(a) ArcFace训练过程中θjθ_jθj​从头到尾的全向分布。(2) SoftMax,SphereFace, ArcFace, CosFace和结合裕度惩罚(cos(m1θ+m2)−m3)(cos(m_1θ+m_2)-m_3)(cos(m1​θ+m2​)−m3​)的目标logit曲线
  结合所有的裕度惩罚,我们实施以m1、m2和m3为超参数的SphereFace、ArcFace和CosFace统一框架。

如图4(b)所示,将上述所有的边距(cos(m1θ+m2)−m3)(cos(m_1θ+m_2)-m_3)(cos(m1​θ+m2​)−m3​)结合起来,我们可以很容易地得到其他一些同样具有高性能的目标logit曲线。
几何差异。 尽管ArcFace与之前的工作在数值上有相似之处,但由于角裕度与测地线距离有确切的对应关系,因此提出的加性角边具有更好的几何属性。如图5所示,我们比较了二分类情况下的决策边界。ArcFace在整个区间内具有恒定的线性角边。相比之下,SphereFace和CosFace只有一个非线性的角余量。

图5.二分类情况下不同损失函数的决策裕度。虚线表示决策边界,灰色区域为决策边界。
  边距设计上的微小差异会对模型训练产生“蝴蝶效应”。例如,原始球面[18]采用退火优化策略。为了避免在训练开始时出现分歧,在SphereFace中采用softmax的联合监督来削弱乘法边距惩罚。用 arc-cosine函数代替复双角公式,实现了一种新的无整数要求的SphereFace。在我们的实现中,我们发现m=1.35可以在没有任何收敛困难的情况下获得与原始 SphereFace相似的性能

2.3 与其他损失比较

  根据特征的角度表示和权向量,还可以设计其他损失函数。例如,我们可以设计一个损失来增强超球面上的类内紧凑性和类间差异。如图1所示,我们在本文中与其他三种损耗进行了比较。
Intra-Loss 是通过降低样本与真值中心之间的角度/弧来提高类内紧凑性的。

Inter-Loss的目标是通过增加角度/弧差来增强不同类中心之间的差异。

这里的Inter-Loss是Minimum Hyper-spherical Energy (MHE)方法的一种特殊情况。在[17]中,隐含层和输出层都由MHE进行正则化。MHE还提出了一种特殊的损失函数,将SphereFace loss与网络最后一层的MHE损失相结合。
Triplet-loss 目的是扩大triplet样本之间的角度/弧裕度。在FaceNet[29]中,对归一化特征应用了欧几里得边界。在这里,我们使用triplet-loss,通过角表示我们的特征为arccos(xiposxi)+m≤arccos(xinegxi)arccos(x^{pos}_ix_i)+m≤arccos(x^{neg}_ix_i)arccos(xipos​xi​)+m≤arccos(xineg​xi​)。

3 实验

3.1 实施细节

数据集。 如表1所示,我们分别采用CASIA[43]、VGGFace2[6]、MS1MV2和DeepGlint Face(包括MS1M DeepGlint和Asian DeepGlint)[2]作为我们的训练数据,以便与其他方法进行公平比较。请注意,建议的MS1MV2是MS-Celeb-1M数据集的半自动优化版本[10]。据我们所知,我们是第一个为大规模人脸图像注释部署特定于种族的注释器的人,因为如果注释器不熟悉身份,边界情况(例如硬样本和噪声样本)很难区分。在训练过程中,我们探索有效的面部验证数据集(如LFW[13]、CFP-FP[30]、AgeDB-30[22]),以检查不同设置的改善情况。除了最广泛使用的LFW[13]和YTF[40]数据集外,我们还报告了ArcFace在最近的大姿态和大年龄数据集(如CPLFW[48]和CALFW[49])上的性能。我们还在大规模图像数据集(如MegaFace[15]、IJB-B[39]、IJB-C[21]和万亿对[2])和视频数据集(iQIYI VID[20])上广泛测试了所提出的ArcFace。

实验设置。 为了数据预处理,我们遵循最近的论文[18,37],通过使用五个面部点来生成标准化的面部结果(112×112)。对于嵌入网络,我们采用了广泛使用的CNN架构:ResNet50和ResNet100[12,11]。在最后一个卷积层之后,我们探索BN [14]-Dropout
[31]-FC-BN结构最终得到512-D嵌入特征。在本文中,我们使用([训练数据集,网络结构,损失])来促进对实验设置的理解。
  我们按照[37]将特征尺度设置为64,并选择ArcFace的角裕度m为0.5。本文的所有实验都是在MXNet[8]上实现的。我们将批大小设置为512,并在四个NVIDIA Tesla P40上训练模型(24 gb) gpu。在CASIA上,学习率从0.1开始,在20K, 28K次迭代时,学习率除以10。以32K次迭代完成训练过程。在MS1MV2上,我们将学习率除以100K,迭代160K,到180 k迭代。我们把动量设为0.9,权重衰减为5e−45e^{-4}5e−4。在测试过程中,我们只保留没有完全连接层的特性嵌入网络(ResNet50为160MB,ResNet100为250MB),并提取512-D特性(ResNet50为8.9ms/面,ResNet50为15.4ms/面ResNet100)用于每个标准化人脸。为了获得模板(例如IJB-B和IJB-C)或视频(例如YTF和iQIYI VID)的嵌入特征,我们只需计算模板中所有图像或视频中所有帧的特征中心。注意,训练集和测试集之间的重叠标识将被删除以进行严格的评估,并且我们只对所有测试使用单一作物。

3.2

ArcFace: AdditiveAngularMarginLossforDeepFaceRecognition相关推荐

  1. 度量学习:ArcFace算法和工程应用总结

    目录 前言 1 度量学习简介 2 ARCFace介绍 3 实际应用时的探讨 探讨1:类似于人脸识别这样的应用,从0到落地应用的大概流程是怎样的? 探讨2:怎么评估这个特征提取器网络训练好了? 探讨3: ...

  2. 实战:人脸识别的Arcface实现 | CSDN博文精选

    来源 | CSDN博客 本文将简单讲述arcface从训练到部署的整个过程,主要包括前期的数据筛选和准备,模型训练以及模型部署. 此文参考的arcface的代码地址: https://github.c ...

  3. ArcFace - 人脸识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:知乎 作者:科密中的科蜜 链接:https://zhuanl ...

  4. 【论文理解】ArcFace: Additive Angular Margin Loss for Deep Face Recognition(InsightFace)

    论文地址:https://arxiv.org/abs/1801.07698 github:https://github.com/deepinsight/insightface 这篇论文基本介绍了近期较 ...

  5. 【java】人脸识别 虹软ArcFace 2.0-抽取人脸特征并做比对

    虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html 虹软ArcFace功能简介 人脸检测 人脸跟踪 人脸属性检测(性别.年龄) 人脸三维角度检测 ...

  6. Arcface v1 论文翻译与解读

    神罗Noctis 2019-10-13 16:14:39  543  收藏 4 展开 论文地址:http://arxiv.org/pdf/1801.07698v1.pdf 最新版本v3的论文翻译:Ar ...

  7. 解析ArcFace源码

    猫猫与橙子 2019-10-09 17:20:38  893  收藏 2 展开 论文分享,代码复现 主要用于论文翻译分享,代码复现,结合场景数据,提升实际模型性能 猫猫与橙子 ¥19.90 分享赚¥1 ...

  8. 【深度学习】同款商品识别的克星--ArcFace!

    作者:杰少,一品炼丹师 ArcFace: Additive Angular Margin Loss for Deep Face Recognition(CVPR2019) 简 介 利用深度卷积神经网络 ...

  9. ArcFace 同款商品识别的克星

    ArcFace: Additive Angular Margin Loss for Deep Face Recognition(CVPR2019) 一元@炼丹笔记 利用深度卷积神经网络(DCNNs)进 ...

  10. python调用sdk的文章_如何使用 python 接入虹软 ArcFace SDK

    公司需要在项目中使用人脸识别SDK,并且对信息安全的要求非常高,在详细了解市场上几个主流人脸识别SDK后,综合来看虹软的Arcface SDK比较符合我们的需求,它提供了免费版本,并且可以在离线环境下 ...

最新文章

  1. python操作mysql数据库实现增删改查
  2. 推荐8个年薪100万BAT级优质技术大号
  3. mysql 平均日营业额_一条SQL语句中算日销售额和月销售额
  4. 常用数据结构--线性结构
  5. javaweb中mysql数据库的回滚操作代码
  6. 整理了vue2.0的思维导图
  7. 和当前时间比较_货币的时间价值
  8. SylixOS 内存管理源代码分析--pageTable.c
  9. c++:template使用中的常见报错
  10. 容器技术Docker K8s 35 容器服务ACK基础与进阶-应用与发布管理
  11. 最常用的scrum工具、敏捷开发工具、看板工具
  12. p9刷Android原生系统,华为P9怎么刷机 华为P9卡刷机方法【图文教程】
  13. VS高版本兼容XP系统
  14. SNF快速开发平台--规则引擎在程序当中如何调用
  15. 基于stm32f303cbt6的点灯实验(硬件+软件)
  16. 四种主要网络IO虚拟化模型
  17. ai不同形状的拼版插件_Illustrator自动拼版脚本插件-AI自动拼版脚本下载-西西软件下载...
  18. Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initia
  19. Docker启动报错:Job for docker.service failed because the control process exited with error code. See “sy
  20. boos里的AHCI RAID_DNF:预热真安徒恩Raid,常见炸团点回顾

热门文章

  1. Linux I2C 驱动实验
  2. html导航折叠与展开,html展开收起
  3. 机器学习算法工程师面试问题
  4. 基于51单片机的步进电机驱动程序
  5. shp文件根据属性导出若干单独shp
  6. 微信小程序仿陶票票课程设计
  7. linux mysql 视频教程_Linux视频教程基础入门到精通Shell高级编程实战/Nginx/MySQL运维视频教程下载...
  8. ODAC Windows 安装
  9. mysql proxy maxscale_MaxScale: 一个用于解决MySQL扩展性的新工具(译)
  10. Android热修复之Sophix初探