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

ContrastiveLoss

Triplet

1503.03832

99.63±0.09

Center Loss

CenterLoss

img2

99.28

L2-Softmax

1703.09507

99.33

A-Softmax

1704.08063

99.42

CosLoss/AMSoftmax

1801.05599/1801.05599

img3

99.17

Arcloss

1801.07698

img4

99.82

Ring loss

1803.00130

img5

99.52

LGM Loss

1803.02988

img6

99.20±0.03

作者

{ haoxintong Yangxv }

讨论区

我们的讨论区在 Gluon中文论坛

参考文献

  1. MXNet 文档和教程 http://zh.d2l.ai/

  2. NVIDIA DALI 文档NVIDIA DALI documentation

  3. 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 作为数据集的根目录.

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

补充

1. Github有一些 项目 调到了 更好的结果, 但他们使用的特征层是512维, 我们按照原论文中的设置是128维, 模型大小只有4.1M. 2. 欢迎使用gluonface中提供的脚本进行更多的实验, 如果你训练出了更好的结果也可以通过PR提交给我们.

相关论文

这一部分会列出人脸相关的论文, 并按照研究内容进行分类,

人脸识别

  1. [1704.06369] NormFace: L2 Hypersphere Embedding for Face Verification
    [ arxiv ] [ code ]

    本文从理论角度解释了Softmax Loss训练出来的特征为何会呈现放射形分布, 并给出了如何使用Softmax来训练归一化后的特征.

  2. [1704.08063] SphereFace: Deep Hypersphere Embedding for Face Recognition
    [ arxiv ] [ code ]

    SphereFace是作者对自己论文Large Margin Softmax的改进, 把最后一层的权重做了归一化. 开源的代码非常扎实有参考性, 在LFW和MegaFace任务上取得非常好的实践效果.

  3. [1710.00870] Rethinking Feature Discrimination and Polymerization for Large-scale Recognition
    [ arxiv ] [ code ]

    COCO loss

  4. [1801.05599] Additive Margin Softmax for Face Verification
    [ arxiv ] [ code ]

    之前的L-Softmax, A-Softmax引入了角间距的概念,用于改进传统的softmax loss函数,使得人脸特征具有更大的类间距和更小的类内距。 作者在这些方法的启发下,提出了一种更直观和更易解释的additive margin Softmax (AM-Softmax)。同时,本文强调和讨论了特征正则化的重要性。 实验表明AM-Softmax在LFW和MegaFace得到了比之前方法更好的效果。

  5. [1801.07698] ArcFace: Additive Angular Margin Loss for Deep Face Recognition
    [ arxiv ] [ code ]

    业界良心, 采用加性Margin, 开源代码中提供了相当多的工具, 不过因为是用mxnet.symbol写法来实现的, 所以对于不了解MXNet的人来说 入门会相对困难一些, 这也是gluon-face产生的原因之一.

  6. [1804.07573] MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices
    [ arxiv ] [ code ]
  7. [1807.11649] The Devil of Face Recognition is in the Noise
    [ arxiv ] [ code ]

    ECCV'18 对于现有人脸数据集中的标签噪声问题进行了深入研究, 对MegaFace和MS-Celeb-1M数据集中的噪声特性和来源做了全面的分析, 发现干净 子集对于提高人脸识别精度效果显著.

  8. [1808.06210] GridFace: Face Rectification via Learning Local Homography Transformations
    [ arxiv ]

    通过学习局部单应变换减少人脸变形,先校正,再识别,过硬的校正技术大幅提升了人脸识别的性能. 相关实验结果已证明该方法的有效性和高效性.

  9. [1810.07599] Orthogonal Deep Features Decomposition for Age-Invariant Face Recognition
    [ arxiv ]

    腾讯AI Lab发表于ECCV 2018的工作, 其目的是通过研发新的深度学习模型以提高跨年龄人脸识别的精度. 在这篇文章里, 作者提出了一种正交深度特征 分解算法OE-CNNs, 通过把深度特征正交分解为年龄分量和身份分量, 从而将年龄分量和身份分量有效分离开, 从而提高跨年龄人脸识别精度.

参考资料
1

人脸识别的LOSS, YaqiLYU

API Reference

请跳转至英文版 查阅.