PyramidBox
A Context-assisted Single Shot Face Detector in TensorFlow
Install / Use
/learn @EricZgw/PyramidBoxREADME
PyramidBox
This is an unofficial Tensorflow re-implementation of PyramidBox: A Context-assisted Single Shot Face Detector, which achieves superior performance among the state-of-the-art on the two common face detection benchmarks, FDDB and WIDER FACE.
Note
There is still a gap in performance from the paper. May be caused by several reasons:
- Without implementing data-anchor-sampling.
- Differences of data augmentation from original.
- The batch size in the paper is 16, but I used 1 because of the limitation of memory.
- Hyperparameters not mentioned in the paper.
- Differences of deep learning framework.
Results
Face Detection

Results on WIDER FACE validation set:
This is just a very casual training result. I believe you can achieve better results after trying some other hyperparameters. For example: batch size, learning rate and some parameters related to the loss function,etc.
<center>| Method | AP Easy | AP Medium | AP Hard | |:-------|:-------:|:-------:|:-------: | original | 96.1 | 95.0 | 88.9 | | this repo | 90.6 | 88.8 | 73.4 |
</center>Usage
Prerequisites
(Only tested on) Ubuntu 16.04 with:
- Python3
- Tensorflow-gpu 1.4
- OpenCV3
Clone the repo
git clone https://github.com/EricZgw/PyramidBox.git
python makedir.py
Download PyramidBox models form BaiduYun or GoogleDrive .
Demo
Run the following script for visualization:
python demo.py
Train on WIDER FACE Datasets
- Download pre-trained VGG16 models from here and put it to /checkpoints. <br>
- Download WIDER FACE Datasets and convert to VOC format. Path looks like below:
datasets/
|->widerface/
| |->WIDER_train/
| |->WIDER_val/
| |->WIDER_test/
| |->Annotations/
| |->JPEGImages/
| |...
- Run the following script to generate TFRecords:
python datasets/pascalvoc_to_tfrecords.py
You can run `check_data_io.py` to check data. This step is not necessary.
- The training strategy is two-stages:
First run
train_model.pywith below setting to train additional PyramidBox layers:
self.fine_tune_vgg16 = False
- Then set
self.fine_tune_vgg16 =Tureto runtrain_model.pyto train total network.
Validation
Run the following script for evaluation and get mAP:
python widerface_eval.py
cd eval/eval_tools
octave wider_eval.m
TODO
- Add data-anchor-sampling
- Try more logical and rigorous data augmentation
- Transfer to other backbone networks
Reference
SSD-Tensorflow<br> SSD_tensorflow_VOC
Contact
If you find any problems, welcome to open a new issue or contact zhaogw93@126.com .
Related Skills
node-connect
349.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
