mirror of
https://github.com/deepinsight/insightface.git
synced 2025-12-30 08:02:27 +00:00
add soft link
This commit is contained in:
@@ -1,229 +0,0 @@
|
||||
[简体中文](README_cn.md) | English
|
||||
|
||||
# Arcface-Paddle
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
`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](../../detection/blazeface_paddle/README_en.md).
|
||||
- For Whl package inference using PaddleInference, please refer to [whl package inference](https://github.com/littletomatodonkey/insight-face-paddle).
|
||||
|
||||
Note: Many thanks to [GuoQuanhao](https://github.com/GuoQuanhao) for the reproduction of the [Arcface basline using PaddlePaddle](https://github.com/GuoQuanhao/arcface-Paddle).
|
||||
|
||||
## 2. Environment Preparation
|
||||
|
||||
Please refer to [Installation](./install_en.md) to setup environment at first.
|
||||
|
||||
## 3. Data Preparation
|
||||
|
||||
### 3.1 Download Dataset
|
||||
|
||||
Download the dataset from [insightface datasets](https://github.com/deepinsight/insightface/tree/master/recognition/_datasets_).
|
||||
|
||||
* MS1M_v2: MS1M-ArcFace
|
||||
* MS1M_v3: MS1M-RetinaFace
|
||||
|
||||
### 3.2 Extract MXNet Dataset to images
|
||||
|
||||
```shell
|
||||
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.
|
||||
|
||||
## 4. How to Training
|
||||
|
||||
### 4.1 Single Node, Single GPU
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
### 4.2 Single Node, 8 GPUs:
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/train_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/train_dynamic.sh
|
||||
```
|
||||
|
||||
|
||||
During training, you can view loss changes in real time through `VisualDL`, For more information, please refer to [VisualDL](https://github.com/PaddlePaddle/VisualDL/).
|
||||
|
||||
|
||||
## 5. Model Evaluation
|
||||
|
||||
The model evaluation process can be started as follows.
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/validation_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/validation_dynamic.sh
|
||||
```
|
||||
|
||||
## 6. Export Model
|
||||
PaddlePaddle supports inference using prediction engines. Firstly, you should export inference model.
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/export_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/export_dynamic.sh
|
||||
```
|
||||
|
||||
We also support export to onnx model, you only need to set `--export_type onnx`.
|
||||
|
||||
## 7. Model Inference
|
||||
|
||||
The model inference process supports paddle save inference model and onnx model.
|
||||
|
||||
```bash
|
||||
sh scripts/inference.sh
|
||||
```
|
||||
|
||||
## 8. Model Performance
|
||||
|
||||
### 8.1 Performance of Lighting Model
|
||||
|
||||
**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](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/mobileface_v1.0_infer.tar) |
|
||||
| MobileFace-mxnet | 0.9950 | 0.8894 | 0.9591 | 7.3ms | 4.7ms | - |
|
||||
|
||||
* Note: MobileFace-Paddle training using MobileFaceNet_128
|
||||
|
||||
### 8.2 Accuracy on Verification Datasets
|
||||
|
||||
**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](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/static/ms1mv3_r50_static_128_fp16_0.1/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_static_128_fp16_0.1_epoch_24.tgz) |
|
||||
| Static | MS1MV3 | r50 | 1.0 | 0.98283 | 0.98843| 0.99850 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/static/ms1mv3_r50_static_128_fp16_1.0/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_static_128_fp16_1.0_epoch_24.tgz) |
|
||||
| Dynamic | MS1MV3 | r50 | 0.1 | 0.98333 | 0.98900| 0.99833 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/dynamic/ms1mv3_r50_dynamic_128_fp16_0.1/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_dynamic_128_fp16_0.1_eopch_24.tgz) |
|
||||
| Dynamic | MS1MV3 | r50 | 1.0 | 0.98317 | 0.98900| 0.99833 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/dynamic/ms1mv3_r50_dynamic_128_fp16_1.0/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_dynamic_128_fp16_1.0_eopch_24.tgz) |
|
||||
|
||||
|
||||
### 8.3 Maximum Number of Identities
|
||||
|
||||
**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``
|
||||
|
||||
### 8.4 Throughtput
|
||||
|
||||
**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](https://github.com/PaddlePaddle/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).
|
||||
|
||||
## 9. Inference Combined with Face Detection Model
|
||||
|
||||
Firstly, use the following commands to download the index gallery, demo image and font file for visualization.
|
||||
|
||||
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
```shell
|
||||
# detection + recogniotion process
|
||||
python3.7 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.
|
||||
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/main/demo/friends/output/friends2.jpg" width = "800" />
|
||||
</div>
|
||||
|
||||
For more details about parameter explanations, index gallery construction and whl package inference, please refer to [Whl package inference tutorial](https://github.com/littletomatodonkey/insight-face-paddle).
|
||||
1
recognition/arcface_paddle/README.md
Symbolic link
1
recognition/arcface_paddle/README.md
Symbolic link
@@ -0,0 +1 @@
|
||||
README_en.md
|
||||
229
recognition/arcface_paddle/README_en.md
Normal file
229
recognition/arcface_paddle/README_en.md
Normal file
@@ -0,0 +1,229 @@
|
||||
[简体中文](README_cn.md) | English
|
||||
|
||||
# Arcface-Paddle
|
||||
|
||||
## 1. Introduction
|
||||
|
||||
`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](../../detection/blazeface_paddle/README_en.md).
|
||||
- For Whl package inference using PaddleInference, please refer to [whl package inference](https://github.com/littletomatodonkey/insight-face-paddle).
|
||||
|
||||
Note: Many thanks to [GuoQuanhao](https://github.com/GuoQuanhao) for the reproduction of the [Arcface basline using PaddlePaddle](https://github.com/GuoQuanhao/arcface-Paddle).
|
||||
|
||||
## 2. Environment Preparation
|
||||
|
||||
Please refer to [Installation](./install_en.md) to setup environment at first.
|
||||
|
||||
## 3. Data Preparation
|
||||
|
||||
### 3.1 Download Dataset
|
||||
|
||||
Download the dataset from [insightface datasets](https://github.com/deepinsight/insightface/tree/master/recognition/_datasets_).
|
||||
|
||||
* MS1M_v2: MS1M-ArcFace
|
||||
* MS1M_v3: MS1M-RetinaFace
|
||||
|
||||
### 3.2 Extract MXNet Dataset to images
|
||||
|
||||
```shell
|
||||
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.
|
||||
|
||||
## 4. How to Training
|
||||
|
||||
### 4.1 Single Node, Single GPU
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
### 4.2 Single Node, 8 GPUs:
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/train_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/train_dynamic.sh
|
||||
```
|
||||
|
||||
|
||||
During training, you can view loss changes in real time through `VisualDL`, For more information, please refer to [VisualDL](https://github.com/PaddlePaddle/VisualDL/).
|
||||
|
||||
|
||||
## 5. Model Evaluation
|
||||
|
||||
The model evaluation process can be started as follows.
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/validation_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/validation_dynamic.sh
|
||||
```
|
||||
|
||||
## 6. Export Model
|
||||
PaddlePaddle supports inference using prediction engines. Firstly, you should export inference model.
|
||||
|
||||
#### Static Mode
|
||||
|
||||
```bash
|
||||
sh scripts/export_static.sh
|
||||
```
|
||||
|
||||
#### Dynamic Mode
|
||||
|
||||
```bash
|
||||
sh scripts/export_dynamic.sh
|
||||
```
|
||||
|
||||
We also support export to onnx model, you only need to set `--export_type onnx`.
|
||||
|
||||
## 7. Model Inference
|
||||
|
||||
The model inference process supports paddle save inference model and onnx model.
|
||||
|
||||
```bash
|
||||
sh scripts/inference.sh
|
||||
```
|
||||
|
||||
## 8. Model Performance
|
||||
|
||||
### 8.1 Performance of Lighting Model
|
||||
|
||||
**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](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/mobileface_v1.0_infer.tar) |
|
||||
| MobileFace-mxnet | 0.9950 | 0.8894 | 0.9591 | 7.3ms | 4.7ms | - |
|
||||
|
||||
* Note: MobileFace-Paddle training using MobileFaceNet_128
|
||||
|
||||
### 8.2 Accuracy on Verification Datasets
|
||||
|
||||
**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](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/static/ms1mv3_r50_static_128_fp16_0.1/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_static_128_fp16_0.1_epoch_24.tgz) |
|
||||
| Static | MS1MV3 | r50 | 1.0 | 0.98283 | 0.98843| 0.99850 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/static/ms1mv3_r50_static_128_fp16_1.0/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_static_128_fp16_1.0_epoch_24.tgz) |
|
||||
| Dynamic | MS1MV3 | r50 | 0.1 | 0.98333 | 0.98900| 0.99833 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/dynamic/ms1mv3_r50_dynamic_128_fp16_0.1/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_dynamic_128_fp16_0.1_eopch_24.tgz) |
|
||||
| Dynamic | MS1MV3 | r50 | 1.0 | 0.98317 | 0.98900| 0.99833 | [log](https://github.com/PaddlePaddle/PLSC/blob/master/experiments/arcface_paddle/logs/dynamic/ms1mv3_r50_dynamic_128_fp16_1.0/training.log) | [checkpoint](https://paddle-model-ecology.bj.bcebos.com/model/insight-face/distributed/ms1mv3_r50_dynamic_128_fp16_1.0_eopch_24.tgz) |
|
||||
|
||||
|
||||
### 8.3 Maximum Number of Identities
|
||||
|
||||
**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``
|
||||
|
||||
### 8.4 Throughtput
|
||||
|
||||
**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](https://github.com/PaddlePaddle/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).
|
||||
|
||||
## 9. Inference Combined with Face Detection Model
|
||||
|
||||
Firstly, use the following commands to download the index gallery, demo image and font file for visualization.
|
||||
|
||||
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
```shell
|
||||
# detection + recogniotion process
|
||||
python3.7 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.
|
||||
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/littletomatodonkey/insight-face-paddle/main/demo/friends/output/friends2.jpg" width = "800" />
|
||||
</div>
|
||||
|
||||
For more details about parameter explanations, index gallery construction and whl package inference, please refer to [Whl package inference tutorial](https://github.com/littletomatodonkey/insight-face-paddle).
|
||||
Reference in New Issue
Block a user