A TensorFlow port(inference only) of Tiny Face Detector from authors' MatConvNet codes[1].
Codes are written in Python. At first install Anaconda. Then install OpenCV, TensorFlow.
matconvnet_hr101_to_pickle
reads weights of the MatConvNet pretrained model and
write back to a pickle file which is used in a TensorFlow model as initial weights.
Download a ResNet101-based pretrained model(hr_res101.mat) from the authors' repo.
Convert the model to a pickle file by:
python matconvnet_hr101_to_pickle.py
--matlab_model_path /path/to/pretrained_model
--weight_file_path /path/to/pickle_file
Prepare images in a directory.
tiny_face_eval.py
reads images one by one from the image directory and
write images to an output directory with bounding boxes of detected faces.
python tiny_face_eval.py
--weight_file_path /path/to/pickle_file
--data_dir /path/to/input_image_directory
--output_dir /path/to/output_directory
This(pdf) is a network diagram of the ResNet101-based model used here for an input image(height: 1150, width: 2048, channel: 3).
Though this model is developed to detect tiny faces, I apply this to several types of images including 'faces' as experiments.
This is the same image as one in the authors' repo[1].
Homer and "Meryl Streep" are missed.
Facebook's face detector failed to detect these faces(as of the paper publication date[14 Feb 2016]).
fake_parula.py
.Codes are tested only on CPUs, not GPUs.
Hu, Peiyun and Ramanan, Deva, Finding Tiny Faces, The IEEE Conference on Computer Vision and Pattern Recognition (CVPR 2017). project page, arXiv
Michael J. Wilber, Vitaly Shmatikov, Serge Belongie, Can we still avoid automatic face detection, 2016. arXiv