delphifirst / facex Goto Github PK
View Code? Open in Web Editor NEWA high performance open source face landmarks detector, based on explicit shape regression algorithm.
License: Other
A high performance open source face landmarks detector, based on explicit shape regression algorithm.
License: Other
hi yang,
many thanks for your codes, it is clean and works well.
but i tested on the new released casia-webface dataset, facex fails to generate meaningful landmarks on a large portion of images, mainly due to the failure of face detection. please see the figure below for an exmaple.
i wonder if there is any improvement space by using larger dataset or better algorithm tuning? and can the provided model reproduce the accuracy reported by xudong's paper? besides, there are also several cnn-based works, do you have any comment?
many thanks,
mu
Hi:
as you said that the face rect is used by Mapshape function. That is ok if some landmarks are out of the face rect. But it is error when i use some samples that have some landmarks being out of the sample's face rect. where is the error is in the function cv::kmenas.
why?
thanks
Hi, first of all thanx for sharing your project!
I was wondering if u can also share classes used for training? because with out them its impossible to train different models using different dataset or different face-detector for example.
looking forward to hear from you!
hi, how to understand the function MapShape.
why use the function?
thanks
hi, why need a face rect in the train processing?
if a sample 's landmarks are out of the face rect, what it will happen?
thanks
Hi, I was able to run the code of alignment and training successfully on Mac Os.
The only issue regarding the training code (in my case at least) was in the MapShape function in utils_train.cpp file.
Just change the function MapShape to the following and the training will work (I had to cast the x and y values to int)
vectorcv::Point2d MapShape(cv::Rect original_face_rect,
const vectorcv::Point2d original_landmarks, cv::Rect new_face_rect)
{
vectorcv::Point2d result;
for (const cv::Point2d &landmark: original_landmarks)
{
result.push_back(landmark);
result.back() -= cv::Point2d(original_face_rect.x, original_face_rect.y);
result.back().x = result.back().x * (int)
((float)(new_face_rect.width) / original_face_rect.width);
result.back().y = result.back().y * (int)
((float)(new_face_rect.height) / original_face_rect.height);
result.back() += cv::Point2d(new_face_rect.x, new_face_rect.y);
}
return result;
}
The helen dataset does not have a face area. How should I obtain a face area when training on a helen dataset?
Memory usage after loading the library = ~600MB. The training data (uncompressed) in XML format is roughly 90MB. I'm wondering if memory usage could be reduced.
hi , the paper said that it run at 1 ms for detecting 29 landmarks. but i test the 29 landmarks using your code need 15ms.
why?
can you give me some ideas for speed up?
thanks
Hi,
thank you for your sharing code.
i have a question about procrustes transform. The function
Transform Procrustes(const vectorcv::Point2d &x, const vectorcv::Point2d &y)
i do not understand the solution why equal to A.inv() * b ?why the Matirx A is so ?
thanks!
hi, as i know , the face alignment paper did not apply the compression.
i have three questions about the compressferns function:
one, how to understand the expression rand_index[i] >> training_parameters.k
and i cout the expression rand_index[i] >> training_parameters.k , it is alway equal to zero. why?
three, how to understand the expression rand_index[i] & ((1 << training_parameters.F) - 1)
thanks
hello, nice work !
the detection spends almost all of its time in Regresseor::Apply() here
replacing the for loop and the multiple matrix operations with less, and larger ones reduced execution time by a good half.
cv::Mat result_mat; // no initialization
Mat c(coeffs),c2; // c2 will have same shape as base_
c = c.reshape(1,1); // we need a row vec
repeat(c, base_.rows, 1, c2); // the 1st row of coeffs all the way down
Mat m2;
multiply(base_, c2, m2); // giant per element mul
reduce(m2, result_mat, 1, REDUCE_SUM); // sum up the cols into result_mat
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.