/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.

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.849, AP_medium=0.816, AP_hard=0.601

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

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 .