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]).
- Many python codes are borrowed from chinakook's MXNet tiny face detector
- parula colormap table is borrowed from
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