It is the training program for libfacedetection. The source code is based on MMDetection. Some data processing functions from SCRFD modifications.
Visualization of our network architecture: [netron].
conda create -n yunet python=3.8 conda activate yunet
# LINUX: conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch-lts -c nvidia # WINDOWS: conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch-lts -c conda-forgeOn GPU platforms (cu10.2):
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch-lts
# cu11.1 pip install mmcv-full==1.3.17 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html # cu10.2 pip install mmcv-full==1.3.17 -f https://download.openmmlab.com/mmcv/dist/cu102/torch1.8.0/index.html
$TRAIN_ROOT
.
git clone https://github.com/ShiqiYu/libfacedetection.train.git cd libfacedetection.train
python setup.py develop pip install -r requirements.txt
Note:
Ctrl + click
to origin line and replace torch.ao
to torch
$TRAIN_ROOT/data/widerface
as follows:
$ tree data/widerface data/widerface ├── wider_face_split ├── WIDER_test ├── WIDER_train ├── WIDER_val └── labelv2 ├── train │ └── labelv2.txt └── val ├── gt └── labelv2.txt
NOTE:
The labelv2
comes from SCRFD.
Following MMdetection training processing.
CUDA_VISIBLE_DEVICES=0,1 bash tools/dist_train.sh ./configs/yunet_n.py 2 12345
python tools/detect_image.py ./configs/yunet_n.py ./weights/yunet_n.pth ./image.jpg
python tools/test_widerface.py ./configs/yunet_n.py ./weights/yunet_n.pth --mode 2
Performance on WIDER Face (Val): confidence_threshold=0.02, nms_threshold=0.45, in origin size:
AP_easy=0.892, AP_medium=0.883, AP_hard=0.811
The following bash code can export a CPP file for project libfacedetection
python tools/yunet2cpp.py ./configs/yunet_n.py ./weights/yunet_n.pth
Export to onnx model for libfacedetection/example/opencv_dnn.
python tools/yunet2onnx.py ./configs/yunet_n.py ./weights/yunet_n.pthCompare ONNX model with other works
Inference on exported ONNX models using ONNXRuntime:
python tools/compare_inference.py ./onnx/yunet_n.onnx --mode AUTO --eval --score_thresh 0.02 --nms_thresh 0.45
Some similar approaches(e.g. SCRFD, Yolo5face, retinaface) to inference are also supported.
With Intel i7-12700K and input_size = origin size, score_thresh = 0.02, nms_thresh = 0.45
, some results are list as follow:
The compared models can be downloaded from Google Drive.
We published a paper for the main idea of this repository:
@article{yunet,
title={YuNet: A Tiny Millisecond-level Face Detector},
author={Wu, Wei and Peng, Hanyang and Yu, Shiqi},
journal={Machine Intelligence Research},
pages={1--10},
year={2023},
doi={10.1007/s11633-023-1423-y},
publisher={Springer}
}
The paper can be open accessed at https://link.springer.com/article/10.1007/s11633-023-1423-y.
The loss used in training is EIoU, a novel extended IoU. More details can be found in:
@article{eiou,
author={Peng, Hanyang and Yu, Shiqi},
journal={IEEE Transactions on Image Processing},
title={A Systematic IoU-Related Method: Beyond Simplified Regression for Better Localization},
year={2021},
volume={30},
pages={5032-5044},
doi={10.1109/TIP.2021.3077144}
}
The paper can be open accessed at https://ieeexplore.ieee.org/document/9429909.
We also published a paper on face detection to evaluate different methods.
@article{facedetect-yu,
author={Feng, Yuantao and Yu, Shiqi and Peng, Hanyang and Li, Yan-Ran and Zhang, Jianguo},
journal={IEEE Transactions on Biometrics, Behavior, and Identity Science},
title={Detect Faces Efficiently: A Survey and Evaluations},
year={2022},
volume={4},
number={1},
pages={1-18},
doi={10.1109/TBIOM.2021.3120412}
}
The paper can be open accessed at https://ieeexplore.ieee.org/document/9580485
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4