by 610265158

610265158 / face_landmark

A simple method for face alignment based on wingloss and mutitask learning :)

157 Stars 52 Forks Last release: Not found Apache License 2.0 27 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


A simple face aligment method, based on tensorflow2.0


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 [pappapigface_engine].

Contact me if u have problem about it. [email protected] :)

demo pictures:



this gif is from github.com/610265158/PeppaPigFace_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 [email protected], tf2.0 5ms+, tflite 3.7ms+-)


  • tensorflow2.0

  • tensorpack (for data provider)

  • opencv

  • python 3.6



  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


  1. download the pretrained model keypoints, put it into ./model and the model dir structure is :
    └── keypoints
        ├── saved_model.pb
        └── variables
            ├── variables.data-00000-of-00002
            ├── variables.data-00001-of-00002
            └── variables.index

  1. set config.MODEL.pretrainedmodel='./model/keypoints/variables/variables', in trainconfig.py

  2. adjust the lr policy

  3. python train.py

convert to tflite

  1. modify the model path in toos/converttotflite.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.


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


  • [x] A face detector is needed.




  • [x] tflite model

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.