ArcFace - 人脸识别

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

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

ArcFace - 人脸识别_第1张图片

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

链接: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的步骤一致。

ArcFace - 人脸识别_第2张图片
  • ArcFace使用的loss 函数推导

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

ArcFace - 人脸识别_第3张图片
    • 与SphereFace与CosFace类似,作者通过规范化fc层权重值,并为了简单表示将fc的偏移量设置为0,同时将特征进行规范化以及re-scale到s,则得到以下loss函数:

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

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

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

ArcFace - 人脸识别_第4张图片
  • 与SphereFace和CosFace的比较

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

ArcFace - 人脸识别_第5张图片
    • 结合三种方式的loss函数如下所示:

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

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

实验结果

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

ArcFace - 人脸识别_第7张图片


- 实验设置:
- 基于检测的五个人脸关键点进行人脸区域提取
- 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的结果

ArcFace - 人脸识别_第8张图片


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

ArcFace - 人脸识别_第9张图片


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

ArcFace - 人脸识别_第10张图片
  • MegaFace上的实验结果对比

ArcFace - 人脸识别_第11张图片 ArcFace - 人脸识别_第12张图片

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“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

ArcFace - 人脸识别_第13张图片

ArcFace - 人脸识别_第14张图片

你可能感兴趣的:(人脸识别,python,计算机视觉,机器学习,人工智能)