Shizhan Zhu等人的CVPR-15工作面部对齐的完整版(训练+测试)粗面到精细形状搜索
Shizhan Zhu
Released on July 25, 2015
If you want to use our code to train on another dataset (e.g. the WFLW dataset) please have a look at this: We post our full codes for training on the WFLW dataset for comparison with future works. Please follow this for the codes (a new branch). Particularly, please refer to here for a detailed instruction on how to modify the hyperparameters inside addAll.m (mainly readjusting the hyperparameters according to new landmark protocols and new dataset size).
By research demands, we further release a CFSS model that is specifically trained for VJ (Matlab) face detection box. Download the model here.
A comprehensive evaluation of our approach (CFSS) by IBUG here.
The released off-the-shelf model is trained only dedicated to the distribution of labeled boxes of IBUG provided by the offical site (as stored in our data folder). If you want to test this method with other distribution of bounding box even with the same 68 landmarks, you need to retrain the model, in which the training set should be given the same bounding box distribution as your test set (rather than the existing one). Details of the bounding box issues in retraining can refer to the second point of Notes.
I have updated the error evaluation codes to better facilitate comparison for future works. After running the inference script, the variable er
would exist in the workspace, which is the error vector used for calculating the mean error and CED curve. Specifically, we use the mean of 6-point around eyes to calculate the inter-pupil distance.
This is the implementation of Shizhan Zhu et al.’s CVPR-15 work Face Alignment by Coarse-to-Fine Shape Searching. It is open source under BSD-3 license (see the LICENSE
file). Codes can be used freely only for academic purpose. If you want to apply it to industrial products, please send an email to Shizhan Zhu at zhshzhutah2@gmail.com
first.
If you use the codes as part of your research project, please cite our work as follows:
@inproceedings{zhu2015face,
title={Face Alignment by Coarse-to-Fine Shape Searching},
author={Zhu, Shizhan and Li, Cheng and Loy, Chen Change and Tang, Xiaoou},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
pages={4998--5006},
year={2015}
}
length(T) must be the same as size(oldPose,1)!
. For more details about the reason, please refer to the content of Issue #01. Here we would like to express our sincere thanks to maxpy for providing precious discovery and suggestion to the problem.Due to license issues, this implementation uses two publicly avaiable software packages as opposed to our original implementation:
external
folder. Matlab compatible bainary files must exist. Please note we have put vl_sift_toosimple.c
in the codes_released/feat/SIFT
folder. Please put it into the directory of external/vlfeat-0.x.xx/toolbox/sift
before compiling (and hence its relative Matlab compatible binary file would appear after compiling). This would slightly speed up sift extraction.imageSource
folder. All images could be downloaded at IBUG page. Only LFPW, Helen, AFW and IBUG set are required. Please change one of the filename in IBUG set from image_092⋅_01.jpg
to image_092_01.jpg
to avoid space in file name.To train the model using the default setting, simply use the following command:
>> getParametricModels; addAll; learnCFSS;
Model files would be expected to appear in the model
folder.
To do testing, simply use the following command:
>> inferenceCFSS;
After testing, the variable estimatedPose
would exist in the workspace, which is our final estimated facial shape.
A pre-trained model can be downloaded from here. Extract the three model files and put them into the model
folder and run the inference script. Be reminded that all functions path should be included. As aforementioned, this model is trained only dedicated to the distribution of labeled boxes of IBUG.
By research demands, we further release a CFSS model that is specifically trained for VJ (Matlab) face detection box. Download the model here.
With following two simple configuraton changes (you can do it in addAll.m
), our codes can degenerate to SDM. Users can observe results difference especially in the cases where large head pose or extreme expression (e.g. large mouth) exihibits.
config.stageTot = 1;
config.regs.iterTot = 4;
Shape is represented as a 2n dimensional vector each in the format of [x1,x2,...,xn,y1,y2,...,yn]
. Format of bounding box is [left, right, top, bottom]
.
We have uploaded our demo video in youtube. The trained model should perform with similar accuracy as shown in the demo video. Otherwise, the software might have been used in an inappropriate way.
We need to point out again, in this implementation, we can only use the publicly available packages VLFeat and LibSVM due to open source license issues. If you want a faster performance, you need to pay attention to some details like integral map sharing tricks. Classifiers should also be replaced by much faster ones like linear kernel.
Suggestions and opinions of this work (both positive and negative) are greatly welcome. Please contact the author by sending email to zhshzhutah2@gmail.com
.
Why does the function svmtrain
or svmpredict
prompt errors?
Please note Matlab itself contains such two functions, and their interface is slightly different from those in libSVM. Please make sure you have included the path to libSVM.
BSD-3, see LICENSE
file for details.