# YuNet YuNet is a light-weight, fast and accurate face detection model, which achieves 0.834(AP_easy), 0.824(AP_medium), 0.708(AP_hard) on the WIDER Face validation set. Notes: - Model source: [here](https://github.com/ShiqiYu/libfacedetection.train/blob/a61a428929148171b488f024b5d6774f93cdbc13/tasks/task1/onnx/yunet.onnx). - This model can detect **faces of pixels between around 10x10 to 300x300** due to the training scheme. - For details on training this model, please visit https://github.com/ShiqiYu/libfacedetection.train. - `face_detection_yunet_2026may.onnx` is the default model with **dynamic input shape** (symbolic `height` and `width` dims), compatible with OpenCV 5.x ONNX Runtime engine (`OPENCV_FORCE_DNN_ENGINE=4`). It is re-exported from `face_detection_yunet_2023mar.onnx` with static H/W dims replaced by symbolic dims, allowing inference at any resolution without resizing. - `face_detection_yunet_2023mar.onnx` has fixed input shape. OpenCV 4.x DNN infers on the exact shape of input image, but the ONNX Runtime engine in OpenCV 5.x requires dynamic dims for variable input sizes. See https://github.com/opencv/opencv_zoo/issues/44 for more information. - `face_detection_yunet_2023mar_int8bq.onnx` represents the block-quantized version in int8 precision and is generated using [block_quantize.py](../../tools/quantize/block_quantize.py) with `block_size=64`. - Paper source: [Yunet: A tiny millisecond-level face detector](https://link.springer.com/article/10.1007/s11633-023-1423-y). Results of accuracy evaluation with [tools/eval](../../tools/eval). | Models | Easy AP | Medium AP | Hard AP | | ----------- | ------- | --------- | ------- | | YuNet | 0.8844 | 0.8656 | 0.7503 | | YuNet block | 0.8845 | 0.8652 | 0.7504 | | YuNet quant | 0.8810 | 0.8629 | 0.7503 | \*: 'quant' stands for 'quantized'. \*\*: 'block' stands for 'blockwise quantized'. ## Demo ### Python Run the following command to try the demo: ```shell # detect on camera input python demo.py # detect on an image python demo.py --input /path/to/image -v # get help regarding various parameters python demo.py --help ``` ### C++ Install latest OpenCV and CMake >= 3.24.0 to get started with: ```shell # A typical and default installation path of OpenCV is /usr/local cmake -B build -D OPENCV_INSTALLATION_PATH=/path/to/opencv/installation . cmake --build build # detect on camera input ./build/demo # detect on an image ./build/demo -i=/path/to/image -v # get help messages ./build/demo -h ``` ### Example outputs ![webcam demo](./example_outputs/yunet_demo.gif) ![largest selfie](./example_outputs/largest_selfie.jpg) ## License All files in this directory are licensed under [MIT License](./LICENSE). ## Reference - https://github.com/ShiqiYu/libfacedetection - https://github.com/ShiqiYu/libfacedetection.train ## Citation If you use `YuNet` in your work, please use the following BibTeX entries: ``` @article{wu2023yunet, title={Yunet: A tiny millisecond-level face detector}, author={Wu, Wei and Peng, Hanyang and Yu, Shiqi}, journal={Machine Intelligence Research}, volume={20}, number={5}, pages={656--665}, year={2023}, publisher={Springer} } ```