Package: face-detection
State of the Art Face Detection in Pytorch with DSFD and RetinaFaceThis repository includes:A High-Performance Pytorch Implementation of the paper "DSFD: Dual Shot Face Detector" (CVPR 2019).adapted from theoriginal source code.Lightweight single-shot face detection from the paperRetinaFace: Single-stage Dense Face Localisation in the Wildadapted fromhttps://github.com/biubug6/Pytorch_Retinaface.NOTEThis implementation can only be used for inference of a selection of models and all training scripts are removed. If you want to finetune any models, we recommend you to use the original source code.InstallYou can install this repository with pip (requires python>=3.6);pipinstallgit+https://github.com/hukkelas/DSFD-Pytorch-Inference.gitYou can also install with thesetup.pypython3setup.pyinstallGetting startedRunpython3 test.pyThis will look for images in theimages/folder, and save the results in the same folder with an ending_out.jpgSimple APITo perform detection you can simple use the following lines:importcv2importface_detectionprint(face_detection.available_detectors)detector=face_detection.build_detector("DSFDDetector",confidence_threshold=.5,nms_iou_threshold=.3)# BGR to RGBim=cv2.imread("path_to_im.jpg")[:,:,::-1]detections=detector.detect(im)This will return a tensor with shape[N, 5], where N is number of faces and the five elements are[xmin, ymin, xmax, ymax, detection_confidence]Batched inferenceimportnumpyasnpimportface_detectionprint(face_detection.available_detectors)detector=face_detection.build_detector("DSFDDetector",confidence_threshold=.5,nms_iou_threshold=.3)# [batch size, height, width, 3]images_dummy=np.zeros((2,512,512,3))detections=detector.batched_detect(im)ImprovementsDifference from DSFDFor the original source code, seehere.Removal of all unnecessary files for training / loading VGG models.Improve the inference time by about 30x (from ~6s to 0.2) with rough estimates usingtime(Measured on a V100-32GB GPU).The main improvements in inference time comes from:Replacing non-maximum-suppression to ahighly optimized torchvision versionRefactoringinit_priorsin theSSD modelto cache previous prior sizes (no need to generate this per forward pass).Refactoring the forward pass inDetectinutils.pyto perform confidence thresholding before non-maximum suppressionMinor changes in the forward pass to use pytorch 1.0 featuresDifference from RetinaFaceFor the original source code, seehere.We've done the following improvements:Remove gradient computation for inference (torch.no_grad).Replacing non-maximum-suppression to ahighly optimized torchvision versionInference timeThis isvery roughlyestimated on a 1024x687 image. The reported time is the average over 1000 forward passes on a single image. (With no cudnn benchmarking and no fp16 computation).DSFDDetectorRetinaNetResNet50RetinaNetMobileNetV1CPU (Intel 2.2GHz i7) *17,496 ms (0.06 FPS)2970ms (0.33 FPS)270ms (3.7 FPS)NVIDIA V100-32GB100ms (10 FPS)NVIDIA GTX 1060 6GB341ms (2.9 FPS)76.6ms (13 FPS)48.2ms (20.7 FPS)NVIDIA T4 16 GB482 ms (2.1 FPS)181ms (5.5 FPS)178ms (5.6 FPS)*Done over 100 forward passes on a MacOS Mid 2014, 15-Inch.ChangelogSeptember 1st 2020: added support for fp16/mixed precision inferenceSeptember 24th 2020: added support for TensorRT.TensorRT Inference (Experimental)You can run RetinaFace ResNet-50 with TensorRT:fromface_detection.retinaface.tensorrt_wrapimportTensorRTRetinaFaceinference_imshape=(480,640)# Input to the CNNinput_imshape=(1080,1920)# Input for original video sourcedetector=TensorRTRetinaFace(input_imshape,imshape)boxes,landmarks,scores=detector.infer(image)CitationIf you find this code useful, remember to cite the original authors:@inproceedings{li2018dsfd,
  title={DSFD: Dual Shot Face Detector},
  author={Li, Jian and Wang, Yabiao and Wang, Changan and Tai, Ying and Qian, Jianjun and Yang, Jian and Wang, Chengjie and Li, Jilin and Huang, Feiyue},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  year={2019}
}

@inproceedings{deng2019retinaface,
  title={RetinaFace: Single-stage Dense Face Localisation in the Wild},
  author={Deng, Jiankang and Guo, Jia and Yuxiang, Zhou and Jinke Yu and Irene Kotsia and Zafeiriou, Stefanos},
  booktitle={arxiv},
  year={2019}