简体中文 | English
- 1. Introduction
- 2. Environment Preparation
- 3. Data Preparation
- 4. How to Training
- 5. Model Evaluation
- 6. Export Model
- 7 Model Inference
- 8 Model Performance
- 9. Inference Combined with Face Detection Model
Arcface-Paddle
is an open source deep face detection and recognition toolkit, powered by PaddlePaddle. Arcface-Paddle
provides three related pretrained models now, include BlazeFace
for face detection, ArcFace
and MobileFace
for face recognition.
- This tutorial is mainly about face recognition.
- For face detection task, please refer to: Face detection tuturial.
- For Whl package inference using PaddleInference, please refer to whl package inference.
Note: Many thanks to GuoQuanhao for the reproduction of the Arcface basline using PaddlePaddle.
Please refer to Installation to setup environment at first.
Download the dataset from insightface datasets.
- MS1M_v2: MS1M-ArcFace
- MS1M_v3: MS1M-RetinaFace
python tools/mx_recordio_2_images.py --root_dir ms1m-retinaface-t1/ --output_dir MS1M_v3/
After finishing unzipping the dataset, the folder structure is as follows.
MS1M_v3
|_ images
| |_ 00000001.jpg
| |_ ...
| |_ 05179510.jpg
|_ label.txt
|_ agedb_30.bin
|_ cfp_ff.bin
|_ cfp_fp.bin
|_ lfw.bin
Label file format is as follows.
# delimiter: "\t"
# the following the content of label.txt
images/00000001.jpg 0
...
If you want to use customed dataset, you can arrange your data according to the above format.
export CUDA_VISIBLE_DEVICES=1
python tools/train.py \
--config_file configs/ms1mv2_mobileface.py \
--embedding_size 128 \
--sample_ratio 1.0 \
--loss ArcFace \
--batch_size 512 \
--dataset MS1M_v2 \
--num_classes 85742 \
--data_dir MS1M_v2/ \
--label_file MS1M_v2/label.txt \
--fp16 False
sh scripts/train_static.sh
sh scripts/train_dynamic.sh
During training, you can view loss changes in real time through VisualDL
, For more information, please refer to VisualDL.
The model evaluation process can be started as follows.
sh scripts/validation_static.sh
sh scripts/validation_dynamic.sh
PaddlePaddle supports inference using prediction engines. Firstly, you should export inference model.
sh scripts/export_static.sh
sh scripts/export_dynamic.sh
We also support export to onnx model, you only need to set --export_type onnx
.
The model inference process supports paddle save inference model and onnx model.
sh scripts/inference.sh
Configuration:
- CPU: Intel(R) Xeon(R) Gold 6184 CPU @ 2.40GHz
- GPU: a single NVIDIA Tesla V100
- Precison: FP32
- BatchSize: 64/512
- SampleRatio: 1.0
- Embedding Size: 128
- MS1MV2
Model structure | lfw | cfp_fp | agedb30 | CPU time cost | GPU time cost | Inference model |
---|---|---|---|---|---|---|
MobileFace-Paddle | 0.9952 | 0.9280 | 0.9612 | 4.3ms | 2.3ms | download link |
MobileFace-mxnet | 0.9950 | 0.8894 | 0.9591 | 7.3ms | 4.7ms | - |
- Note: MobileFace-Paddle training using MobileFaceNet_128
Configuration:
- GPU: 8 NVIDIA Tesla V100 32G
- Precison: Pure FP16
- BatchSize: 128/1024
Mode | Datasets | backbone | Ratio | agedb30 | cfp_fp | lfw | log | checkpoint |
---|---|---|---|---|---|---|---|---|
Static | MS1MV3 | r50 | 0.1 | 0.98317 | 0.98943 | 0.99850 | log | checkpoint |
Static | MS1MV3 | r50 | 1.0 | 0.98283 | 0.98843 | 0.99850 | log | checkpoint |
Dynamic | MS1MV3 | r50 | 0.1 | 0.98333 | 0.98900 | 0.99833 | log | checkpoint |
Dynamic | MS1MV3 | r50 | 1.0 | 0.98317 | 0.98900 | 0.99833 | log | checkpoint |
Configuration:
- GPU: 8 NVIDIA Tesla V100 32G (32510MiB)
- BatchSize: 64/512
- SampleRatio: 0.1
Mode | Precision | Res50 | Res100 |
---|---|---|---|
Framework1 (static) | AMP | 42000000 (31792MiB) | 39000000 (31938MiB) |
Framework2 (dynamic) | AMP | 30000000 (31702MiB) | 29000000 (32286MiB) |
Paddle (static) | Pure FP16 | 60000000 (32018MiB) | 60000000 (32018MiB) |
Paddle (dynamic) | Pure FP16 | 59000000 (31970MiB) | 59000000 (31970MiB) |
Note: config environment variable by export FLAGS_allocator_strategy=naive_best_fit
Configuration:
- BatchSize: 128/1024
- SampleRatio: 0.1
- Datasets: MS1MV3
- V100: Driver Version: 450.80.02, CUDA Version: 11.0
- A100: Driver Version: 460.32.03, CUDA Version: 11.2
For more experimental results see PLSC, which is an open source Paddle Large Scale Classification Tools powered by PaddlePaddle. It supports 60 million classes on single node 8 NVIDIA V100 (32G).
Firstly, use the following commands to download the index gallery, demo image and font file for visualization.
# Index library for the recognition process
wget https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/main/demo/friends/index.bin
# Demo image
wget https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/main/demo/friends/query/friends2.jpg
# Font file for visualization
wget https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/main/SourceHanSansCN-Medium.otf
Use the following command to run the whole face recognition demo.
# detection + recogniotion process
python3.7 tools/test_recognition.py --det --rec --index=index.bin --input=friends2.jpg --output="./output"
The final result is save in folder output/
, which is shown as follows.
For more details about parameter explanations, index gallery construction and whl package inference, please refer to: