ArcFace - 人脸识别

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达66cd1f034b21893e8375dbac0b88f63b.png

f247d3ff1bebf17f5933ad8058cf7ec7.png

来源:知乎 作者:科密中的科蜜

链接:https://zhuanlan.zhihu.com/p/76541084

本文仅作学术交流,如有侵权请联系删文

Paper name

ArcFace: Additive Angular Margin Loss for Deep Face Recognition

Paper Reading Note

URL: arxiv.org/pdf/1801.0769

TL;DR

该篇文章出自CVPR2019,在SphereFace与CosFace的基础上提出Additive Angular Margin Loss用于进一步增加提取特征的类内紧凑性与类间区分度,在十个公开数据集上取得了SOTA效果。

Introduction

  • 作者认为近年来人脸识别最主要的工作都集中在loss函数的设计上

    • center loss 通过在欧式空间中惩罚人脸特征与他们对应的类别中心的距离来达到增加类内紧凑性

    • SphereFace假设网络最后一层的线性变换矩阵可以将特征表示在一个超球面的特征空间中,同时通过增加超球面上的角度margin来提升类间区分度。作者认为angular softmax loss需要一系列的近似才能被计算,导致了网络训练过程的不稳定。为了解决训练不稳定SphereFace使用了结合标准softmax loss的hybrid loss形式,这可能使softmax loss主导了整个训练过程,因为基于整数相乘的angular margin使得目标logit曲线非常陡峭,从而阻碍了收敛

    • CosFace直接使用cosine margin 来惩罚目标logit,在SphereFace的基础上获得了更佳的结果,同时支持了更简单的训练过程,而不需要使用标准softmax loss进行联合优化

  • 作者提出了Additive Angular Margin Loss (ArcFace) 来进一步提高人脸识别模型的判别能力,并且支持更稳定的训练过程

Dataset/Algorithm/Model/Experiment Detail

实现方式

  • 如下图所示,在经过将fc层权重和输出feature进行规范化处理后,两者的点积就可以看做是深度卷积网络输出的人脸feature。作者使用了arc-consine 函数来计算输出feature与目标权重的角度。然后作者在目标角度上增加了附加角边距 (additive angular margin)。最后作者通过固定的特征规范化将所有的logits进行重新缩放,剩下的步骤就与基于标准softmax loss的步骤一致。

84c2dcf1db7411e752877b51351afd36.png
  • ArcFace使用的loss 函数推导

    • 原始softmax loss如下所示,原始softmax loss不直接优化特征embedding来增加类内相似性与类间区分度。那么在测试样本具备较大的类内差异性(如姿态变化、年龄变化等)或者大规模测试场景下(如千万级别测试集对类间差异性要求较高)表现不佳。

8ff896cd28755d1d13c6b4850992c30b.png
    • 与SphereFace与CosFace类似,作者通过规范化fc层权重值,并为了简单表示将fc的偏移量设置为0,同时将特征进行规范化以及re-scale到s,则得到以下loss函数:

cab549ddacbf85f1f9095cc035abe2bf.png
    • 将fc输出的特征进行规范化操作可以使人脸识别预测结果仅仅依赖于特征与权重之间的角度,所以能够将人脸映射到超球面的特征空间上

    • 作者增加了一个额外角边距(additive Angular margin)惩罚项用于进一步增加类内紧凑性与类间区分度,如下式所示:

6dab28996b7c3848145e32eec2e4855d.png
  • 与之前人脸识别文章的套路一样,作者也做了一个toy实验用于对所提出的loss的能力进行可视化展示

67cd2b3fadd749573a8e085785f3241a.png
  • 与SphereFace和CosFace的比较

    • 作者画了图片展示了三种方法在使用相应最佳的margin设置时的目标logit曲线,画图区间选取在20°到100°之间,这是因为随机初始化的角度一般90°,训练收敛后角度值集中在30°左右,如下(a)所示。其中(b)图中不仅分别画了三种方式的logit曲线,同时还画了结合三种方式的logit曲线:

996bd5f477bc49957bb1326538c28ae3.png
    • 结合三种方式的loss函数如下所示:

