/libfacedetection.train

The training program for libfacedetection for face detection and 5-landmark detection.

Primary LanguagePythonMIT LicenseMIT

Training for libfacedetection in PyTorch

License

It is the training program for libfacedetection. The source code is based on FaceBoxes.PyTorch and ssd.pytorch.

Visualization of our network architecture: [netron].

Contents

Installation

  1. Install PyTorch >= v1.0.0 following official instruction.

  2. Clone this repository. We will call the cloned directory as $TRAIN_ROOT.

git clone https://github.com/ShiqiYu/libfacedetection.train
  1. Install dependencies.
pip install -r requirements.txt

Note: Codes are based on Python 3+.

Training

  1. Download WIDER FACE dataset, place the images under this directory:
$TRAIN_ROOT/data/WIDER_FACE_rect/images

and create a symbol link to this directory from

$TRAIN_ROOT/data/WIDER_FACE_landmark/images
  1. Train the model using WIDER FACE:
cd $TRAIN_ROOT/tasks/task1/
python3 train.py

Detection

cd $TRAIN_ROOT/tasks/task1/
./detect.py -m weights/yunet_final.pth --image_file=filename.jpg

Evaluation on WIDER Face

  1. Enter the directory.
cd $TRAIN_ROOT/tasks/task1/
  1. Create a symbolic link to WIDER Face. $WIDERFACE is the path to WIDER Face dataset, which contains wider_face_split/, WIDER_val, etc.
ln -s $WIDERFACE widerface
  1. Perform evaluation. To reproduce the following performance, run on the default settings. Run python test.py --help for more options.
mkdir results
python test.py
  1. Download and run the official evaluation tools. NOTE: Matlab required!
# download
wget http://shuoyang1213.me/WIDERFACE/support/eval_script/eval_tools.zip
# extract
unzip eval_tools.zip
# run the offical evaluation script
cd eval_tools
vim wider_eval.m # modify line 10 and line 21 according to your case
matlab -nodesktop -nosplash -r "run wider_eval.m;quit;"

Performance on WIDER Face (Val)

Run on default settings: scales=[1.], confidence_threshold=0.3:

AP_easy=0.852, AP_medium=0.823, AP_hard=0.646

Export CPP source code

The following bash code can export a CPP file for project libfacedetection

cd $TRAIN_ROOT/tasks/task1/
./exportcpp.py -m weights/yunet_final.pth -o output.cpp

Export to onnx model

Export to onnx model for libfacedetection/example/opencv_dnn.

cd $TRAIN_ROOT/tasks/task1/
python exportonnx.py -m weights/yunet_final.pth

Design your own model

You can copy $TRAIN_ROOT/tasks/task1/ to $TRAIN_ROOT/tasks/task2/ or other similar directory, and then modify the model defined in file: tasks/task2/yufacedetectnet.py .

Citation

Our paper, which introduces a novel loss named Extended IoU (EIoU), is coming out soon. We trained our model using the EIoU loss and obtained a performance boost, see Performance on WIDER Face (Val) for details. Stay tune for the release of our paper!