Gluon Face Toolkit¶
GluonFR是一个基于MXNet Gluon API实现的人脸识别工具箱. 此项目灵感来自GluonCV, 并按照其结构组织. 除了帮助研究者和开发者们迅速上手目前最前沿的人脸识别算法, 也希望能够让更多的人了解Gluon这一好用的工具, 使用MXNet-Gluon进行深度学习算法的研究.
提示
如果你不了解MXNet和Gluon, 请参考《动手学深度学习》.
Gluon Face提供目前人脸识别中主流的损失函数, 包括ArcLoss, TripletLoss, RingLoss, CosLoss, L2Softmax, ASoftmax, CenterLoss, ContrastiveLoss等, 在此基础上我们会继续更新. 如果有希望我们实现的损失函数, 欢迎提交 issue.
Gluon Face中的损失函数¶
下表中最后一列是论文中在LFW上的最优结果, 训练数据/网络结构可能不同, 仅供参考.
Method |
Paper |
Visualization of MNIST |
LFW |
---|---|---|---|
Contrastive Loss |
|||
Triplet |
99.63±0.09 |
||
Center Loss |
99.28 |
||
L2-Softmax |
99.33 |
||
A-Softmax |
99.42 |
||
CosLoss/AMSoftmax |
99.17 |
||
Arcloss |
99.82 |
||
Ring loss |
99.52 |
||
LGM Loss |
99.20±0.03 |
作者¶
{ haoxintong Yangxv }
参考文献¶
MXNet 文档和教程 http://zh.d2l.ai/
NVIDIA DALI 文档NVIDIA DALI documentation
Deepinsight insightface
Installation¶
尽管此工程理论上能够在Windows系统上使用, 但我们还是建议使用ubuntu系统进行学习和开发.
Gluon Face 支持Python 3.5及以上版本. 为了安装此工具包, 首先安装MXNet和gluon-cv:
pip install gluoncv --pre
pip install mxnet-mkl --pre --upgrade
# if cuda XX is installed
pip install mxnet-cuXXmkl --pre --upgrade
然后安装此项目:
从源码安装(推荐)
pip install git+https://github.com/THUFutureLab/gluon-face.git@master
使用pip
pip install gluonfr
Datasets¶
gluonfr.data
提供了训练和验证的输入流程, 目前所有数据集由洞见实验室制作提供, 所有人脸图像均使用MTCNN进行对齐,
并截断至``(112, 112)``大小. 为了加速读取它们被转化成 train.rec
, train.idx
以及
val_data.bin
, 详细信息请参考
[insightface/Dataset-Zoo].
在 examples/dali_utils.py
文件中, 有一个使用Nvidia DALI准备数据的简单例子, 当CPU处理数据成为训练瓶颈时推荐使用.
将下载好的数据集按如下结构组织:
face/
emore/
train.rec
train.idx
property
ms1m/
train.rec
train.idx
property
lfw.bin
agedb_30.bin
...
vgg2_fp.bin
为了保持和MXNet一致, 使用 ~/.mxnet/datasets
作为数据集的根目录.
参考文献¶
- CFP_fp, CFP_ff
Model Zoo¶
Mobilefacenet 结果¶
TestSet |
Ours |
Insightface |
Proposed |
---|---|---|---|
LFW: |
99.56 |
99.50 |
99.55 |
CFP_FP: |
92.98 |
88.94 |
|
AgeDB30: |
95.86 |
95.91 |
96.07 |
参考:
1. 代码库:code 训练脚本 训练日志和模型: 百度云:y5zh, 谷歌云. 2. Insightface 训练结果. 3. Mobilefacenets 论文.
细节¶
Flip |
False |
True |
---|---|---|
lfw: |
0.995500+-0.003337 |
0.995667+-0.003432 |
calfw: |
0.951000+-0.012069 |
0.973083+-0.022889 |
cplfw: |
0.882000+-0.014295 |
0.938556+-0.045234 |
cfp_fp: |
0.927714+-0.015309 |
0.929880+-0.035907 |
agedb_30: |
0.958667+-0.008492 |
0.934903+-0.033667 |
cfp_ff: |
0.995571+-0.002744 |
0.944868+-0.037657 |
vgg2_fp: |
0.920600+-0.010920 |
0.940581+-0.032677 |
相关论文¶
这一部分会列出人脸相关的论文, 并按照研究内容进行分类,
人脸识别¶
- [1704.06369] NormFace: L2 Hypersphere Embedding for Face Verification
-
本文从理论角度解释了Softmax Loss训练出来的特征为何会呈现放射形分布, 并给出了如何使用Softmax来训练归一化后的特征.
- [1704.08063] SphereFace: Deep Hypersphere Embedding for Face Recognition
-
SphereFace是作者对自己论文Large Margin Softmax的改进, 把最后一层的权重做了归一化. 开源的代码非常扎实有参考性, 在LFW和MegaFace任务上取得非常好的实践效果.
- [1710.00870] Rethinking Feature Discrimination and Polymerization for Large-scale Recognition
-
COCO loss
- [1801.05599] Additive Margin Softmax for Face Verification
-
之前的L-Softmax, A-Softmax引入了角间距的概念,用于改进传统的softmax loss函数,使得人脸特征具有更大的类间距和更小的类内距。 作者在这些方法的启发下,提出了一种更直观和更易解释的additive margin Softmax (AM-Softmax)。同时,本文强调和讨论了特征正则化的重要性。 实验表明AM-Softmax在LFW和MegaFace得到了比之前方法更好的效果。
- [1801.07698] ArcFace: Additive Angular Margin Loss for Deep Face Recognition
-
业界良心, 采用加性Margin, 开源代码中提供了相当多的工具, 不过因为是用mxnet.symbol写法来实现的, 所以对于不了解MXNet的人来说 入门会相对困难一些, 这也是gluon-face产生的原因之一.
- [1804.07573] MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices
- [1807.11649] The Devil of Face Recognition is in the Noise
-
ECCV'18 对于现有人脸数据集中的标签噪声问题进行了深入研究, 对MegaFace和MS-Celeb-1M数据集中的噪声特性和来源做了全面的分析, 发现干净 子集对于提高人脸识别精度效果显著.
- [1808.06210] GridFace: Face Rectification via Learning Local Homography Transformations
- [ arxiv ]
通过学习局部单应变换减少人脸变形,先校正,再识别,过硬的校正技术大幅提升了人脸识别的性能. 相关实验结果已证明该方法的有效性和高效性.
- [1810.07599] Orthogonal Deep Features Decomposition for Age-Invariant Face Recognition
- [ arxiv ]
腾讯AI Lab发表于ECCV 2018的工作, 其目的是通过研发新的深度学习模型以提高跨年龄人脸识别的精度. 在这篇文章里, 作者提出了一种正交深度特征 分解算法OE-CNNs, 通过把深度特征正交分解为年龄分量和身份分量, 从而将年龄分量和身份分量有效分离开, 从而提高跨年龄人脸识别精度.