c35cb5ad31a8498b618fb02528c40484.png
    • 三种方式的几何差异如下所示,SphereFace与CosFace都是一个非线性的角度margin,而ArcFace拥有一个线性的角度margin,这对于不同的角度能够施加平等的约束:

a58c2db31c0b07362df4275a9e65648e.png
    • 其实三种方法加入这个m的作用机制都是加大分类的难度,从而来使模型学习到的feature具有更强的判别能力。只是与SphereFace与CosFace相比,作者认为他们提出的加入m的方式对于人脸识别任务能够有更佳的决策面

实验结果

作者的实验做得十分丰富,在十个测试集上进行了验证
- 实现细节
- 数据集使用了CASIA、VGGFace2、MS1MV2和DeepGlint-Face训练模型
- 作者在多个验证集上进行了测试,数据集信息如下所示

b94131a139819c5d7078761682e82295.png


- 实验设置:
- 基于检测的五个人脸关键点进行人脸区域提取
- backbone使用了ResNet50和ResNet100
- 同时使用了BN-Dropout-FC-BN 的结构来提取512-D的人脸特征
- batchsize设置为512,四卡NVIDIA Tesla P40(24GB)的GPU进行训练
- momentum设置为0.9
- weight decay设置为5e-4
- 测试阶段使用去除fc的backbone用于提取512-D的特征
- LFW等数据集上的实验结果,可以看到ArcFace能够取得最佳的结果,值得注意的是作者提出的将SphereFace、CosFace和ArcFace相结合的方式(CM1、CM2)能够取得很好的效果,但是并没有赶上ArcFace的结果

079ca3885584fbeb8b8b6d574b2fb75c.png


- 与Triplet-loss的对比结果,有相似的类内紧凑性,但是类间区分度Triplet-loss更差

cda16c4061df336e25186a496b2a123a.png


- 不同方法的实验结果对比,取得了最优结果

d67a3ed8f6f3ba298c5e16c4c7cad439.png
  • MegaFace上的实验结果对比

a2125768bebdb4904c97a75ea99faea8.png cf30ff24854c78991dcbe0ce53168457.png

Thoughts
ArcFace在SphereFace与CosFace的基础上改进了loss函数,改动不大,效果提升很明显。这一系列的loss函数变化,以及该篇论文中将三种loss的设计思路进行结合的实验,可以看出loss的设计确实是人脸识别任务中最重要的环节,感觉这篇文章应该是Angular softmax loss系列的尾声了。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

faf8f9b9e64674badbd1740199210819.png

40b6220580f1a0716bfbce2beeeb826b.png

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RetinaFace ArcFace是一种常用于人脸识别的深度学习算法。RetinaFace是一种人脸检测算法,用于在图像中识别和定位人脸。它采用了全卷积神经网络结构,并利用了特征金字塔网络来多尺度地检测不同大小的人脸。RetinaFace使用了anchor-based方法,在不同尺度上生成候选框,并通过网络预测每个候选框的边界框和类别概率。 而ArcFace是一种人脸识别算法,用于在给定的人脸图像中提取具有高度可辨识性的人脸特征向量。ArcFace将人脸图像映射到一个高维特征空间,并通过特殊的角度余弦损失函数,在特征空间中将同一个人脸的特征向量拉近,并将不同人脸的特征向量推开。这样,在特征空间中,同一个人脸的特征向量之间的相似度会很高,而不同人脸的特征向量之间的相似度会很低。 结合RetinaFaceArcFace,可以实现人脸检测和识别的整个流程。首先使用RetinaFace检测人脸,并获取人脸的位置和边界框。然后,将这些人脸区域图像输入ArcFace网络,提取每个人脸的特征向量。接下来,可以使用这些特征向量来比较和匹配不同人脸的相似度,以实现人脸的识别和验证。 RetinaFace ArcFace人脸识别领域具有较好的性能和广泛的应用。它可以应用于人脸识别门禁系统、人脸支付、人脸考勤、人脸身份验证等多个领域。通过这两种算法的组合,可以提高人脸识别的准确性和鲁棒性,实现更加安全和高效的人脸识别技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值