610265158 / face_landmark

A simple method for face alignment based on wingloss and mutitask learning :)
Apache License 2.0
251 stars 80 forks source link
face-aligment face-keypoint face-landmark tensorflow tensorflow2 wingloss

Note: This code is not maintained. Please refer to Peppa_Pig_Face_Landmark, The TRAIN subdir.There is better model.

face_landmark

A simple face aligment method, based on tensorflow2.0

introduction

This is the tensorflow2.0 branch, if u need to work on tf1 switch to branch tf1, it still work.

It is simple and flexible, trained with wingloss , multi task learning, also with data augmentation based on headpose and face attributes(eyes state and mouth state).

CN blog

And i suggest that you could try with another project,including face detect and keypoints, and some optimizations were made, u can check it there [pappa_pig_face_engine].

Contact me if u have problem about it. 2120140200@mail.nankai.edu.cn :)

demo pictures:

samples

gifs

this gif is from github.com/610265158/Peppa_Pig_Face_Engine, but it is the same model : )

pretrained model:

shufflenetv2_1.0 tflite is not ok, retrain is needed, sad, i need more time.
shufflenetv2_0.75 including tflite model, (time cost: mac i5-8279U@2.4GHz, tf2.0 5ms+, tflite 3.7ms+-)

requirment

useage

train

  1. download all the 300W data set including the 300VW(parse as images, and make the label the same formate as 300W)

    ├── 300VW
    │   ├── 001_annot
    │   ├── 002_annot
    │       ....
    ├── 300W
    │   ├── 01_Indoor
    │   └── 02_Outdoor
    ├── AFW
    │   └── afw
    ├── HELEN
    │   ├── testset
    │   └── trainset
    ├── IBUG
    │   └── ibug
    ├── LFPW
    │   ├── testset
    │   └── trainset
  2. run python make_json.py produce train.json and val.json (if u like train u own data, please read the json produced , it is quite simple)

  3. then, run: python train.py

  4. by default it trained with shufflenetv2_1.0

finetune

  1. download the pretrained model keypoints, put it into ./model and the model dir structure is :

    ./model/
    └── keypoints
        ├── saved_model.pb
        └── variables
            ├── variables.data-00000-of-00002
            ├── variables.data-00001-of-00002
            └── variables.index
    
  2. set config.MODEL.pretrained_model='./model/keypoints/variables/variables', in train_config.py

  3. adjust the lr policy

  4. python train.py

convert to tflite

  1. modify the model path in toos/convert_to_tflite.py

  2. python toos/convert_to_tflite.py it will produce converted_model.tflite

  3. CAUTION: the pretrained model shufflenentv2_1.0 is not ok with tflite, because the shuffle op, but it was fixed, if u need 1.0 please retrain, or wait for me.

    visualization

python vis.py --model ./model/keypoints  
or python vis.py --model ./model/keypoints.tflite  (need conver to tflite first) 

TODO: