在这个知识库中,我们提供了用于深度人脸识别的训练数据集、网络设置和损失设计。训练数据集包括已标准化的MS1M、VGG2和CASIA-Webface数据集,这些数据集已经打包为MXNet二进制格式。网络的backbones包括ResNet、MobilefaceNet、MobileNet、InceptionResNet_v2、DenseNet、DPN。损失函数包括Softmax、SphereFace、CosineFace、ArcFace和Triplet (Euclidean/Angular)损失。
我们的方法ArcFace最初是在arXiv technical report中描述的。通过使用这个存储库,您可以通过一个模型简单地实现LFW 99.80%+和Megaface 98%+。该知识库可以帮助研究人员/工程师快速开发深度人脸识别算法,只需两个步骤:下载二进制数据集并运行训练脚本。
所有的人脸图像被MTCNN对齐并裁剪到112x112:
详细信息和数据集下载请查看Dataset Zoo。
请查看 src/data/face2rec2.py 如何建立一个二进制人脸数据集。任何公开的MTCNN都可以用于对齐面,并且性能不会改变。我们将在近期通过完整的姿态对齐方法来改善人脸归一化的步骤。
1.使用GPU支持安装MXNet (Python 2.7)
注意:根据自己电脑的cuda版本安装相应的包
pip install mxnet-cu80 #CUDA-8.0
pip install mxnet-cu90 #CUDA-9.0
pip install mxnet-cu91 #CUDA-9.1
pip install mxnet-cu92 #CUDA-9.2
pip install mxnet-cu100 #CUDA-10.0
pip install mxnet-cu101 #CUDA-10.1
2.克隆InsightFace存储库。我们将目录insightface称为INSIGHTFACE_ROOT。
git clone --recursive https://github.com/deepinsight/insightface.git
3.下载训练集(MS1M-Arcface)并将其放在$INSIGHTFACE_ROOT/datasets/中。每个训练数据集至少包含以下6个文件:
faces_emore/
train.idx
train.rec
property
lfw.bin
cfp_fp.bin
agedb_30.bin
前三个文件是训练数据集,后三个文件是验证集。
4. 训练深度人脸识别模型。在这一部分中,我们假设您位于 $INSIGHTFACE_ROOT/recognition/ 目录中。
export MXNET_CPU_WORKER_NTHREADS=24
export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice
放置和编辑配置文件:
cp sample_config.py config.py
vim config.py # edit dataset path etc..
我们在下面给出了一些例子。我们的实验是在Tesla P40 GPU上进行的。
(1) 使用LResNet100E-IR训练ArcFace
CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network r100 --loss arcface --dataset emore
每2000批输出LFW、CFP-FP、AgeDB-30的验证结果。您可以查看config.py中的所有选项。该模型可以实现LFW 99.80+和MegaFace 98.3%+。
(2) 使用LResNet50E-IR训练CosineFace
CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network r50 --loss cosface --dataset emore
(3) 使用LMobileNet-GAP训练Softmax
CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network m1 --loss softmax --dataset emore
(4) 使用Triplet loss对上述的Softmax模型进行微调
CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train.py --network m1 --loss triplet --lr 0.005 --pretrained ./models/m1-softmax-emore,1
5. 验证结果
针对MS1M-Arcface数据集训练的LResNet100E-IR网络
您可以使用 $INSIGHTFACE/src/eval/ verific.py 来测试所有的预培训模型。
请查看Model-Zoo中更多的预训练模型。
我们提出了一种联合间隔的方法作为目标logit值和原始θ的函数:
COM(θ) = cos(m_1*θ+m_2) - m_3
对于,, 的训练,运行以下命令:
CUDA_VISIBLE_DEVICES='0,1,2,3' python -u train_softmax.py --network r100 --loss combined --dataset emore
使用MS1M-IBUG(MS1M-V1)的结果
请查看 $INSIGHTFACE_ROOT/Evaluation/megaface/ 以评估megaface上的模型精度。所有对齐的图像已经提供。
在本部分中,我们假设您位于$INSIGHTFACE_ROOT/deploy/ 目录中。输入的人脸图像一般应被中心裁剪。我们使用MTCNN的RNet+ONet进一步对齐图像,然后将其发送到特征嵌入网络。
1.准备一个预训练模型。
2.将模型放在$INSIGHTFACE_ROOT/models/下。例如,$INSIGHTFACE_ROOT/models/model-r100-ii
3.运行测试脚本$INSIGHTFACE_ROOT/deploy/test.py。
对于单裁剪的人脸图像(112x112),在我们的测试服务器上总的前向推理时间只有17ms (Intel E5-2660 @ 2.00GHz, Tesla M40, LResNet34E-IR)。
请查看 Menpo Benchmark 和 Dense U-Net以获得更多详细信息。
详情请查看RetinaFace。
如果你觉得InsightFace对你的研究有帮助,请参考以下相关论文:
@inproceedings{deng2019retinaface,
title={RetinaFace: Single-stage Dense Face Localisation in the Wild},
author={Deng, Jiankang and Guo, Jia and Yuxiang, Zhou and Jinke Yu and Irene Kotsia and Zafeiriou, Stefanos},
booktitle={arxiv},
year={2019}
}
@inproceedings{guo2018stacked,
title={Stacked Dense U-Nets with Dual Transformers for Robust Face Alignment},
author={Guo, Jia and Deng, Jiankang and Xue, Niannan and Zafeiriou, Stefanos},
booktitle={BMVC},
year={2018}
}
@article{deng2018menpo,
title={The Menpo benchmark for multi-pose 2D and 3D facial landmark localisation and tracking},
author={Deng, Jiankang and Roussos, Anastasios and Chrysos, Grigorios and Ververas, Evangelos and Kotsia, Irene and Shen, Jie and Zafeiriou, Stefanos},
journal={IJCV},
year={2018}
}
@inproceedings{deng2018arcface,
title={ArcFace: Additive Angular Margin Loss for Deep Face Recognition},
author={Deng, Jiankang and Guo, Jia and Niannan, Xue and Zafeiriou, Stefanos},
booktitle={CVPR},
year={2019}
}