我正在进行面部表情识别项目,使用dlib获取面部并提取描述符和libsvm来训练获得的数据。我在Visual Studio Community 2015中使用c ++。到目前为止,我已经提取了高维LBP描述符,现在想要了解所获得的功能并使用libsvm进行训练。我被困在这里,因为我无法理解我的功能中的数据。矢量,并且还无法将其转换为libsvm公认的培训格式。
以下是代码段。在此之前,我猜几乎一切都是不言自明的。
std::vector<std::vector<double>> features;//storing features for all images
std::vector<double> feat;//for a single image
extract_highdim_face_lbp_descriptors(img, shape, feat); //dlib's function, storing extracted info in 'feat'
features.push_back(feat);
//Now all the info for all the images is stored in 'features' vector. I now need to train the data and make a suitable model using libsvm, precisely RBF kernel.
&#13;
答案 0 :(得分:1)
您需要存储为功能,作为标签来进行学习过程。 LibSVM使用基于空间的文本格式。以下是可以编写此格式convert from CSV
的代码写作可以是这样的(未经测试):
ofstream f("data_file");
for (auto img : images) //each image should be
{
std::vector<double> feat;
shape = predictor(img);
extract_highdim_face_lbp_descriptors(img, shape, feat);
double label = is_neutral ? -1.0 : +1.0;
f << label;
for (int i = 0; i < feat.size(); ++i)
if (feat[i] != 0.0)
f<< " " << i << ":" << feat[i];
f << endl;
}
如果您使用的是Dlib - 您不需要LibSVM - 您可以使用Dlib进行培训,here is an example of SVM training with dlib