--- library_name: py-feat pipeline_tag: image-feature-extraction tags: - model_hub_mixin - pytorch_model_hub_mixin license: mit language: - en --- # Retinaface ## Model Description This is a PyTorch implementation of [RetinaFace: Single-stage Dense Face Localisation in the Wild](RetinaFace: Single-stage Dense Face Localisation in the Wild) based on [biubug6's implementation](https://github.com/biubug6/Pytorch_Retinaface). The Retinaface model utilizes a deep convolutional neural network architecture with multiple layers. It uses `mobilenet0.25` as the backbone network (only 1.7M parameters) but can also use `resnet50` as the backbone to achieve better results, but with additional computational overhead. This model returns bounding box locations of each detected face, confidence scores in the face detection, as well as 10 facial landmark keystones. - **License:** MIT - **License Link:** [MIT License](https://github.com/biubug6/Pytorch_Retinaface/blob/master/LICENSE.MIT) ## Model Details: - **Model Type**: Convolutional Neural Network (Mobilenet backbone) - **Framework**: pytorch - ## Model Sources - **Repository:** [Py-Feat](https://github.com/cosanlab/py-feat/tree/main/feat/face_detectors/Retinaface) - **Paper:** [RetinaFace: Single-stage Dense Face Localisation in the Wild](https://arxiv.org/abs/1905.00641) ## Model Architecture ## Evaluation Results The model was evaluated on the WIDER FACE dataset see the benchmark results in [biubug6 repository](https://github.com/biubug6/Pytorch_Retinaface) ## Citation If you use the Retinaface model in your research or application, please cite the following paper: ``` @misc{deng2019retinafacesinglestagedenseface, title={RetinaFace: Single-stage Dense Face Localisation in the Wild}, author={Jiankang Deng and Jia Guo and Yuxiang Zhou and Jinke Yu and Irene Kotsia and Stefanos Zafeiriou}, year={2019}, eprint={1905.00641}, archivePrefix={arXiv}, primaryClass={cs.CV}, url={https://arxiv.org/abs/1905.00641} } ``` ## Example Useage ```python import os import torch import json from PIL import Image from huggingface_hub import hf_hub_download from feat.face_detectors.Retinaface.Retinaface_model import RetinaFace, postprocess_retinaface from feat.utils.io import get_resource_path, get_test_data_path from feat.utils.image_operations import convert_image_to_tensor, convert_color_vector_to_tensor device = 'cpu' # Download Model Weights and Config File face_config_file = hf_hub_download( repo_id="py-feat/retinaface", filename="config.json", cache_dir=get_resource_path(), ) with open(face_config_file, "r") as f: face_config = json.load(f) face_model_file = hf_hub_download(repo_id='py-feat/retinaface', filename="mobilenet0.25_Final.pth", cache_dir=get_resource_path()) face_checkpoint = torch.load(face_model_file, map_location=device, weights_only=True) face_detector = RetinaFace(cfg=face_config, phase="test") face_detector.load_state_dict(face_checkpoint) face_detector.eval() face_detector.to(device) # Run Inference frame = Image.open(os.path.join(get_test_data_path(), "multi_face.jpg")) single_frame = torch.sub(frame, convert_color_vector_to_tensor(np.array([123, 117, 104]))) predicted_locations, predicted_scores, predicted_landmarks = face_detector.forward(single_frame.to(device)) face_output = postprocess_retinaface(predicted_locations, predicted_scores, predicted_landmarks, face_config, single_frame, device=device) ``` ## Acknowledgements We thank the contributors and the open-source community for their valuable support in developing this model. Special thanks to the authors of the original Retinaface paper, the WIDER FACE dataset, and biubug6 for sharing weights and code.