recognition/arcface_paddle/README.md
简体中文 | English
<a name="Introduction"></a>
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.
Note: Many thanks to GuoQuanhao for the reproduction of the Arcface basline using PaddlePaddle.
<a name="Environment_Preparation"></a>
Please refer to Installation to setup environment at first.
<a name="Data_Preparation"></a>
<a name="Download_Dataset"></a>
Download the dataset from insightface datasets.
<a name="Extract_MXNet_Dataset_to_images"></a>
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.
<a name="How_to_Training"></a>
<a name="Single_Node_Single_GPU"></a>
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
<a name="Single_Node_8_GPU"></a>
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.
<a name="Model_Evaluation"></a>
The model evaluation process can be started as follows.
sh scripts/validation_static.sh
sh scripts/validation_dynamic.sh
<a name="Export_Model"></a>
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.
<a name="Model_Inference"></a>
The model inference process supports paddle save inference model and onnx model.
sh scripts/inference.sh
<a name="Model_Performance"></a>
<a name="Performance_of_Lighting_Model"></a>
Configuration:
| 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 | - |
<a name="Accuracy_on_Verification_Datasets"></a>
Configuration:
| 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 |
<a name="Maximum_Number_of_Identities"></a>
Configuration:
| 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
<a name="Throughtput"></a>
Configuration:
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).
<a name="Inference_Combined_with_Face_Detection_Model"></a>
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: